| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798147991480014801148021480314804148051480614807148081480914810148111481214813148141481514816148171481814819148201482114822148231482414825148261482714828148291483014831148321483314834148351483614837148381483914840148411484214843148441484514846148471484814849148501485114852148531485414855148561485714858148591486014861148621486314864148651486614867148681486914870148711487214873148741487514876148771487814879148801488114882148831488414885148861488714888148891489014891148921489314894148951489614897148981489914900149011490214903149041490514906149071490814909149101491114912149131491414915149161491714918149191492014921149221492314924149251492614927149281492914930149311493214933149341493514936149371493814939149401494114942149431494414945149461494714948149491495014951149521495314954149551495614957149581495914960149611496214963149641496514966149671496814969149701497114972149731497414975149761497714978149791498014981149821498314984149851498614987149881498914990149911499214993149941499514996149971499814999150001500115002150031500415005150061500715008150091501015011150121501315014150151501615017150181501915020150211502215023150241502515026150271502815029150301503115032150331503415035150361503715038150391504015041150421504315044150451504615047150481504915050150511505215053150541505515056150571505815059150601506115062150631506415065150661506715068150691507015071150721507315074150751507615077150781507915080150811508215083150841508515086150871508815089150901509115092150931509415095150961509715098150991510015101151021510315104151051510615107151081510915110151111511215113151141511515116151171511815119151201512115122151231512415125151261512715128151291513015131151321513315134151351513615137151381513915140151411514215143151441514515146151471514815149151501515115152151531515415155151561515715158151591516015161151621516315164151651516615167151681516915170151711517215173151741517515176151771517815179151801518115182151831518415185151861518715188151891519015191151921519315194151951519615197151981519915200152011520215203152041520515206152071520815209152101521115212152131521415215152161521715218152191522015221152221522315224152251522615227152281522915230152311523215233152341523515236152371523815239152401524115242152431524415245152461524715248152491525015251152521525315254152551525615257152581525915260152611526215263152641526515266152671526815269152701527115272152731527415275152761527715278152791528015281152821528315284152851528615287152881528915290152911529215293152941529515296152971529815299153001530115302153031530415305153061530715308153091531015311153121531315314153151531615317153181531915320153211532215323153241532515326153271532815329153301533115332153331533415335153361533715338153391534015341153421534315344153451534615347153481534915350153511535215353153541535515356153571535815359153601536115362153631536415365153661536715368153691537015371153721537315374153751537615377153781537915380153811538215383153841538515386153871538815389153901539115392153931539415395153961539715398153991540015401154021540315404154051540615407154081540915410154111541215413154141541515416154171541815419154201542115422154231542415425154261542715428154291543015431154321543315434154351543615437154381543915440154411544215443154441544515446154471544815449154501545115452154531545415455154561545715458154591546015461154621546315464154651546615467154681546915470154711547215473154741547515476154771547815479154801548115482154831548415485154861548715488154891549015491154921549315494154951549615497154981549915500155011550215503155041550515506155071550815509155101551115512155131551415515155161551715518155191552015521155221552315524155251552615527155281552915530155311553215533155341553515536155371553815539155401554115542155431554415545155461554715548155491555015551155521555315554155551555615557155581555915560155611556215563155641556515566155671556815569155701557115572155731557415575155761557715578155791558015581155821558315584155851558615587155881558915590155911559215593155941559515596155971559815599156001560115602156031560415605156061560715608156091561015611156121561315614156151561615617156181561915620156211562215623156241562515626156271562815629156301563115632156331563415635156361563715638156391564015641156421564315644156451564615647156481564915650156511565215653156541565515656156571565815659156601566115662156631566415665156661566715668156691567015671156721567315674156751567615677156781567915680156811568215683156841568515686156871568815689156901569115692156931569415695156961569715698156991570015701157021570315704157051570615707157081570915710157111571215713157141571515716157171571815719157201572115722157231572415725157261572715728157291573015731157321573315734157351573615737157381573915740157411574215743157441574515746157471574815749157501575115752157531575415755157561575715758157591576015761157621576315764157651576615767157681576915770157711577215773157741577515776157771577815779157801578115782157831578415785157861578715788157891579015791157921579315794157951579615797157981579915800158011580215803158041580515806158071580815809158101581115812158131581415815158161581715818158191582015821158221582315824158251582615827158281582915830158311583215833158341583515836158371583815839158401584115842158431584415845158461584715848158491585015851158521585315854158551585615857158581585915860158611586215863158641586515866158671586815869158701587115872158731587415875158761587715878158791588015881158821588315884158851588615887158881588915890158911589215893158941589515896158971589815899159001590115902159031590415905159061590715908159091591015911159121591315914159151591615917159181591915920159211592215923159241592515926159271592815929159301593115932159331593415935159361593715938159391594015941159421594315944159451594615947159481594915950159511595215953159541595515956159571595815959159601596115962159631596415965159661596715968159691597015971159721597315974159751597615977159781597915980159811598215983159841598515986159871598815989159901599115992159931599415995159961599715998159991600016001160021600316004160051600616007160081600916010160111601216013160141601516016160171601816019160201602116022160231602416025160261602716028160291603016031160321603316034160351603616037160381603916040160411604216043160441604516046160471604816049160501605116052160531605416055160561605716058160591606016061160621606316064160651606616067160681606916070160711607216073160741607516076160771607816079160801608116082160831608416085160861608716088160891609016091160921609316094160951609616097160981609916100161011610216103161041610516106161071610816109161101611116112161131611416115161161611716118161191612016121161221612316124161251612616127161281612916130161311613216133161341613516136161371613816139161401614116142161431614416145161461614716148161491615016151161521615316154161551615616157161581615916160161611616216163161641616516166161671616816169161701617116172161731617416175161761617716178161791618016181161821618316184161851618616187161881618916190161911619216193161941619516196161971619816199162001620116202162031620416205162061620716208162091621016211162121621316214162151621616217162181621916220162211622216223162241622516226162271622816229162301623116232162331623416235162361623716238162391624016241162421624316244162451624616247162481624916250162511625216253162541625516256162571625816259162601626116262162631626416265162661626716268162691627016271162721627316274162751627616277162781627916280162811628216283162841628516286162871628816289162901629116292162931629416295162961629716298162991630016301163021630316304163051630616307163081630916310163111631216313163141631516316163171631816319163201632116322163231632416325163261632716328163291633016331163321633316334163351633616337163381633916340163411634216343163441634516346163471634816349163501635116352163531635416355163561635716358163591636016361163621636316364163651636616367163681636916370163711637216373163741637516376163771637816379163801638116382163831638416385163861638716388163891639016391163921639316394163951639616397163981639916400164011640216403164041640516406164071640816409164101641116412164131641416415164161641716418164191642016421164221642316424164251642616427164281642916430164311643216433164341643516436164371643816439164401644116442164431644416445164461644716448164491645016451164521645316454164551645616457164581645916460164611646216463164641646516466164671646816469164701647116472164731647416475164761647716478164791648016481164821648316484164851648616487164881648916490164911649216493164941649516496164971649816499165001650116502165031650416505165061650716508165091651016511165121651316514165151651616517165181651916520165211652216523165241652516526165271652816529165301653116532165331653416535165361653716538165391654016541165421654316544165451654616547165481654916550165511655216553165541655516556165571655816559165601656116562165631656416565165661656716568165691657016571165721657316574165751657616577165781657916580165811658216583165841658516586165871658816589165901659116592165931659416595165961659716598165991660016601166021660316604166051660616607166081660916610166111661216613166141661516616166171661816619166201662116622166231662416625166261662716628166291663016631166321663316634166351663616637166381663916640166411664216643166441664516646166471664816649166501665116652166531665416655166561665716658166591666016661166621666316664166651666616667166681666916670166711667216673166741667516676166771667816679166801668116682166831668416685166861668716688166891669016691166921669316694166951669616697166981669916700167011670216703167041670516706167071670816709167101671116712167131671416715167161671716718167191672016721167221672316724167251672616727167281672916730167311673216733167341673516736167371673816739167401674116742167431674416745167461674716748167491675016751167521675316754167551675616757167581675916760167611676216763167641676516766167671676816769167701677116772167731677416775167761677716778167791678016781167821678316784167851678616787167881678916790167911679216793167941679516796167971679816799168001680116802168031680416805168061680716808168091681016811168121681316814168151681616817168181681916820168211682216823168241682516826168271682816829168301683116832168331683416835168361683716838168391684016841168421684316844168451684616847168481684916850168511685216853168541685516856168571685816859168601686116862168631686416865168661686716868168691687016871168721687316874168751687616877168781687916880168811688216883168841688516886168871688816889168901689116892168931689416895168961689716898168991690016901169021690316904169051690616907169081690916910169111691216913169141691516916169171691816919169201692116922169231692416925169261692716928169291693016931169321693316934169351693616937169381693916940169411694216943169441694516946169471694816949169501695116952169531695416955169561695716958169591696016961169621696316964169651696616967169681696916970169711697216973169741697516976169771697816979169801698116982169831698416985169861698716988169891699016991169921699316994169951699616997169981699917000170011700217003170041700517006170071700817009170101701117012170131701417015170161701717018170191702017021170221702317024170251702617027170281702917030170311703217033170341703517036170371703817039170401704117042170431704417045170461704717048170491705017051170521705317054170551705617057170581705917060170611706217063170641706517066170671706817069170701707117072170731707417075170761707717078170791708017081170821708317084170851708617087170881708917090170911709217093170941709517096170971709817099171001710117102171031710417105171061710717108171091711017111171121711317114171151711617117171181711917120171211712217123171241712517126171271712817129171301713117132171331713417135171361713717138171391714017141171421714317144171451714617147171481714917150171511715217153171541715517156171571715817159171601716117162171631716417165171661716717168171691717017171171721717317174171751717617177171781717917180171811718217183171841718517186171871718817189171901719117192171931719417195171961719717198171991720017201172021720317204172051720617207172081720917210172111721217213172141721517216172171721817219172201722117222172231722417225172261722717228172291723017231172321723317234172351723617237172381723917240172411724217243172441724517246172471724817249172501725117252172531725417255172561725717258172591726017261172621726317264172651726617267172681726917270172711727217273172741727517276172771727817279172801728117282172831728417285172861728717288172891729017291172921729317294172951729617297172981729917300173011730217303173041730517306173071730817309173101731117312173131731417315173161731717318173191732017321173221732317324173251732617327173281732917330173311733217333173341733517336173371733817339173401734117342173431734417345173461734717348173491735017351173521735317354173551735617357173581735917360173611736217363173641736517366173671736817369173701737117372173731737417375173761737717378173791738017381173821738317384173851738617387173881738917390173911739217393173941739517396173971739817399174001740117402174031740417405174061740717408174091741017411174121741317414174151741617417174181741917420174211742217423174241742517426174271742817429174301743117432174331743417435174361743717438174391744017441174421744317444174451744617447174481744917450174511745217453174541745517456174571745817459174601746117462174631746417465174661746717468174691747017471174721747317474174751747617477174781747917480174811748217483174841748517486174871748817489174901749117492174931749417495174961749717498174991750017501175021750317504175051750617507175081750917510175111751217513175141751517516175171751817519175201752117522175231752417525175261752717528175291753017531175321753317534175351753617537175381753917540175411754217543175441754517546175471754817549175501755117552175531755417555175561755717558175591756017561175621756317564175651756617567175681756917570175711757217573175741757517576175771757817579175801758117582175831758417585175861758717588175891759017591175921759317594175951759617597175981759917600176011760217603176041760517606176071760817609176101761117612176131761417615176161761717618176191762017621176221762317624176251762617627176281762917630176311763217633176341763517636176371763817639176401764117642176431764417645176461764717648176491765017651176521765317654176551765617657176581765917660176611766217663176641766517666176671766817669176701767117672176731767417675176761767717678176791768017681176821768317684176851768617687176881768917690176911769217693176941769517696176971769817699177001770117702177031770417705177061770717708177091771017711177121771317714177151771617717177181771917720177211772217723177241772517726177271772817729177301773117732177331773417735177361773717738177391774017741177421774317744177451774617747177481774917750177511775217753177541775517756177571775817759177601776117762177631776417765177661776717768177691777017771177721777317774177751777617777177781777917780177811778217783177841778517786177871778817789177901779117792177931779417795177961779717798177991780017801178021780317804178051780617807178081780917810178111781217813178141781517816178171781817819178201782117822178231782417825178261782717828178291783017831178321783317834178351783617837178381783917840178411784217843178441784517846178471784817849178501785117852178531785417855178561785717858178591786017861178621786317864178651786617867178681786917870178711787217873178741787517876178771787817879178801788117882178831788417885178861788717888178891789017891178921789317894178951789617897178981789917900179011790217903179041790517906179071790817909179101791117912179131791417915179161791717918179191792017921179221792317924179251792617927179281792917930179311793217933179341793517936179371793817939179401794117942179431794417945179461794717948179491795017951179521795317954179551795617957179581795917960179611796217963179641796517966179671796817969179701797117972179731797417975179761797717978179791798017981179821798317984179851798617987179881798917990179911799217993179941799517996179971799817999180001800118002180031800418005180061800718008180091801018011180121801318014180151801618017180181801918020180211802218023180241802518026180271802818029180301803118032180331803418035180361803718038180391804018041180421804318044180451804618047180481804918050180511805218053180541805518056180571805818059180601806118062180631806418065180661806718068180691807018071180721807318074180751807618077180781807918080180811808218083180841808518086180871808818089180901809118092180931809418095180961809718098180991810018101181021810318104181051810618107181081810918110181111811218113181141811518116181171811818119181201812118122181231812418125181261812718128181291813018131181321813318134181351813618137181381813918140181411814218143181441814518146181471814818149181501815118152181531815418155181561815718158181591816018161181621816318164181651816618167181681816918170181711817218173181741817518176181771817818179181801818118182181831818418185181861818718188181891819018191181921819318194181951819618197181981819918200182011820218203182041820518206182071820818209182101821118212182131821418215182161821718218182191822018221182221822318224182251822618227182281822918230182311823218233182341823518236182371823818239182401824118242182431824418245182461824718248182491825018251182521825318254182551825618257182581825918260182611826218263182641826518266182671826818269182701827118272182731827418275182761827718278182791828018281182821828318284182851828618287182881828918290182911829218293182941829518296182971829818299183001830118302183031830418305183061830718308183091831018311183121831318314183151831618317183181831918320183211832218323183241832518326183271832818329183301833118332183331833418335183361833718338183391834018341183421834318344183451834618347183481834918350183511835218353183541835518356183571835818359183601836118362183631836418365183661836718368183691837018371183721837318374183751837618377183781837918380183811838218383183841838518386183871838818389183901839118392183931839418395183961839718398183991840018401184021840318404184051840618407184081840918410184111841218413184141841518416184171841818419184201842118422184231842418425184261842718428184291843018431184321843318434184351843618437184381843918440184411844218443184441844518446184471844818449184501845118452184531845418455184561845718458184591846018461184621846318464184651846618467184681846918470184711847218473184741847518476184771847818479184801848118482184831848418485184861848718488184891849018491184921849318494184951849618497184981849918500185011850218503185041850518506185071850818509185101851118512185131851418515185161851718518185191852018521185221852318524185251852618527185281852918530185311853218533185341853518536185371853818539185401854118542185431854418545185461854718548185491855018551185521855318554185551855618557185581855918560185611856218563185641856518566185671856818569185701857118572185731857418575185761857718578185791858018581185821858318584185851858618587185881858918590185911859218593185941859518596185971859818599186001860118602186031860418605186061860718608186091861018611186121861318614186151861618617186181861918620186211862218623186241862518626186271862818629186301863118632186331863418635186361863718638186391864018641186421864318644186451864618647186481864918650186511865218653186541865518656186571865818659186601866118662186631866418665186661866718668186691867018671186721867318674186751867618677186781867918680186811868218683186841868518686186871868818689186901869118692186931869418695186961869718698186991870018701187021870318704187051870618707187081870918710187111871218713187141871518716187171871818719187201872118722187231872418725187261872718728187291873018731187321873318734187351873618737187381873918740187411874218743187441874518746187471874818749187501875118752187531875418755187561875718758187591876018761187621876318764187651876618767187681876918770187711877218773187741877518776187771877818779187801878118782187831878418785187861878718788187891879018791187921879318794187951879618797187981879918800188011880218803188041880518806188071880818809188101881118812188131881418815188161881718818188191882018821188221882318824188251882618827188281882918830188311883218833188341883518836188371883818839188401884118842188431884418845188461884718848188491885018851188521885318854188551885618857188581885918860188611886218863188641886518866188671886818869188701887118872188731887418875188761887718878188791888018881188821888318884188851888618887188881888918890188911889218893188941889518896188971889818899189001890118902189031890418905189061890718908189091891018911189121891318914189151891618917189181891918920189211892218923189241892518926189271892818929189301893118932189331893418935189361893718938189391894018941189421894318944189451894618947189481894918950189511895218953189541895518956189571895818959189601896118962189631896418965189661896718968189691897018971189721897318974189751897618977189781897918980189811898218983189841898518986189871898818989189901899118992189931899418995189961899718998189991900019001190021900319004190051900619007190081900919010190111901219013190141901519016190171901819019190201902119022190231902419025190261902719028190291903019031190321903319034190351903619037190381903919040190411904219043190441904519046190471904819049190501905119052190531905419055190561905719058190591906019061190621906319064190651906619067190681906919070190711907219073190741907519076190771907819079190801908119082190831908419085190861908719088190891909019091190921909319094190951909619097190981909919100191011910219103191041910519106191071910819109191101911119112191131911419115191161911719118191191912019121191221912319124191251912619127191281912919130191311913219133191341913519136191371913819139191401914119142191431914419145191461914719148191491915019151191521915319154191551915619157191581915919160191611916219163191641916519166191671916819169191701917119172191731917419175191761917719178191791918019181191821918319184191851918619187191881918919190191911919219193191941919519196191971919819199192001920119202192031920419205192061920719208192091921019211192121921319214192151921619217192181921919220192211922219223192241922519226192271922819229192301923119232192331923419235192361923719238192391924019241192421924319244192451924619247192481924919250192511925219253192541925519256192571925819259192601926119262192631926419265192661926719268192691927019271192721927319274192751927619277192781927919280192811928219283192841928519286192871928819289192901929119292192931929419295192961929719298192991930019301193021930319304193051930619307193081930919310193111931219313193141931519316193171931819319193201932119322193231932419325193261932719328193291933019331193321933319334193351933619337193381933919340193411934219343193441934519346193471934819349193501935119352193531935419355193561935719358193591936019361193621936319364193651936619367193681936919370193711937219373193741937519376193771937819379193801938119382193831938419385193861938719388193891939019391193921939319394193951939619397193981939919400194011940219403194041940519406194071940819409194101941119412194131941419415194161941719418194191942019421194221942319424194251942619427194281942919430194311943219433194341943519436194371943819439194401944119442194431944419445194461944719448194491945019451194521945319454194551945619457194581945919460194611946219463194641946519466194671946819469194701947119472194731947419475194761947719478194791948019481194821948319484194851948619487194881948919490194911949219493194941949519496194971949819499195001950119502195031950419505195061950719508195091951019511195121951319514195151951619517195181951919520195211952219523195241952519526195271952819529195301953119532195331953419535195361953719538195391954019541195421954319544195451954619547195481954919550195511955219553195541955519556195571955819559195601956119562195631956419565195661956719568195691957019571195721957319574195751957619577195781957919580195811958219583195841958519586195871958819589195901959119592195931959419595195961959719598195991960019601196021960319604196051960619607196081960919610196111961219613196141961519616196171961819619196201962119622196231962419625196261962719628196291963019631196321963319634196351963619637196381963919640196411964219643196441964519646196471964819649196501965119652196531965419655196561965719658196591966019661196621966319664196651966619667196681966919670196711967219673196741967519676196771967819679196801968119682196831968419685196861968719688196891969019691196921969319694196951969619697196981969919700197011970219703197041970519706197071970819709197101971119712197131971419715197161971719718197191972019721197221972319724197251972619727197281972919730197311973219733197341973519736197371973819739197401974119742197431974419745197461974719748197491975019751197521975319754197551975619757197581975919760197611976219763197641976519766197671976819769197701977119772197731977419775197761977719778197791978019781197821978319784197851978619787197881978919790197911979219793197941979519796197971979819799198001980119802198031980419805198061980719808198091981019811198121981319814198151981619817198181981919820198211982219823198241982519826198271982819829198301983119832198331983419835198361983719838198391984019841198421984319844198451984619847198481984919850198511985219853198541985519856198571985819859198601986119862198631986419865198661986719868198691987019871198721987319874198751987619877198781987919880198811988219883198841988519886198871988819889198901989119892198931989419895198961989719898198991990019901199021990319904199051990619907199081990919910199111991219913199141991519916199171991819919199201992119922199231992419925199261992719928199291993019931199321993319934199351993619937199381993919940199411994219943199441994519946199471994819949199501995119952199531995419955199561995719958199591996019961199621996319964199651996619967199681996919970199711997219973199741997519976199771997819979199801998119982199831998419985199861998719988199891999019991199921999319994199951999619997199981999920000200012000220003200042000520006200072000820009200102001120012200132001420015200162001720018200192002020021200222002320024200252002620027200282002920030200312003220033200342003520036200372003820039200402004120042200432004420045200462004720048200492005020051200522005320054200552005620057200582005920060200612006220063200642006520066200672006820069200702007120072200732007420075200762007720078200792008020081200822008320084200852008620087200882008920090200912009220093200942009520096200972009820099201002010120102201032010420105201062010720108201092011020111201122011320114201152011620117201182011920120201212012220123201242012520126201272012820129201302013120132201332013420135201362013720138201392014020141201422014320144201452014620147201482014920150201512015220153201542015520156201572015820159201602016120162201632016420165201662016720168201692017020171201722017320174201752017620177201782017920180201812018220183201842018520186201872018820189201902019120192201932019420195201962019720198201992020020201202022020320204202052020620207202082020920210202112021220213202142021520216202172021820219202202022120222202232022420225202262022720228202292023020231202322023320234202352023620237202382023920240202412024220243202442024520246202472024820249202502025120252202532025420255202562025720258202592026020261202622026320264202652026620267202682026920270202712027220273202742027520276202772027820279202802028120282202832028420285202862028720288202892029020291202922029320294202952029620297202982029920300203012030220303203042030520306203072030820309203102031120312203132031420315203162031720318203192032020321203222032320324203252032620327203282032920330203312033220333203342033520336203372033820339203402034120342203432034420345203462034720348203492035020351203522035320354203552035620357203582035920360203612036220363203642036520366203672036820369203702037120372203732037420375203762037720378203792038020381203822038320384203852038620387203882038920390203912039220393203942039520396203972039820399204002040120402204032040420405204062040720408204092041020411204122041320414204152041620417204182041920420204212042220423204242042520426204272042820429204302043120432204332043420435204362043720438204392044020441204422044320444204452044620447204482044920450204512045220453204542045520456204572045820459204602046120462204632046420465204662046720468204692047020471204722047320474204752047620477204782047920480204812048220483204842048520486204872048820489204902049120492204932049420495204962049720498204992050020501205022050320504205052050620507205082050920510205112051220513205142051520516205172051820519205202052120522205232052420525205262052720528205292053020531205322053320534205352053620537205382053920540205412054220543205442054520546205472054820549205502055120552205532055420555205562055720558205592056020561205622056320564205652056620567205682056920570205712057220573205742057520576205772057820579205802058120582205832058420585205862058720588205892059020591205922059320594205952059620597205982059920600206012060220603206042060520606206072060820609206102061120612206132061420615206162061720618206192062020621206222062320624206252062620627206282062920630206312063220633206342063520636206372063820639206402064120642206432064420645206462064720648206492065020651206522065320654206552065620657206582065920660206612066220663206642066520666206672066820669206702067120672206732067420675206762067720678206792068020681206822068320684206852068620687206882068920690206912069220693206942069520696206972069820699207002070120702207032070420705207062070720708207092071020711207122071320714207152071620717207182071920720207212072220723207242072520726207272072820729207302073120732207332073420735207362073720738207392074020741207422074320744207452074620747207482074920750207512075220753207542075520756207572075820759207602076120762207632076420765207662076720768207692077020771207722077320774207752077620777207782077920780207812078220783207842078520786207872078820789207902079120792207932079420795207962079720798207992080020801208022080320804208052080620807208082080920810208112081220813208142081520816208172081820819208202082120822208232082420825208262082720828208292083020831208322083320834208352083620837208382083920840208412084220843208442084520846208472084820849208502085120852208532085420855208562085720858208592086020861208622086320864208652086620867208682086920870208712087220873208742087520876208772087820879208802088120882208832088420885208862088720888208892089020891208922089320894208952089620897208982089920900209012090220903209042090520906209072090820909209102091120912209132091420915209162091720918209192092020921209222092320924209252092620927209282092920930209312093220933209342093520936209372093820939209402094120942209432094420945209462094720948209492095020951209522095320954209552095620957209582095920960209612096220963209642096520966209672096820969209702097120972209732097420975209762097720978209792098020981209822098320984209852098620987209882098920990209912099220993209942099520996209972099820999210002100121002210032100421005210062100721008210092101021011210122101321014210152101621017210182101921020210212102221023210242102521026210272102821029210302103121032210332103421035210362103721038210392104021041210422104321044210452104621047210482104921050210512105221053210542105521056210572105821059210602106121062210632106421065210662106721068210692107021071210722107321074210752107621077210782107921080210812108221083210842108521086210872108821089210902109121092210932109421095210962109721098210992110021101211022110321104211052110621107211082110921110211112111221113211142111521116211172111821119211202112121122211232112421125211262112721128211292113021131211322113321134211352113621137211382113921140211412114221143211442114521146211472114821149211502115121152211532115421155211562115721158211592116021161211622116321164211652116621167211682116921170211712117221173211742117521176211772117821179211802118121182211832118421185211862118721188211892119021191211922119321194211952119621197211982119921200212012120221203212042120521206212072120821209212102121121212212132121421215212162121721218212192122021221212222122321224212252122621227212282122921230212312123221233212342123521236212372123821239212402124121242212432124421245212462124721248212492125021251212522125321254212552125621257212582125921260212612126221263212642126521266212672126821269212702127121272212732127421275212762127721278212792128021281212822128321284212852128621287212882128921290212912129221293212942129521296212972129821299213002130121302213032130421305213062130721308213092131021311213122131321314213152131621317213182131921320213212132221323213242132521326213272132821329213302133121332213332133421335213362133721338213392134021341213422134321344213452134621347213482134921350213512135221353213542135521356213572135821359213602136121362213632136421365213662136721368213692137021371213722137321374213752137621377213782137921380213812138221383213842138521386213872138821389213902139121392213932139421395213962139721398213992140021401214022140321404214052140621407214082140921410214112141221413214142141521416214172141821419214202142121422214232142421425214262142721428214292143021431214322143321434214352143621437214382143921440214412144221443214442144521446214472144821449214502145121452214532145421455214562145721458214592146021461214622146321464214652146621467214682146921470214712147221473214742147521476214772147821479214802148121482214832148421485214862148721488214892149021491214922149321494214952149621497214982149921500215012150221503215042150521506215072150821509215102151121512215132151421515215162151721518215192152021521215222152321524215252152621527215282152921530215312153221533215342153521536215372153821539215402154121542215432154421545215462154721548215492155021551215522155321554215552155621557215582155921560215612156221563215642156521566215672156821569215702157121572215732157421575215762157721578215792158021581215822158321584215852158621587215882158921590215912159221593215942159521596215972159821599216002160121602216032160421605216062160721608216092161021611216122161321614216152161621617216182161921620216212162221623216242162521626216272162821629216302163121632216332163421635216362163721638216392164021641216422164321644216452164621647216482164921650216512165221653216542165521656216572165821659216602166121662216632166421665216662166721668216692167021671216722167321674216752167621677216782167921680216812168221683216842168521686216872168821689216902169121692216932169421695216962169721698216992170021701217022170321704217052170621707217082170921710217112171221713217142171521716217172171821719217202172121722217232172421725217262172721728217292173021731217322173321734217352173621737217382173921740217412174221743217442174521746217472174821749217502175121752217532175421755217562175721758217592176021761217622176321764217652176621767217682176921770217712177221773217742177521776217772177821779217802178121782217832178421785217862178721788217892179021791217922179321794217952179621797217982179921800218012180221803218042180521806218072180821809218102181121812218132181421815218162181721818218192182021821218222182321824218252182621827218282182921830218312183221833218342183521836218372183821839218402184121842218432184421845218462184721848218492185021851218522185321854218552185621857218582185921860218612186221863218642186521866218672186821869218702187121872218732187421875218762187721878218792188021881218822188321884218852188621887218882188921890218912189221893218942189521896218972189821899219002190121902219032190421905219062190721908219092191021911219122191321914219152191621917219182191921920219212192221923219242192521926219272192821929219302193121932219332193421935219362193721938219392194021941219422194321944219452194621947219482194921950219512195221953219542195521956219572195821959219602196121962219632196421965219662196721968219692197021971219722197321974219752197621977219782197921980219812198221983219842198521986219872198821989219902199121992219932199421995219962199721998219992200022001220022200322004220052200622007220082200922010220112201222013220142201522016220172201822019220202202122022220232202422025220262202722028220292203022031220322203322034220352203622037220382203922040220412204222043220442204522046220472204822049220502205122052220532205422055220562205722058220592206022061220622206322064220652206622067220682206922070220712207222073220742207522076220772207822079220802208122082220832208422085220862208722088220892209022091220922209322094220952209622097220982209922100221012210222103221042210522106221072210822109221102211122112221132211422115221162211722118221192212022121221222212322124221252212622127221282212922130221312213222133221342213522136221372213822139221402214122142221432214422145221462214722148221492215022151221522215322154221552215622157221582215922160221612216222163221642216522166221672216822169221702217122172221732217422175221762217722178221792218022181221822218322184221852218622187221882218922190221912219222193221942219522196221972219822199222002220122202222032220422205222062220722208222092221022211222122221322214222152221622217222182221922220222212222222223222242222522226222272222822229222302223122232222332223422235222362223722238222392224022241222422224322244222452224622247222482224922250222512225222253222542225522256222572225822259222602226122262222632226422265222662226722268222692227022271222722227322274222752227622277222782227922280222812228222283222842228522286222872228822289222902229122292222932229422295222962229722298222992230022301223022230322304223052230622307223082230922310223112231222313223142231522316223172231822319223202232122322223232232422325223262232722328223292233022331223322233322334223352233622337223382233922340223412234222343223442234522346223472234822349223502235122352223532235422355223562235722358223592236022361223622236322364223652236622367223682236922370223712237222373223742237522376223772237822379223802238122382223832238422385223862238722388223892239022391223922239322394223952239622397223982239922400224012240222403224042240522406224072240822409224102241122412224132241422415224162241722418224192242022421224222242322424224252242622427224282242922430224312243222433224342243522436224372243822439224402244122442224432244422445224462244722448224492245022451224522245322454224552245622457224582245922460224612246222463224642246522466224672246822469224702247122472224732247422475224762247722478224792248022481224822248322484224852248622487224882248922490224912249222493224942249522496224972249822499225002250122502225032250422505225062250722508225092251022511225122251322514225152251622517225182251922520225212252222523225242252522526225272252822529225302253122532225332253422535225362253722538225392254022541225422254322544225452254622547225482254922550225512255222553225542255522556225572255822559225602256122562225632256422565225662256722568225692257022571225722257322574225752257622577225782257922580225812258222583225842258522586225872258822589225902259122592225932259422595225962259722598225992260022601226022260322604226052260622607226082260922610226112261222613226142261522616226172261822619226202262122622226232262422625226262262722628226292263022631226322263322634226352263622637226382263922640226412264222643226442264522646226472264822649226502265122652226532265422655226562265722658226592266022661226622266322664226652266622667226682266922670226712267222673226742267522676226772267822679226802268122682226832268422685226862268722688226892269022691226922269322694226952269622697226982269922700227012270222703227042270522706227072270822709227102271122712227132271422715227162271722718227192272022721227222272322724227252272622727227282272922730227312273222733227342273522736227372273822739227402274122742227432274422745227462274722748227492275022751227522275322754227552275622757227582275922760227612276222763227642276522766227672276822769227702277122772227732277422775227762277722778227792278022781227822278322784227852278622787227882278922790227912279222793227942279522796227972279822799228002280122802228032280422805228062280722808228092281022811228122281322814228152281622817228182281922820228212282222823228242282522826228272282822829228302283122832228332283422835228362283722838228392284022841228422284322844228452284622847228482284922850228512285222853228542285522856228572285822859228602286122862228632286422865228662286722868228692287022871228722287322874228752287622877228782287922880228812288222883228842288522886228872288822889228902289122892228932289422895228962289722898228992290022901229022290322904229052290622907229082290922910229112291222913229142291522916229172291822919229202292122922229232292422925229262292722928229292293022931229322293322934229352293622937229382293922940229412294222943229442294522946229472294822949229502295122952229532295422955229562295722958229592296022961229622296322964229652296622967229682296922970229712297222973229742297522976229772297822979229802298122982229832298422985229862298722988229892299022991229922299322994229952299622997229982299923000230012300223003230042300523006230072300823009230102301123012230132301423015230162301723018230192302023021230222302323024230252302623027230282302923030230312303223033230342303523036230372303823039230402304123042230432304423045230462304723048230492305023051230522305323054230552305623057230582305923060230612306223063230642306523066230672306823069230702307123072230732307423075230762307723078230792308023081230822308323084230852308623087230882308923090230912309223093230942309523096230972309823099231002310123102231032310423105231062310723108231092311023111231122311323114231152311623117231182311923120231212312223123231242312523126231272312823129231302313123132231332313423135231362313723138231392314023141231422314323144231452314623147231482314923150231512315223153231542315523156231572315823159231602316123162231632316423165231662316723168231692317023171231722317323174231752317623177231782317923180231812318223183231842318523186231872318823189231902319123192231932319423195231962319723198231992320023201232022320323204232052320623207232082320923210232112321223213232142321523216232172321823219232202322123222232232322423225232262322723228232292323023231232322323323234232352323623237232382323923240232412324223243232442324523246232472324823249232502325123252232532325423255232562325723258232592326023261232622326323264232652326623267232682326923270232712327223273232742327523276232772327823279232802328123282232832328423285232862328723288232892329023291232922329323294232952329623297232982329923300233012330223303233042330523306233072330823309233102331123312233132331423315233162331723318233192332023321233222332323324233252332623327233282332923330233312333223333233342333523336233372333823339233402334123342233432334423345233462334723348233492335023351233522335323354233552335623357233582335923360233612336223363233642336523366233672336823369233702337123372233732337423375233762337723378233792338023381233822338323384233852338623387233882338923390233912339223393233942339523396233972339823399234002340123402234032340423405234062340723408234092341023411234122341323414234152341623417234182341923420234212342223423234242342523426234272342823429234302343123432234332343423435234362343723438234392344023441234422344323444234452344623447234482344923450234512345223453234542345523456234572345823459234602346123462234632346423465234662346723468234692347023471234722347323474234752347623477234782347923480234812348223483234842348523486234872348823489234902349123492234932349423495234962349723498234992350023501235022350323504235052350623507235082350923510235112351223513235142351523516235172351823519235202352123522235232352423525235262352723528235292353023531235322353323534235352353623537235382353923540235412354223543235442354523546235472354823549235502355123552235532355423555235562355723558235592356023561235622356323564235652356623567235682356923570235712357223573235742357523576235772357823579235802358123582235832358423585235862358723588235892359023591235922359323594235952359623597235982359923600236012360223603236042360523606236072360823609236102361123612236132361423615236162361723618236192362023621236222362323624236252362623627236282362923630236312363223633236342363523636236372363823639236402364123642236432364423645236462364723648236492365023651236522365323654236552365623657236582365923660236612366223663236642366523666236672366823669236702367123672236732367423675236762367723678236792368023681236822368323684236852368623687236882368923690236912369223693236942369523696236972369823699237002370123702237032370423705237062370723708237092371023711237122371323714237152371623717237182371923720237212372223723237242372523726237272372823729237302373123732237332373423735237362373723738237392374023741237422374323744237452374623747237482374923750237512375223753237542375523756237572375823759237602376123762237632376423765237662376723768237692377023771237722377323774237752377623777237782377923780237812378223783237842378523786237872378823789237902379123792237932379423795237962379723798237992380023801238022380323804238052380623807238082380923810238112381223813238142381523816238172381823819238202382123822238232382423825238262382723828238292383023831238322383323834238352383623837238382383923840238412384223843238442384523846238472384823849238502385123852238532385423855238562385723858238592386023861238622386323864238652386623867238682386923870238712387223873238742387523876238772387823879238802388123882238832388423885238862388723888238892389023891238922389323894238952389623897238982389923900239012390223903239042390523906239072390823909239102391123912239132391423915239162391723918239192392023921239222392323924239252392623927239282392923930239312393223933239342393523936239372393823939239402394123942239432394423945239462394723948239492395023951239522395323954239552395623957239582395923960239612396223963239642396523966239672396823969239702397123972239732397423975239762397723978239792398023981239822398323984239852398623987239882398923990239912399223993239942399523996239972399823999240002400124002240032400424005240062400724008240092401024011240122401324014240152401624017240182401924020240212402224023240242402524026240272402824029240302403124032240332403424035240362403724038240392404024041240422404324044240452404624047240482404924050240512405224053240542405524056240572405824059240602406124062240632406424065240662406724068240692407024071240722407324074240752407624077240782407924080240812408224083240842408524086240872408824089240902409124092240932409424095240962409724098240992410024101241022410324104241052410624107241082410924110241112411224113241142411524116241172411824119241202412124122241232412424125241262412724128241292413024131241322413324134241352413624137241382413924140241412414224143241442414524146241472414824149241502415124152241532415424155241562415724158241592416024161241622416324164241652416624167241682416924170241712417224173241742417524176241772417824179241802418124182241832418424185241862418724188241892419024191241922419324194241952419624197241982419924200242012420224203242042420524206242072420824209242102421124212242132421424215242162421724218242192422024221242222422324224242252422624227242282422924230242312423224233242342423524236242372423824239242402424124242242432424424245242462424724248242492425024251242522425324254242552425624257242582425924260242612426224263242642426524266242672426824269242702427124272242732427424275242762427724278242792428024281242822428324284242852428624287242882428924290242912429224293242942429524296242972429824299243002430124302243032430424305243062430724308243092431024311243122431324314243152431624317243182431924320243212432224323243242432524326243272432824329243302433124332243332433424335243362433724338243392434024341243422434324344243452434624347243482434924350243512435224353243542435524356243572435824359243602436124362243632436424365243662436724368243692437024371243722437324374243752437624377243782437924380243812438224383243842438524386243872438824389243902439124392243932439424395243962439724398243992440024401244022440324404244052440624407244082440924410244112441224413244142441524416244172441824419244202442124422244232442424425244262442724428244292443024431244322443324434244352443624437244382443924440244412444224443244442444524446244472444824449244502445124452244532445424455244562445724458244592446024461244622446324464244652446624467244682446924470244712447224473244742447524476244772447824479244802448124482244832448424485244862448724488244892449024491244922449324494244952449624497244982449924500245012450224503245042450524506245072450824509245102451124512245132451424515245162451724518245192452024521245222452324524245252452624527245282452924530245312453224533245342453524536245372453824539245402454124542245432454424545245462454724548245492455024551245522455324554245552455624557245582455924560245612456224563245642456524566245672456824569245702457124572245732457424575245762457724578245792458024581245822458324584245852458624587245882458924590245912459224593245942459524596245972459824599246002460124602246032460424605246062460724608246092461024611246122461324614246152461624617246182461924620246212462224623246242462524626246272462824629246302463124632246332463424635246362463724638246392464024641246422464324644246452464624647246482464924650246512465224653246542465524656246572465824659246602466124662246632466424665246662466724668246692467024671246722467324674246752467624677246782467924680246812468224683246842468524686246872468824689246902469124692246932469424695246962469724698246992470024701247022470324704247052470624707247082470924710247112471224713247142471524716247172471824719247202472124722247232472424725247262472724728247292473024731247322473324734247352473624737247382473924740247412474224743247442474524746247472474824749247502475124752247532475424755247562475724758247592476024761247622476324764247652476624767247682476924770247712477224773247742477524776247772477824779247802478124782247832478424785247862478724788247892479024791247922479324794247952479624797247982479924800248012480224803248042480524806248072480824809248102481124812248132481424815248162481724818248192482024821248222482324824248252482624827248282482924830248312483224833248342483524836248372483824839248402484124842248432484424845248462484724848248492485024851248522485324854248552485624857248582485924860248612486224863248642486524866248672486824869248702487124872248732487424875248762487724878248792488024881248822488324884248852488624887248882488924890248912489224893248942489524896248972489824899249002490124902249032490424905249062490724908249092491024911249122491324914249152491624917249182491924920249212492224923249242492524926249272492824929249302493124932249332493424935249362493724938249392494024941249422494324944249452494624947249482494924950249512495224953249542495524956249572495824959249602496124962249632496424965249662496724968249692497024971249722497324974249752497624977249782497924980249812498224983249842498524986249872498824989249902499124992249932499424995249962499724998249992500025001250022500325004250052500625007250082500925010250112501225013250142501525016250172501825019250202502125022250232502425025250262502725028250292503025031250322503325034250352503625037250382503925040250412504225043250442504525046250472504825049250502505125052250532505425055250562505725058250592506025061250622506325064250652506625067250682506925070250712507225073250742507525076250772507825079250802508125082250832508425085250862508725088250892509025091250922509325094250952509625097250982509925100251012510225103251042510525106251072510825109251102511125112251132511425115251162511725118251192512025121251222512325124251252512625127251282512925130251312513225133251342513525136251372513825139251402514125142251432514425145251462514725148251492515025151251522515325154251552515625157251582515925160251612516225163251642516525166251672516825169251702517125172251732517425175251762517725178251792518025181251822518325184251852518625187251882518925190251912519225193251942519525196251972519825199252002520125202252032520425205252062520725208252092521025211252122521325214252152521625217252182521925220252212522225223252242522525226252272522825229252302523125232252332523425235252362523725238252392524025241252422524325244252452524625247252482524925250252512525225253252542525525256252572525825259252602526125262252632526425265252662526725268252692527025271252722527325274252752527625277252782527925280252812528225283252842528525286252872528825289252902529125292252932529425295252962529725298252992530025301253022530325304253052530625307253082530925310253112531225313253142531525316253172531825319253202532125322253232532425325253262532725328253292533025331253322533325334253352533625337253382533925340253412534225343253442534525346253472534825349253502535125352253532535425355253562535725358253592536025361253622536325364253652536625367253682536925370253712537225373253742537525376253772537825379253802538125382253832538425385253862538725388253892539025391253922539325394253952539625397253982539925400254012540225403254042540525406254072540825409254102541125412254132541425415254162541725418254192542025421254222542325424254252542625427254282542925430254312543225433254342543525436254372543825439254402544125442254432544425445254462544725448254492545025451254522545325454254552545625457254582545925460254612546225463254642546525466254672546825469254702547125472254732547425475254762547725478254792548025481254822548325484254852548625487254882548925490254912549225493254942549525496254972549825499255002550125502255032550425505255062550725508255092551025511255122551325514255152551625517255182551925520255212552225523255242552525526255272552825529255302553125532255332553425535255362553725538255392554025541255422554325544255452554625547255482554925550255512555225553255542555525556255572555825559255602556125562255632556425565255662556725568255692557025571255722557325574255752557625577255782557925580255812558225583255842558525586255872558825589255902559125592255932559425595255962559725598255992560025601256022560325604256052560625607256082560925610256112561225613256142561525616256172561825619256202562125622256232562425625256262562725628256292563025631256322563325634256352563625637256382563925640256412564225643256442564525646256472564825649256502565125652256532565425655256562565725658256592566025661256622566325664256652566625667256682566925670256712567225673256742567525676256772567825679256802568125682256832568425685256862568725688256892569025691256922569325694256952569625697256982569925700257012570225703257042570525706257072570825709257102571125712257132571425715257162571725718257192572025721257222572325724257252572625727257282572925730257312573225733257342573525736257372573825739257402574125742257432574425745257462574725748257492575025751257522575325754257552575625757257582575925760257612576225763257642576525766257672576825769257702577125772257732577425775257762577725778257792578025781257822578325784257852578625787257882578925790257912579225793257942579525796257972579825799258002580125802258032580425805258062580725808258092581025811258122581325814258152581625817258182581925820258212582225823258242582525826258272582825829258302583125832258332583425835258362583725838258392584025841258422584325844258452584625847258482584925850258512585225853258542585525856258572585825859258602586125862258632586425865258662586725868258692587025871258722587325874258752587625877258782587925880258812588225883258842588525886258872588825889258902589125892258932589425895258962589725898258992590025901259022590325904259052590625907259082590925910259112591225913259142591525916259172591825919259202592125922259232592425925259262592725928259292593025931259322593325934259352593625937259382593925940259412594225943259442594525946259472594825949259502595125952259532595425955259562595725958259592596025961259622596325964259652596625967259682596925970259712597225973259742597525976259772597825979259802598125982259832598425985259862598725988259892599025991259922599325994259952599625997259982599926000260012600226003260042600526006260072600826009260102601126012260132601426015260162601726018260192602026021260222602326024260252602626027260282602926030260312603226033260342603526036260372603826039260402604126042260432604426045260462604726048260492605026051260522605326054260552605626057260582605926060260612606226063260642606526066260672606826069260702607126072260732607426075260762607726078260792608026081260822608326084260852608626087260882608926090260912609226093260942609526096260972609826099261002610126102261032610426105261062610726108261092611026111261122611326114261152611626117261182611926120261212612226123261242612526126261272612826129261302613126132261332613426135261362613726138261392614026141261422614326144261452614626147261482614926150261512615226153261542615526156261572615826159261602616126162261632616426165261662616726168261692617026171261722617326174261752617626177261782617926180261812618226183261842618526186261872618826189261902619126192261932619426195261962619726198261992620026201262022620326204262052620626207262082620926210262112621226213262142621526216262172621826219262202622126222262232622426225262262622726228262292623026231262322623326234262352623626237262382623926240262412624226243262442624526246262472624826249262502625126252262532625426255262562625726258262592626026261262622626326264262652626626267262682626926270262712627226273262742627526276262772627826279262802628126282262832628426285262862628726288262892629026291262922629326294262952629626297262982629926300263012630226303263042630526306263072630826309263102631126312263132631426315263162631726318263192632026321263222632326324263252632626327263282632926330263312633226333263342633526336263372633826339263402634126342263432634426345263462634726348263492635026351263522635326354263552635626357263582635926360263612636226363263642636526366263672636826369263702637126372263732637426375263762637726378263792638026381263822638326384263852638626387263882638926390263912639226393263942639526396263972639826399264002640126402264032640426405264062640726408264092641026411264122641326414264152641626417264182641926420264212642226423264242642526426264272642826429264302643126432264332643426435264362643726438264392644026441264422644326444264452644626447264482644926450264512645226453264542645526456264572645826459264602646126462264632646426465264662646726468264692647026471264722647326474264752647626477264782647926480264812648226483264842648526486264872648826489264902649126492264932649426495264962649726498264992650026501265022650326504265052650626507265082650926510265112651226513265142651526516265172651826519265202652126522265232652426525265262652726528265292653026531265322653326534265352653626537265382653926540265412654226543265442654526546265472654826549265502655126552265532655426555265562655726558265592656026561265622656326564265652656626567265682656926570265712657226573265742657526576265772657826579265802658126582265832658426585265862658726588265892659026591265922659326594265952659626597265982659926600266012660226603266042660526606266072660826609266102661126612266132661426615266162661726618266192662026621266222662326624266252662626627266282662926630266312663226633266342663526636266372663826639266402664126642266432664426645266462664726648266492665026651266522665326654266552665626657266582665926660266612666226663266642666526666266672666826669266702667126672266732667426675266762667726678266792668026681266822668326684266852668626687266882668926690266912669226693266942669526696266972669826699267002670126702267032670426705267062670726708267092671026711267122671326714267152671626717267182671926720267212672226723267242672526726267272672826729267302673126732267332673426735267362673726738267392674026741267422674326744267452674626747267482674926750267512675226753267542675526756267572675826759267602676126762267632676426765267662676726768267692677026771267722677326774267752677626777267782677926780267812678226783267842678526786267872678826789267902679126792267932679426795267962679726798267992680026801268022680326804268052680626807268082680926810268112681226813268142681526816268172681826819268202682126822268232682426825268262682726828268292683026831268322683326834268352683626837268382683926840268412684226843268442684526846268472684826849268502685126852268532685426855268562685726858268592686026861268622686326864268652686626867268682686926870268712687226873268742687526876268772687826879268802688126882268832688426885268862688726888268892689026891268922689326894268952689626897268982689926900269012690226903269042690526906269072690826909269102691126912269132691426915269162691726918269192692026921269222692326924269252692626927269282692926930269312693226933269342693526936269372693826939269402694126942269432694426945269462694726948269492695026951269522695326954269552695626957269582695926960269612696226963269642696526966269672696826969269702697126972269732697426975269762697726978269792698026981269822698326984269852698626987269882698926990269912699226993269942699526996269972699826999270002700127002270032700427005270062700727008270092701027011270122701327014270152701627017270182701927020270212702227023270242702527026270272702827029270302703127032270332703427035270362703727038270392704027041270422704327044270452704627047270482704927050270512705227053270542705527056270572705827059270602706127062270632706427065270662706727068270692707027071270722707327074270752707627077270782707927080270812708227083270842708527086270872708827089270902709127092270932709427095270962709727098270992710027101271022710327104271052710627107271082710927110271112711227113271142711527116271172711827119271202712127122271232712427125271262712727128271292713027131271322713327134271352713627137271382713927140271412714227143271442714527146271472714827149271502715127152271532715427155271562715727158271592716027161271622716327164271652716627167271682716927170271712717227173271742717527176271772717827179271802718127182271832718427185271862718727188271892719027191271922719327194271952719627197271982719927200272012720227203272042720527206272072720827209272102721127212272132721427215272162721727218272192722027221272222722327224272252722627227272282722927230272312723227233272342723527236272372723827239272402724127242272432724427245272462724727248272492725027251272522725327254272552725627257272582725927260272612726227263272642726527266272672726827269272702727127272272732727427275272762727727278272792728027281272822728327284272852728627287272882728927290272912729227293272942729527296272972729827299273002730127302273032730427305273062730727308273092731027311273122731327314273152731627317273182731927320273212732227323273242732527326273272732827329273302733127332273332733427335273362733727338273392734027341273422734327344273452734627347273482734927350273512735227353273542735527356273572735827359273602736127362273632736427365273662736727368273692737027371273722737327374273752737627377273782737927380273812738227383273842738527386273872738827389273902739127392273932739427395273962739727398273992740027401274022740327404274052740627407274082740927410274112741227413274142741527416274172741827419274202742127422274232742427425274262742727428274292743027431274322743327434274352743627437274382743927440274412744227443274442744527446274472744827449274502745127452274532745427455274562745727458274592746027461274622746327464274652746627467274682746927470274712747227473274742747527476274772747827479274802748127482274832748427485274862748727488274892749027491274922749327494274952749627497274982749927500275012750227503275042750527506275072750827509275102751127512275132751427515275162751727518275192752027521275222752327524275252752627527275282752927530275312753227533275342753527536275372753827539275402754127542275432754427545275462754727548275492755027551275522755327554275552755627557275582755927560275612756227563275642756527566275672756827569275702757127572275732757427575275762757727578275792758027581275822758327584275852758627587275882758927590275912759227593275942759527596275972759827599276002760127602276032760427605276062760727608276092761027611276122761327614276152761627617276182761927620276212762227623276242762527626276272762827629276302763127632276332763427635276362763727638276392764027641276422764327644276452764627647276482764927650276512765227653276542765527656276572765827659276602766127662276632766427665276662766727668276692767027671276722767327674276752767627677276782767927680276812768227683276842768527686276872768827689276902769127692276932769427695276962769727698276992770027701277022770327704277052770627707277082770927710277112771227713277142771527716277172771827719277202772127722277232772427725277262772727728277292773027731277322773327734277352773627737277382773927740277412774227743277442774527746277472774827749277502775127752277532775427755277562775727758277592776027761277622776327764277652776627767277682776927770277712777227773277742777527776277772777827779277802778127782277832778427785277862778727788277892779027791277922779327794277952779627797277982779927800278012780227803278042780527806278072780827809278102781127812278132781427815278162781727818278192782027821278222782327824278252782627827278282782927830278312783227833278342783527836278372783827839278402784127842278432784427845278462784727848278492785027851278522785327854278552785627857278582785927860278612786227863278642786527866278672786827869278702787127872278732787427875278762787727878278792788027881278822788327884278852788627887278882788927890278912789227893278942789527896278972789827899279002790127902279032790427905279062790727908279092791027911279122791327914279152791627917279182791927920279212792227923279242792527926279272792827929279302793127932279332793427935279362793727938279392794027941279422794327944279452794627947279482794927950279512795227953279542795527956279572795827959279602796127962279632796427965279662796727968279692797027971279722797327974279752797627977279782797927980279812798227983279842798527986279872798827989279902799127992279932799427995279962799727998279992800028001280022800328004280052800628007280082800928010280112801228013280142801528016280172801828019280202802128022280232802428025280262802728028280292803028031280322803328034280352803628037280382803928040280412804228043280442804528046280472804828049280502805128052280532805428055280562805728058280592806028061280622806328064280652806628067280682806928070280712807228073280742807528076280772807828079280802808128082280832808428085280862808728088280892809028091280922809328094280952809628097280982809928100281012810228103281042810528106281072810828109281102811128112281132811428115281162811728118281192812028121281222812328124281252812628127281282812928130281312813228133281342813528136281372813828139281402814128142281432814428145281462814728148281492815028151281522815328154281552815628157281582815928160281612816228163281642816528166281672816828169281702817128172281732817428175281762817728178281792818028181281822818328184281852818628187281882818928190281912819228193281942819528196281972819828199282002820128202282032820428205282062820728208282092821028211282122821328214282152821628217282182821928220282212822228223282242822528226282272822828229282302823128232282332823428235282362823728238282392824028241282422824328244282452824628247282482824928250282512825228253282542825528256282572825828259282602826128262282632826428265282662826728268282692827028271282722827328274282752827628277282782827928280282812828228283282842828528286282872828828289282902829128292282932829428295282962829728298282992830028301283022830328304283052830628307283082830928310283112831228313283142831528316283172831828319283202832128322283232832428325283262832728328283292833028331283322833328334283352833628337283382833928340283412834228343283442834528346283472834828349283502835128352283532835428355283562835728358283592836028361283622836328364283652836628367283682836928370283712837228373283742837528376283772837828379283802838128382283832838428385283862838728388283892839028391283922839328394283952839628397283982839928400284012840228403284042840528406284072840828409284102841128412284132841428415284162841728418284192842028421284222842328424284252842628427284282842928430284312843228433284342843528436284372843828439284402844128442284432844428445284462844728448284492845028451284522845328454284552845628457284582845928460284612846228463284642846528466284672846828469284702847128472284732847428475284762847728478284792848028481284822848328484284852848628487284882848928490284912849228493284942849528496284972849828499285002850128502285032850428505285062850728508285092851028511285122851328514285152851628517285182851928520285212852228523285242852528526285272852828529285302853128532285332853428535285362853728538285392854028541285422854328544285452854628547285482854928550285512855228553285542855528556285572855828559285602856128562285632856428565285662856728568285692857028571285722857328574285752857628577285782857928580285812858228583285842858528586285872858828589285902859128592285932859428595285962859728598285992860028601286022860328604286052860628607286082860928610286112861228613286142861528616286172861828619286202862128622286232862428625286262862728628286292863028631286322863328634286352863628637286382863928640286412864228643286442864528646286472864828649286502865128652286532865428655286562865728658286592866028661286622866328664286652866628667286682866928670286712867228673286742867528676286772867828679286802868128682286832868428685286862868728688286892869028691286922869328694286952869628697286982869928700287012870228703287042870528706287072870828709287102871128712287132871428715287162871728718287192872028721287222872328724287252872628727287282872928730287312873228733287342873528736287372873828739287402874128742287432874428745287462874728748287492875028751287522875328754287552875628757287582875928760287612876228763287642876528766287672876828769287702877128772287732877428775287762877728778287792878028781287822878328784287852878628787287882878928790287912879228793287942879528796287972879828799288002880128802288032880428805288062880728808288092881028811288122881328814288152881628817288182881928820288212882228823288242882528826288272882828829288302883128832288332883428835288362883728838288392884028841288422884328844288452884628847288482884928850288512885228853288542885528856288572885828859288602886128862288632886428865288662886728868288692887028871288722887328874288752887628877288782887928880288812888228883288842888528886288872888828889288902889128892288932889428895288962889728898288992890028901289022890328904289052890628907289082890928910289112891228913289142891528916289172891828919289202892128922289232892428925289262892728928289292893028931289322893328934289352893628937289382893928940289412894228943289442894528946289472894828949289502895128952289532895428955289562895728958289592896028961289622896328964289652896628967289682896928970289712897228973289742897528976289772897828979289802898128982289832898428985289862898728988289892899028991289922899328994289952899628997289982899929000290012900229003290042900529006290072900829009290102901129012290132901429015290162901729018290192902029021290222902329024290252902629027290282902929030290312903229033290342903529036290372903829039290402904129042290432904429045290462904729048290492905029051290522905329054290552905629057290582905929060290612906229063290642906529066290672906829069290702907129072290732907429075290762907729078290792908029081290822908329084290852908629087290882908929090290912909229093290942909529096290972909829099291002910129102291032910429105291062910729108291092911029111291122911329114291152911629117291182911929120291212912229123291242912529126291272912829129291302913129132291332913429135291362913729138291392914029141291422914329144291452914629147291482914929150291512915229153291542915529156291572915829159291602916129162291632916429165291662916729168291692917029171291722917329174291752917629177291782917929180291812918229183291842918529186291872918829189291902919129192291932919429195291962919729198291992920029201292022920329204292052920629207292082920929210292112921229213292142921529216292172921829219292202922129222292232922429225292262922729228292292923029231292322923329234292352923629237292382923929240292412924229243292442924529246292472924829249292502925129252292532925429255292562925729258292592926029261292622926329264292652926629267292682926929270292712927229273292742927529276292772927829279292802928129282292832928429285292862928729288292892929029291292922929329294292952929629297292982929929300293012930229303293042930529306293072930829309293102931129312293132931429315293162931729318293192932029321293222932329324293252932629327293282932929330293312933229333293342933529336293372933829339293402934129342293432934429345293462934729348293492935029351293522935329354293552935629357293582935929360293612936229363293642936529366293672936829369293702937129372293732937429375293762937729378293792938029381293822938329384293852938629387293882938929390293912939229393293942939529396293972939829399294002940129402294032940429405294062940729408294092941029411294122941329414294152941629417294182941929420294212942229423294242942529426294272942829429294302943129432294332943429435294362943729438294392944029441294422944329444294452944629447294482944929450294512945229453294542945529456294572945829459294602946129462294632946429465294662946729468294692947029471294722947329474294752947629477294782947929480294812948229483294842948529486294872948829489294902949129492294932949429495294962949729498294992950029501295022950329504295052950629507295082950929510295112951229513295142951529516295172951829519295202952129522295232952429525295262952729528295292953029531295322953329534295352953629537295382953929540295412954229543295442954529546295472954829549295502955129552295532955429555295562955729558295592956029561295622956329564295652956629567295682956929570295712957229573295742957529576295772957829579295802958129582295832958429585295862958729588295892959029591295922959329594295952959629597295982959929600296012960229603296042960529606296072960829609296102961129612296132961429615296162961729618296192962029621296222962329624296252962629627296282962929630296312963229633296342963529636296372963829639296402964129642296432964429645296462964729648296492965029651296522965329654296552965629657296582965929660296612966229663296642966529666296672966829669296702967129672296732967429675296762967729678296792968029681296822968329684296852968629687296882968929690296912969229693296942969529696296972969829699297002970129702297032970429705297062970729708297092971029711297122971329714297152971629717297182971929720297212972229723297242972529726297272972829729297302973129732297332973429735297362973729738297392974029741297422974329744297452974629747297482974929750297512975229753297542975529756297572975829759297602976129762297632976429765297662976729768297692977029771297722977329774297752977629777297782977929780297812978229783297842978529786297872978829789297902979129792297932979429795297962979729798297992980029801298022980329804298052980629807298082980929810298112981229813298142981529816298172981829819298202982129822298232982429825298262982729828298292983029831298322983329834298352983629837298382983929840298412984229843298442984529846298472984829849298502985129852298532985429855298562985729858298592986029861298622986329864298652986629867298682986929870298712987229873298742987529876298772987829879298802988129882298832988429885298862988729888298892989029891298922989329894298952989629897298982989929900299012990229903299042990529906299072990829909299102991129912299132991429915299162991729918299192992029921299222992329924299252992629927299282992929930299312993229933299342993529936299372993829939299402994129942299432994429945299462994729948299492995029951299522995329954299552995629957299582995929960299612996229963299642996529966299672996829969299702997129972299732997429975299762997729978299792998029981299822998329984299852998629987299882998929990299912999229993299942999529996299972999829999300003000130002300033000430005300063000730008300093001030011300123001330014300153001630017300183001930020300213002230023300243002530026300273002830029300303003130032300333003430035300363003730038300393004030041300423004330044300453004630047300483004930050300513005230053300543005530056300573005830059300603006130062300633006430065300663006730068300693007030071300723007330074300753007630077300783007930080300813008230083300843008530086300873008830089300903009130092300933009430095300963009730098300993010030101301023010330104301053010630107301083010930110301113011230113301143011530116301173011830119301203012130122301233012430125301263012730128301293013030131301323013330134301353013630137301383013930140301413014230143301443014530146301473014830149301503015130152301533015430155301563015730158301593016030161301623016330164301653016630167301683016930170301713017230173301743017530176301773017830179301803018130182301833018430185301863018730188301893019030191301923019330194301953019630197301983019930200302013020230203302043020530206302073020830209302103021130212302133021430215302163021730218302193022030221302223022330224302253022630227302283022930230302313023230233302343023530236302373023830239302403024130242302433024430245302463024730248302493025030251302523025330254302553025630257302583025930260302613026230263302643026530266302673026830269302703027130272302733027430275302763027730278302793028030281302823028330284302853028630287302883028930290302913029230293302943029530296302973029830299303003030130302303033030430305303063030730308303093031030311303123031330314303153031630317303183031930320303213032230323303243032530326303273032830329303303033130332303333033430335303363033730338303393034030341303423034330344303453034630347303483034930350303513035230353303543035530356303573035830359303603036130362303633036430365303663036730368303693037030371303723037330374303753037630377303783037930380303813038230383303843038530386303873038830389303903039130392303933039430395303963039730398303993040030401304023040330404304053040630407 |
- (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'
- 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('')
- }
- },{}],2:[function(require,module,exports){
- },{}],3:[function(require,module,exports){
- (function (Buffer){(function (){
- /*!
- * The buffer module from node.js, for the browser.
- *
- * @author Feross Aboukhadijeh <https://feross.org>
- * @license MIT
- */
- /* eslint-disable no-proto */
- 'use strict'
- 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 () { return 42 } }
- return arr.foo() === 42
- } catch (e) {
- return false
- }
- }
- Object.defineProperty(Buffer.prototype, 'parent', {
- enumerable: true,
- get: function () {
- if (!Buffer.isBuffer(this)) return undefined
- return this.buffer
- }
- })
- Object.defineProperty(Buffer.prototype, 'offset', {
- enumerable: true,
- get: function () {
- 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)}).call(this,require("buffer").Buffer)
- },{"base64-js":1,"buffer":3,"ieee754":7}],4:[function(require,module,exports){
- module.exports = {
- "100": "Continue",
- "101": "Switching Protocols",
- "102": "Processing",
- "200": "OK",
- "201": "Created",
- "202": "Accepted",
- "203": "Non-Authoritative Information",
- "204": "No Content",
- "205": "Reset Content",
- "206": "Partial Content",
- "207": "Multi-Status",
- "208": "Already Reported",
- "226": "IM Used",
- "300": "Multiple Choices",
- "301": "Moved Permanently",
- "302": "Found",
- "303": "See Other",
- "304": "Not Modified",
- "305": "Use Proxy",
- "307": "Temporary Redirect",
- "308": "Permanent Redirect",
- "400": "Bad Request",
- "401": "Unauthorized",
- "402": "Payment Required",
- "403": "Forbidden",
- "404": "Not Found",
- "405": "Method Not Allowed",
- "406": "Not Acceptable",
- "407": "Proxy Authentication Required",
- "408": "Request Timeout",
- "409": "Conflict",
- "410": "Gone",
- "411": "Length Required",
- "412": "Precondition Failed",
- "413": "Payload Too Large",
- "414": "URI Too Long",
- "415": "Unsupported Media Type",
- "416": "Range Not Satisfiable",
- "417": "Expectation Failed",
- "418": "I'm a teapot",
- "421": "Misdirected Request",
- "422": "Unprocessable Entity",
- "423": "Locked",
- "424": "Failed Dependency",
- "425": "Unordered Collection",
- "426": "Upgrade Required",
- "428": "Precondition Required",
- "429": "Too Many Requests",
- "431": "Request Header Fields Too Large",
- "451": "Unavailable For Legal Reasons",
- "500": "Internal Server Error",
- "501": "Not Implemented",
- "502": "Bad Gateway",
- "503": "Service Unavailable",
- "504": "Gateway Timeout",
- "505": "HTTP Version Not Supported",
- "506": "Variant Also Negotiates",
- "507": "Insufficient Storage",
- "508": "Loop Detected",
- "509": "Bandwidth Limit Exceeded",
- "510": "Not Extended",
- "511": "Network Authentication Required"
- }
- },{}],5:[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.
- 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() {
- return defaultMaxListeners;
- },
- set: function(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 === '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.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);
- };
- }
- },{}],6:[function(require,module,exports){
- var http = require('http')
- var url = require('url')
- var https = module.exports
- for (var key in http) {
- if (http.hasOwnProperty(key)) https[key] = http[key]
- }
- https.request = function (params, cb) {
- params = validateParams(params)
- return http.request.call(this, params, cb)
- }
- https.get = function (params, cb) {
- params = validateParams(params)
- return http.get.call(this, params, cb)
- }
- function validateParams (params) {
- if (typeof params === 'string') {
- params = url.parse(params)
- }
- if (!params.protocol) {
- params.protocol = 'https:'
- }
- if (params.protocol !== 'https:') {
- throw new Error('Protocol "' + params.protocol + '" not supported. Expected "https:"')
- }
- return params
- }
- },{"http":17,"url":37}],7:[function(require,module,exports){
- /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
- 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
- }
- },{}],8:[function(require,module,exports){
- 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.prototype = superCtor.prototype
- ctor.prototype = new TempCtor()
- ctor.prototype.constructor = ctor
- }
- }
- }
- },{}],9:[function(require,module,exports){
- (function (global){(function (){
- /**
- * 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 `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 as references for various `Number` constants. */
- var INFINITY = 1 / 0;
- /** `Object#toString` result references. */
- var funcTag = '[object Function]',
- genTag = '[object GeneratorFunction]',
- symbolTag = '[object Symbol]';
- /** 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\]$/;
- /** Detect free variable `global` from Node.js. */
- var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
- /** Detect free variable `self`. */
- var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
- /** Used as a reference to the global object. */
- var root = freeGlobal || freeSelf || Function('return this')();
- /**
- * 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;
- }
- /** 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,
- splice = arrayProto.splice;
- /* Built-in method references that are verified to be native. */
- var Map = getNative(root, 'Map'),
- nativeCreate = getNative(Object, 'create');
- /** Used to convert symbols to primitives and strings. */
- var symbolProto = Symbol ? Symbol.prototype : 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;
- /**
- * 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 `_.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 `_.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 `_.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);
- }
- /**
- * 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 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);
- }
- /**
- * 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 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() {
- 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 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 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');
- }
- /**
- * 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);
- }
- /**
- * 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;
- }
- module.exports = get;
- }).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{}],10:[function(require,module,exports){
- (function (global){(function (){
- /**
- * 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 == 'object' && global && global.Object === Object && global;
- /** Detect free variable `self`. */
- var freeSelf = 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 == 'object' && exports && !exports.nodeType && exports;
- /** Detect free variable `module`. */
- var freeModule = freeExports && 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(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)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{}],11:[function(require,module,exports){
- // 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; };
- },{}],12:[function(require,module,exports){
- (function (global){(function (){
- /*! https://mths.be/punycode v1.4.1 by @mathias */
- ;(function(root) {
- /** Detect free variables */
- var freeExports = typeof exports == 'object' && exports &&
- !exports.nodeType && exports;
- var freeModule = typeof module == 'object' && module &&
- !module.nodeType && module;
- var freeGlobal = typeof global == 'object' && global;
- if (
- freeGlobal.global === freeGlobal ||
- freeGlobal.window === freeGlobal ||
- freeGlobal.self === freeGlobal
- ) {
- root = freeGlobal;
- }
- /**
- * The `punycode` object.
- * @name punycode
- * @type Object
- */
- var punycode,
- /** Highest positive signed 32-bit float value */
- maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
- /** Bootstring parameters */
- base = 36,
- tMin = 1,
- tMax = 26,
- skew = 38,
- damp = 700,
- initialBias = 72,
- initialN = 128, // 0x80
- delimiter = '-', // '\x2D'
- /** Regular expressions */
- regexPunycode = /^xn--/,
- regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
- regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
- /** Error messages */
- errors = {
- 'overflow': 'Overflow: input needs wider integers to process',
- 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
- 'invalid-input': 'Invalid input'
- },
- /** Convenience shortcuts */
- baseMinusTMin = base - tMin,
- floor = Math.floor,
- stringFromCharCode = String.fromCharCode,
- /** Temporary variable */
- key;
- /*--------------------------------------------------------------------------*/
- /**
- * A generic error utility function.
- * @private
- * @param {String} type The error type.
- * @returns {Error} Throws a `RangeError` with the applicable error message.
- */
- function error(type) {
- throw new RangeError(errors[type]);
- }
- /**
- * A generic `Array#map` utility function.
- * @private
- * @param {Array} array The array to iterate over.
- * @param {Function} callback The function that gets called for every array
- * item.
- * @returns {Array} A new array of values returned by the callback function.
- */
- function map(array, fn) {
- var length = array.length;
- var result = [];
- while (length--) {
- result[length] = fn(array[length]);
- }
- return result;
- }
- /**
- * A simple `Array#map`-like wrapper to work with domain name strings or email
- * addresses.
- * @private
- * @param {String} domain The domain name or email address.
- * @param {Function} callback The function that gets called for every
- * character.
- * @returns {Array} A new string of characters returned by the callback
- * function.
- */
- function mapDomain(string, fn) {
- var parts = string.split('@');
- var result = '';
- if (parts.length > 1) {
- // In email addresses, only the domain name should be punycoded. Leave
- // the local part (i.e. everything up to `@`) intact.
- result = parts[0] + '@';
- string = parts[1];
- }
- // Avoid `split(regex)` for IE8 compatibility. See #17.
- string = string.replace(regexSeparators, '\x2E');
- var labels = string.split('.');
- var encoded = map(labels, fn).join('.');
- return result + encoded;
- }
- /**
- * Creates an array containing the numeric code points of each Unicode
- * character in the string. While JavaScript uses UCS-2 internally,
- * this function will convert a pair of surrogate halves (each of which
- * UCS-2 exposes as separate characters) into a single code point,
- * matching UTF-16.
- * @see `punycode.ucs2.encode`
- * @see <https://mathiasbynens.be/notes/javascript-encoding>
- * @memberOf punycode.ucs2
- * @name decode
- * @param {String} string The Unicode input string (UCS-2).
- * @returns {Array} The new array of code points.
- */
- function ucs2decode(string) {
- var output = [],
- counter = 0,
- length = string.length,
- value,
- extra;
- while (counter < length) {
- value = string.charCodeAt(counter++);
- if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
- // high surrogate, and there is a next character
- extra = string.charCodeAt(counter++);
- if ((extra & 0xFC00) == 0xDC00) { // low surrogate
- output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
- } else {
- // unmatched surrogate; only append this code unit, in case the next
- // code unit is the high surrogate of a surrogate pair
- output.push(value);
- counter--;
- }
- } else {
- output.push(value);
- }
- }
- return output;
- }
- /**
- * Creates a string based on an array of numeric code points.
- * @see `punycode.ucs2.decode`
- * @memberOf punycode.ucs2
- * @name encode
- * @param {Array} codePoints The array of numeric code points.
- * @returns {String} The new Unicode string (UCS-2).
- */
- function ucs2encode(array) {
- return map(array, function(value) {
- var output = '';
- if (value > 0xFFFF) {
- value -= 0x10000;
- output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
- value = 0xDC00 | value & 0x3FF;
- }
- output += stringFromCharCode(value);
- return output;
- }).join('');
- }
- /**
- * Converts a basic code point into a digit/integer.
- * @see `digitToBasic()`
- * @private
- * @param {Number} codePoint The basic numeric code point value.
- * @returns {Number} The numeric value of a basic code point (for use in
- * representing integers) in the range `0` to `base - 1`, or `base` if
- * the code point does not represent a value.
- */
- function basicToDigit(codePoint) {
- if (codePoint - 48 < 10) {
- return codePoint - 22;
- }
- if (codePoint - 65 < 26) {
- return codePoint - 65;
- }
- if (codePoint - 97 < 26) {
- return codePoint - 97;
- }
- return base;
- }
- /**
- * Converts a digit/integer into a basic code point.
- * @see `basicToDigit()`
- * @private
- * @param {Number} digit The numeric value of a basic code point.
- * @returns {Number} The basic code point whose value (when used for
- * representing integers) is `digit`, which needs to be in the range
- * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
- * used; else, the lowercase form is used. The behavior is undefined
- * if `flag` is non-zero and `digit` has no uppercase form.
- */
- function digitToBasic(digit, flag) {
- // 0..25 map to ASCII a..z or A..Z
- // 26..35 map to ASCII 0..9
- return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
- }
- /**
- * Bias adaptation function as per section 3.4 of RFC 3492.
- * https://tools.ietf.org/html/rfc3492#section-3.4
- * @private
- */
- function adapt(delta, numPoints, firstTime) {
- var k = 0;
- delta = firstTime ? floor(delta / damp) : delta >> 1;
- delta += floor(delta / numPoints);
- for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
- delta = floor(delta / baseMinusTMin);
- }
- return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
- }
- /**
- * Converts a Punycode string of ASCII-only symbols to a string of Unicode
- * symbols.
- * @memberOf punycode
- * @param {String} input The Punycode string of ASCII-only symbols.
- * @returns {String} The resulting string of Unicode symbols.
- */
- function decode(input) {
- // Don't use UCS-2
- var output = [],
- inputLength = input.length,
- out,
- i = 0,
- n = initialN,
- bias = initialBias,
- basic,
- j,
- index,
- oldi,
- w,
- k,
- digit,
- t,
- /** Cached calculation results */
- baseMinusT;
- // Handle the basic code points: let `basic` be the number of input code
- // points before the last delimiter, or `0` if there is none, then copy
- // the first basic code points to the output.
- basic = input.lastIndexOf(delimiter);
- if (basic < 0) {
- basic = 0;
- }
- for (j = 0; j < basic; ++j) {
- // if it's not a basic code point
- if (input.charCodeAt(j) >= 0x80) {
- error('not-basic');
- }
- output.push(input.charCodeAt(j));
- }
- // Main decoding loop: start just after the last delimiter if any basic code
- // points were copied; start at the beginning otherwise.
- for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
- // `index` is the index of the next character to be consumed.
- // Decode a generalized variable-length integer into `delta`,
- // which gets added to `i`. The overflow checking is easier
- // if we increase `i` as we go, then subtract off its starting
- // value at the end to obtain `delta`.
- for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
- if (index >= inputLength) {
- error('invalid-input');
- }
- digit = basicToDigit(input.charCodeAt(index++));
- if (digit >= base || digit > floor((maxInt - i) / w)) {
- error('overflow');
- }
- i += digit * w;
- t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
- if (digit < t) {
- break;
- }
- baseMinusT = base - t;
- if (w > floor(maxInt / baseMinusT)) {
- error('overflow');
- }
- w *= baseMinusT;
- }
- out = output.length + 1;
- bias = adapt(i - oldi, out, oldi == 0);
- // `i` was supposed to wrap around from `out` to `0`,
- // incrementing `n` each time, so we'll fix that now:
- if (floor(i / out) > maxInt - n) {
- error('overflow');
- }
- n += floor(i / out);
- i %= out;
- // Insert `n` at position `i` of the output
- output.splice(i++, 0, n);
- }
- return ucs2encode(output);
- }
- /**
- * Converts a string of Unicode symbols (e.g. a domain name label) to a
- * Punycode string of ASCII-only symbols.
- * @memberOf punycode
- * @param {String} input The string of Unicode symbols.
- * @returns {String} The resulting Punycode string of ASCII-only symbols.
- */
- function encode(input) {
- var n,
- delta,
- handledCPCount,
- basicLength,
- bias,
- j,
- m,
- q,
- k,
- t,
- currentValue,
- output = [],
- /** `inputLength` will hold the number of code points in `input`. */
- inputLength,
- /** Cached calculation results */
- handledCPCountPlusOne,
- baseMinusT,
- qMinusT;
- // Convert the input in UCS-2 to Unicode
- input = ucs2decode(input);
- // Cache the length
- inputLength = input.length;
- // Initialize the state
- n = initialN;
- delta = 0;
- bias = initialBias;
- // Handle the basic code points
- for (j = 0; j < inputLength; ++j) {
- currentValue = input[j];
- if (currentValue < 0x80) {
- output.push(stringFromCharCode(currentValue));
- }
- }
- handledCPCount = basicLength = output.length;
- // `handledCPCount` is the number of code points that have been handled;
- // `basicLength` is the number of basic code points.
- // Finish the basic string - if it is not empty - with a delimiter
- if (basicLength) {
- output.push(delimiter);
- }
- // Main encoding loop:
- while (handledCPCount < inputLength) {
- // All non-basic code points < n have been handled already. Find the next
- // larger one:
- for (m = maxInt, j = 0; j < inputLength; ++j) {
- currentValue = input[j];
- if (currentValue >= n && currentValue < m) {
- m = currentValue;
- }
- }
- // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
- // but guard against overflow
- handledCPCountPlusOne = handledCPCount + 1;
- if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
- error('overflow');
- }
- delta += (m - n) * handledCPCountPlusOne;
- n = m;
- for (j = 0; j < inputLength; ++j) {
- currentValue = input[j];
- if (currentValue < n && ++delta > maxInt) {
- error('overflow');
- }
- if (currentValue == n) {
- // Represent delta as a generalized variable-length integer
- for (q = delta, k = base; /* no condition */; k += base) {
- t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
- if (q < t) {
- break;
- }
- qMinusT = q - t;
- baseMinusT = base - t;
- output.push(
- stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
- );
- q = floor(qMinusT / baseMinusT);
- }
- output.push(stringFromCharCode(digitToBasic(q, 0)));
- bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
- delta = 0;
- ++handledCPCount;
- }
- }
- ++delta;
- ++n;
- }
- return output.join('');
- }
- /**
- * Converts a Punycode string representing a domain name or an email address
- * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
- * it doesn't matter if you call it on a string that has already been
- * converted to Unicode.
- * @memberOf punycode
- * @param {String} input The Punycoded domain name or email address to
- * convert to Unicode.
- * @returns {String} The Unicode representation of the given Punycode
- * string.
- */
- function toUnicode(input) {
- return mapDomain(input, function(string) {
- return regexPunycode.test(string)
- ? decode(string.slice(4).toLowerCase())
- : string;
- });
- }
- /**
- * Converts a Unicode string representing a domain name or an email address to
- * Punycode. Only the non-ASCII parts of the domain name will be converted,
- * i.e. it doesn't matter if you call it with a domain that's already in
- * ASCII.
- * @memberOf punycode
- * @param {String} input The domain name or email address to convert, as a
- * Unicode string.
- * @returns {String} The Punycode representation of the given domain name or
- * email address.
- */
- function toASCII(input) {
- return mapDomain(input, function(string) {
- return regexNonASCII.test(string)
- ? 'xn--' + encode(string)
- : string;
- });
- }
- /*--------------------------------------------------------------------------*/
- /** Define the public API */
- punycode = {
- /**
- * A string representing the current Punycode.js version number.
- * @memberOf punycode
- * @type String
- */
- 'version': '1.4.1',
- /**
- * An object of methods to convert from JavaScript's internal character
- * representation (UCS-2) to Unicode code points, and back.
- * @see <https://mathiasbynens.be/notes/javascript-encoding>
- * @memberOf punycode
- * @type Object
- */
- 'ucs2': {
- 'decode': ucs2decode,
- 'encode': ucs2encode
- },
- 'decode': decode,
- 'encode': encode,
- 'toASCII': toASCII,
- 'toUnicode': toUnicode
- };
- /** Expose `punycode` */
- // Some AMD build optimizers, like r.js, check for specific condition patterns
- // like the following:
- if (
- typeof define == 'function' &&
- typeof define.amd == 'object' &&
- define.amd
- ) {
- define('punycode', function() {
- return punycode;
- });
- } else if (freeExports && freeModule) {
- if (module.exports == freeExports) {
- // in Node.js, io.js, or RingoJS v0.8.0+
- freeModule.exports = punycode;
- } else {
- // in Narwhal or RingoJS v0.7.0-
- for (key in punycode) {
- punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
- }
- }
- } else {
- // in Rhino or a web browser
- root.punycode = punycode;
- }
- }(this));
- }).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{}],13:[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';
- // If obj.hasOwnProperty has been overridden, then calling
- // obj.hasOwnProperty(prop) will break.
- // See: https://github.com/joyent/node/issues/1707
- function hasOwnProperty(obj, prop) {
- return Object.prototype.hasOwnProperty.call(obj, prop);
- }
- module.exports = function(qs, sep, eq, options) {
- sep = sep || '&';
- eq = eq || '=';
- var obj = {};
- if (typeof qs !== 'string' || qs.length === 0) {
- return obj;
- }
- var regexp = /\+/g;
- qs = qs.split(sep);
- var maxKeys = 1000;
- if (options && typeof options.maxKeys === 'number') {
- maxKeys = options.maxKeys;
- }
- var len = qs.length;
- // maxKeys <= 0 means that we should not limit keys count
- if (maxKeys > 0 && len > maxKeys) {
- len = maxKeys;
- }
- for (var i = 0; i < len; ++i) {
- var x = qs[i].replace(regexp, '%20'),
- idx = x.indexOf(eq),
- kstr, vstr, k, v;
- if (idx >= 0) {
- kstr = x.substr(0, idx);
- vstr = x.substr(idx + 1);
- } else {
- kstr = x;
- vstr = '';
- }
- k = decodeURIComponent(kstr);
- v = decodeURIComponent(vstr);
- if (!hasOwnProperty(obj, k)) {
- obj[k] = v;
- } else if (isArray(obj[k])) {
- obj[k].push(v);
- } else {
- obj[k] = [obj[k], v];
- }
- }
- return obj;
- };
- var isArray = Array.isArray || function (xs) {
- return Object.prototype.toString.call(xs) === '[object Array]';
- };
- },{}],14:[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';
- var stringifyPrimitive = function(v) {
- switch (typeof v) {
- case 'string':
- return v;
- case 'boolean':
- return v ? 'true' : 'false';
- case 'number':
- return isFinite(v) ? v : '';
- default:
- return '';
- }
- };
- module.exports = function(obj, sep, eq, name) {
- sep = sep || '&';
- eq = eq || '=';
- if (obj === null) {
- obj = undefined;
- }
- if (typeof obj === 'object') {
- return map(objectKeys(obj), function(k) {
- var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
- if (isArray(obj[k])) {
- return map(obj[k], function(v) {
- return ks + encodeURIComponent(stringifyPrimitive(v));
- }).join(sep);
- } else {
- return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
- }
- }).join(sep);
- }
- if (!name) return '';
- return encodeURIComponent(stringifyPrimitive(name)) + eq +
- encodeURIComponent(stringifyPrimitive(obj));
- };
- var isArray = Array.isArray || function (xs) {
- return Object.prototype.toString.call(xs) === '[object Array]';
- };
- function map (xs, f) {
- if (xs.map) return xs.map(f);
- var res = [];
- for (var i = 0; i < xs.length; i++) {
- res.push(f(xs[i], i));
- }
- return res;
- }
- var objectKeys = Object.keys || function (obj) {
- var res = [];
- for (var key in obj) {
- if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
- }
- return res;
- };
- },{}],15:[function(require,module,exports){
- 'use strict';
- exports.decode = exports.parse = require('./decode');
- exports.encode = exports.stringify = require('./encode');
- },{"./decode":13,"./encode":14}],16:[function(require,module,exports){
- /*! 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":3}],17:[function(require,module,exports){
- (function (global){(function (){
- var ClientRequest = require('./lib/request')
- var response = require('./lib/response')
- var extend = require('xtend')
- var statusCodes = require('builtin-status-codes')
- var url = require('url')
- var http = exports
- http.request = function (opts, cb) {
- if (typeof opts === 'string')
- opts = url.parse(opts)
- else
- opts = extend(opts)
- // Normally, the page is loaded from http or https, so not specifying a protocol
- // will result in a (valid) protocol-relative url. However, this won't work if
- // the protocol is something else, like 'file:'
- var defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : ''
- var protocol = opts.protocol || defaultProtocol
- var host = opts.hostname || opts.host
- var port = opts.port
- var path = opts.path || '/'
- // Necessary for IPv6 addresses
- if (host && host.indexOf(':') !== -1)
- host = '[' + host + ']'
- // This may be a relative url. The browser should always be able to interpret it correctly.
- opts.url = (host ? (protocol + '//' + host) : '') + (port ? ':' + port : '') + path
- opts.method = (opts.method || 'GET').toUpperCase()
- opts.headers = opts.headers || {}
- // Also valid opts.auth, opts.mode
- var req = new ClientRequest(opts)
- if (cb)
- req.on('response', cb)
- return req
- }
- http.get = function get (opts, cb) {
- var req = http.request(opts, cb)
- req.end()
- return req
- }
- http.ClientRequest = ClientRequest
- http.IncomingMessage = response.IncomingMessage
- http.Agent = function () {}
- http.Agent.defaultMaxSockets = 4
- http.globalAgent = new http.Agent()
- http.STATUS_CODES = statusCodes
- http.METHODS = [
- 'CHECKOUT',
- 'CONNECT',
- 'COPY',
- 'DELETE',
- 'GET',
- 'HEAD',
- 'LOCK',
- 'M-SEARCH',
- 'MERGE',
- 'MKACTIVITY',
- 'MKCOL',
- 'MOVE',
- 'NOTIFY',
- 'OPTIONS',
- 'PATCH',
- 'POST',
- 'PROPFIND',
- 'PROPPATCH',
- 'PURGE',
- 'PUT',
- 'REPORT',
- 'SEARCH',
- 'SUBSCRIBE',
- 'TRACE',
- 'UNLOCK',
- 'UNSUBSCRIBE'
- ]
- }).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{"./lib/request":19,"./lib/response":20,"builtin-status-codes":4,"url":37,"xtend":141}],18:[function(require,module,exports){
- (function (global){(function (){
- exports.fetch = isFunction(global.fetch) && isFunction(global.ReadableStream)
- exports.writableStream = isFunction(global.WritableStream)
- exports.abortController = isFunction(global.AbortController)
- // The xhr request to example.com may violate some restrictive CSP configurations,
- // so if we're running in a browser that supports `fetch`, avoid calling getXHR()
- // and assume support for certain features below.
- var xhr
- function getXHR () {
- // Cache the xhr value
- if (xhr !== undefined) return xhr
- if (global.XMLHttpRequest) {
- xhr = new global.XMLHttpRequest()
- // If XDomainRequest is available (ie only, where xhr might not work
- // cross domain), use the page location. Otherwise use example.com
- // Note: this doesn't actually make an http request.
- try {
- xhr.open('GET', global.XDomainRequest ? '/' : 'https://example.com')
- } catch(e) {
- xhr = null
- }
- } else {
- // Service workers don't have XHR
- xhr = null
- }
- return xhr
- }
- function checkTypeSupport (type) {
- var xhr = getXHR()
- if (!xhr) return false
- try {
- xhr.responseType = type
- return xhr.responseType === type
- } catch (e) {}
- return false
- }
- // If fetch is supported, then arraybuffer will be supported too. Skip calling
- // checkTypeSupport(), since that calls getXHR().
- exports.arraybuffer = exports.fetch || checkTypeSupport('arraybuffer')
- // These next two tests unavoidably show warnings in Chrome. Since fetch will always
- // be used if it's available, just return false for these to avoid the warnings.
- exports.msstream = !exports.fetch && checkTypeSupport('ms-stream')
- exports.mozchunkedarraybuffer = !exports.fetch && checkTypeSupport('moz-chunked-arraybuffer')
- // If fetch is supported, then overrideMimeType will be supported too. Skip calling
- // getXHR().
- exports.overrideMimeType = exports.fetch || (getXHR() ? isFunction(getXHR().overrideMimeType) : false)
- function isFunction (value) {
- return typeof value === 'function'
- }
- xhr = null // Help gc
- }).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{}],19:[function(require,module,exports){
- (function (process,global,Buffer){(function (){
- var capability = require('./capability')
- var inherits = require('inherits')
- var response = require('./response')
- var stream = require('readable-stream')
- var IncomingMessage = response.IncomingMessage
- var rStates = response.readyStates
- function decideMode (preferBinary, useFetch) {
- if (capability.fetch && useFetch) {
- return 'fetch'
- } else if (capability.mozchunkedarraybuffer) {
- return 'moz-chunked-arraybuffer'
- } else if (capability.msstream) {
- return 'ms-stream'
- } else if (capability.arraybuffer && preferBinary) {
- return 'arraybuffer'
- } else {
- return 'text'
- }
- }
- var ClientRequest = module.exports = function (opts) {
- var self = this
- stream.Writable.call(self)
- self._opts = opts
- self._body = []
- self._headers = {}
- if (opts.auth)
- self.setHeader('Authorization', 'Basic ' + Buffer.from(opts.auth).toString('base64'))
- Object.keys(opts.headers).forEach(function (name) {
- self.setHeader(name, opts.headers[name])
- })
- var preferBinary
- var useFetch = true
- if (opts.mode === 'disable-fetch' || ('requestTimeout' in opts && !capability.abortController)) {
- // If the use of XHR should be preferred. Not typically needed.
- useFetch = false
- preferBinary = true
- } else if (opts.mode === 'prefer-streaming') {
- // If streaming is a high priority but binary compatibility and
- // the accuracy of the 'content-type' header aren't
- preferBinary = false
- } else if (opts.mode === 'allow-wrong-content-type') {
- // If streaming is more important than preserving the 'content-type' header
- preferBinary = !capability.overrideMimeType
- } else if (!opts.mode || opts.mode === 'default' || opts.mode === 'prefer-fast') {
- // Use binary if text streaming may corrupt data or the content-type header, or for speed
- preferBinary = true
- } else {
- throw new Error('Invalid value for opts.mode')
- }
- self._mode = decideMode(preferBinary, useFetch)
- self._fetchTimer = null
- self._socketTimeout = null
- self._socketTimer = null
- self.on('finish', function () {
- self._onFinish()
- })
- }
- inherits(ClientRequest, stream.Writable)
- ClientRequest.prototype.setHeader = function (name, value) {
- var self = this
- var lowerName = name.toLowerCase()
- // This check is not necessary, but it prevents warnings from browsers about setting unsafe
- // headers. To be honest I'm not entirely sure hiding these warnings is a good thing, but
- // http-browserify did it, so I will too.
- if (unsafeHeaders.indexOf(lowerName) !== -1)
- return
- self._headers[lowerName] = {
- name: name,
- value: value
- }
- }
- ClientRequest.prototype.getHeader = function (name) {
- var header = this._headers[name.toLowerCase()]
- if (header)
- return header.value
- return null
- }
- ClientRequest.prototype.removeHeader = function (name) {
- var self = this
- delete self._headers[name.toLowerCase()]
- }
- ClientRequest.prototype._onFinish = function () {
- var self = this
- if (self._destroyed)
- return
- var opts = self._opts
- if ('timeout' in opts && opts.timeout !== 0) {
- self.setTimeout(opts.timeout)
- }
- var headersObj = self._headers
- var body = null
- if (opts.method !== 'GET' && opts.method !== 'HEAD') {
- body = new Blob(self._body, {
- type: (headersObj['content-type'] || {}).value || ''
- });
- }
- // create flattened list of headers
- var headersList = []
- Object.keys(headersObj).forEach(function (keyName) {
- var name = headersObj[keyName].name
- var value = headersObj[keyName].value
- if (Array.isArray(value)) {
- value.forEach(function (v) {
- headersList.push([name, v])
- })
- } else {
- headersList.push([name, value])
- }
- })
- if (self._mode === 'fetch') {
- var signal = null
- if (capability.abortController) {
- var controller = new AbortController()
- signal = controller.signal
- self._fetchAbortController = controller
- if ('requestTimeout' in opts && opts.requestTimeout !== 0) {
- self._fetchTimer = global.setTimeout(function () {
- self.emit('requestTimeout')
- if (self._fetchAbortController)
- self._fetchAbortController.abort()
- }, opts.requestTimeout)
- }
- }
- global.fetch(self._opts.url, {
- method: self._opts.method,
- headers: headersList,
- body: body || undefined,
- mode: 'cors',
- credentials: opts.withCredentials ? 'include' : 'same-origin',
- signal: signal
- }).then(function (response) {
- self._fetchResponse = response
- self._resetTimers(false)
- self._connect()
- }, function (reason) {
- self._resetTimers(true)
- if (!self._destroyed)
- self.emit('error', reason)
- })
- } else {
- var xhr = self._xhr = new global.XMLHttpRequest()
- try {
- xhr.open(self._opts.method, self._opts.url, true)
- } catch (err) {
- process.nextTick(function () {
- self.emit('error', err)
- })
- return
- }
- // Can't set responseType on really old browsers
- if ('responseType' in xhr)
- xhr.responseType = self._mode
- if ('withCredentials' in xhr)
- xhr.withCredentials = !!opts.withCredentials
- if (self._mode === 'text' && 'overrideMimeType' in xhr)
- xhr.overrideMimeType('text/plain; charset=x-user-defined')
- if ('requestTimeout' in opts) {
- xhr.timeout = opts.requestTimeout
- xhr.ontimeout = function () {
- self.emit('requestTimeout')
- }
- }
- headersList.forEach(function (header) {
- xhr.setRequestHeader(header[0], header[1])
- })
- self._response = null
- xhr.onreadystatechange = function () {
- switch (xhr.readyState) {
- case rStates.LOADING:
- case rStates.DONE:
- self._onXHRProgress()
- break
- }
- }
- // Necessary for streaming in Firefox, since xhr.response is ONLY defined
- // in onprogress, not in onreadystatechange with xhr.readyState = 3
- if (self._mode === 'moz-chunked-arraybuffer') {
- xhr.onprogress = function () {
- self._onXHRProgress()
- }
- }
- xhr.onerror = function () {
- if (self._destroyed)
- return
- self._resetTimers(true)
- self.emit('error', new Error('XHR error'))
- }
- try {
- xhr.send(body)
- } catch (err) {
- process.nextTick(function () {
- self.emit('error', err)
- })
- return
- }
- }
- }
- /**
- * Checks if xhr.status is readable and non-zero, indicating no error.
- * Even though the spec says it should be available in readyState 3,
- * accessing it throws an exception in IE8
- */
- function statusValid (xhr) {
- try {
- var status = xhr.status
- return (status !== null && status !== 0)
- } catch (e) {
- return false
- }
- }
- ClientRequest.prototype._onXHRProgress = function () {
- var self = this
- self._resetTimers(false)
- if (!statusValid(self._xhr) || self._destroyed)
- return
- if (!self._response)
- self._connect()
- self._response._onXHRProgress(self._resetTimers.bind(self))
- }
- ClientRequest.prototype._connect = function () {
- var self = this
- if (self._destroyed)
- return
- self._response = new IncomingMessage(self._xhr, self._fetchResponse, self._mode, self._resetTimers.bind(self))
- self._response.on('error', function(err) {
- self.emit('error', err)
- })
- self.emit('response', self._response)
- }
- ClientRequest.prototype._write = function (chunk, encoding, cb) {
- var self = this
- self._body.push(chunk)
- cb()
- }
- ClientRequest.prototype._resetTimers = function (done) {
- var self = this
- global.clearTimeout(self._socketTimer)
- self._socketTimer = null
- if (done) {
- global.clearTimeout(self._fetchTimer)
- self._fetchTimer = null
- } else if (self._socketTimeout) {
- self._socketTimer = global.setTimeout(function () {
- self.emit('timeout')
- }, self._socketTimeout)
- }
- }
- ClientRequest.prototype.abort = ClientRequest.prototype.destroy = function (err) {
- var self = this
- self._destroyed = true
- self._resetTimers(true)
- if (self._response)
- self._response._destroyed = true
- if (self._xhr)
- self._xhr.abort()
- else if (self._fetchAbortController)
- self._fetchAbortController.abort()
- if (err)
- self.emit('error', err)
- }
- ClientRequest.prototype.end = function (data, encoding, cb) {
- var self = this
- if (typeof data === 'function') {
- cb = data
- data = undefined
- }
- stream.Writable.prototype.end.call(self, data, encoding, cb)
- }
- ClientRequest.prototype.setTimeout = function (timeout, cb) {
- var self = this
- if (cb)
- self.once('timeout', cb)
- self._socketTimeout = timeout
- self._resetTimers(false)
- }
- ClientRequest.prototype.flushHeaders = function () {}
- ClientRequest.prototype.setNoDelay = function () {}
- ClientRequest.prototype.setSocketKeepAlive = function () {}
- // Taken from http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method
- var unsafeHeaders = [
- 'accept-charset',
- 'accept-encoding',
- 'access-control-request-headers',
- 'access-control-request-method',
- 'connection',
- 'content-length',
- 'cookie',
- 'cookie2',
- 'date',
- 'dnt',
- 'expect',
- 'host',
- 'keep-alive',
- 'origin',
- 'referer',
- 'te',
- 'trailer',
- 'transfer-encoding',
- 'upgrade',
- 'via'
- ]
- }).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
- },{"./capability":18,"./response":20,"_process":11,"buffer":3,"inherits":8,"readable-stream":35}],20:[function(require,module,exports){
- (function (process,global,Buffer){(function (){
- var capability = require('./capability')
- var inherits = require('inherits')
- var stream = require('readable-stream')
- var rStates = exports.readyStates = {
- UNSENT: 0,
- OPENED: 1,
- HEADERS_RECEIVED: 2,
- LOADING: 3,
- DONE: 4
- }
- var IncomingMessage = exports.IncomingMessage = function (xhr, response, mode, resetTimers) {
- var self = this
- stream.Readable.call(self)
- self._mode = mode
- self.headers = {}
- self.rawHeaders = []
- self.trailers = {}
- self.rawTrailers = []
- // Fake the 'close' event, but only once 'end' fires
- self.on('end', function () {
- // The nextTick is necessary to prevent the 'request' module from causing an infinite loop
- process.nextTick(function () {
- self.emit('close')
- })
- })
- if (mode === 'fetch') {
- self._fetchResponse = response
- self.url = response.url
- self.statusCode = response.status
- self.statusMessage = response.statusText
-
- response.headers.forEach(function (header, key){
- self.headers[key.toLowerCase()] = header
- self.rawHeaders.push(key, header)
- })
- if (capability.writableStream) {
- var writable = new WritableStream({
- write: function (chunk) {
- resetTimers(false)
- return new Promise(function (resolve, reject) {
- if (self._destroyed) {
- reject()
- } else if(self.push(Buffer.from(chunk))) {
- resolve()
- } else {
- self._resumeFetch = resolve
- }
- })
- },
- close: function () {
- resetTimers(true)
- if (!self._destroyed)
- self.push(null)
- },
- abort: function (err) {
- resetTimers(true)
- if (!self._destroyed)
- self.emit('error', err)
- }
- })
- try {
- response.body.pipeTo(writable).catch(function (err) {
- resetTimers(true)
- if (!self._destroyed)
- self.emit('error', err)
- })
- return
- } catch (e) {} // pipeTo method isn't defined. Can't find a better way to feature test this
- }
- // fallback for when writableStream or pipeTo aren't available
- var reader = response.body.getReader()
- function read () {
- reader.read().then(function (result) {
- if (self._destroyed)
- return
- resetTimers(result.done)
- if (result.done) {
- self.push(null)
- return
- }
- self.push(Buffer.from(result.value))
- read()
- }).catch(function (err) {
- resetTimers(true)
- if (!self._destroyed)
- self.emit('error', err)
- })
- }
- read()
- } else {
- self._xhr = xhr
- self._pos = 0
- self.url = xhr.responseURL
- self.statusCode = xhr.status
- self.statusMessage = xhr.statusText
- var headers = xhr.getAllResponseHeaders().split(/\r?\n/)
- headers.forEach(function (header) {
- var matches = header.match(/^([^:]+):\s*(.*)/)
- if (matches) {
- var key = matches[1].toLowerCase()
- if (key === 'set-cookie') {
- if (self.headers[key] === undefined) {
- self.headers[key] = []
- }
- self.headers[key].push(matches[2])
- } else if (self.headers[key] !== undefined) {
- self.headers[key] += ', ' + matches[2]
- } else {
- self.headers[key] = matches[2]
- }
- self.rawHeaders.push(matches[1], matches[2])
- }
- })
- self._charset = 'x-user-defined'
- if (!capability.overrideMimeType) {
- var mimeType = self.rawHeaders['mime-type']
- if (mimeType) {
- var charsetMatch = mimeType.match(/;\s*charset=([^;])(;|$)/)
- if (charsetMatch) {
- self._charset = charsetMatch[1].toLowerCase()
- }
- }
- if (!self._charset)
- self._charset = 'utf-8' // best guess
- }
- }
- }
- inherits(IncomingMessage, stream.Readable)
- IncomingMessage.prototype._read = function () {
- var self = this
- var resolve = self._resumeFetch
- if (resolve) {
- self._resumeFetch = null
- resolve()
- }
- }
- IncomingMessage.prototype._onXHRProgress = function (resetTimers) {
- var self = this
- var xhr = self._xhr
- var response = null
- switch (self._mode) {
- case 'text':
- response = xhr.responseText
- if (response.length > self._pos) {
- var newData = response.substr(self._pos)
- if (self._charset === 'x-user-defined') {
- var buffer = Buffer.alloc(newData.length)
- for (var i = 0; i < newData.length; i++)
- buffer[i] = newData.charCodeAt(i) & 0xff
- self.push(buffer)
- } else {
- self.push(newData, self._charset)
- }
- self._pos = response.length
- }
- break
- case 'arraybuffer':
- if (xhr.readyState !== rStates.DONE || !xhr.response)
- break
- response = xhr.response
- self.push(Buffer.from(new Uint8Array(response)))
- break
- case 'moz-chunked-arraybuffer': // take whole
- response = xhr.response
- if (xhr.readyState !== rStates.LOADING || !response)
- break
- self.push(Buffer.from(new Uint8Array(response)))
- break
- case 'ms-stream':
- response = xhr.response
- if (xhr.readyState !== rStates.LOADING)
- break
- var reader = new global.MSStreamReader()
- reader.onprogress = function () {
- if (reader.result.byteLength > self._pos) {
- self.push(Buffer.from(new Uint8Array(reader.result.slice(self._pos))))
- self._pos = reader.result.byteLength
- }
- }
- reader.onload = function () {
- resetTimers(true)
- self.push(null)
- }
- // reader.onerror = ??? // TODO: this
- reader.readAsArrayBuffer(response)
- break
- }
- // The ms-stream case handles end separately in reader.onload()
- if (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') {
- resetTimers(true)
- self.push(null)
- }
- }
- }).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
- },{"./capability":18,"_process":11,"buffer":3,"inherits":8,"readable-stream":35}],21:[function(require,module,exports){
- 'use strict';
- 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;
- },{}],22:[function(require,module,exports){
- (function (process){(function (){
- // 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)}).call(this,require('_process'))
- },{"./_stream_readable":24,"./_stream_writable":26,"_process":11,"inherits":8}],23:[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":25,"inherits":8}],24:[function(require,module,exports){
- (function (process,global){(function (){
- // 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)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{"../errors":21,"./_stream_duplex":22,"./internal/streams/async_iterator":27,"./internal/streams/buffer_list":28,"./internal/streams/destroy":29,"./internal/streams/from":31,"./internal/streams/state":33,"./internal/streams/stream":34,"_process":11,"buffer":3,"events":5,"inherits":8,"string_decoder/":36,"util":2}],25:[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":21,"./_stream_duplex":22,"inherits":8}],26:[function(require,module,exports){
- (function (process,global){(function (){
- // 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)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{"../errors":21,"./_stream_duplex":22,"./internal/streams/destroy":29,"./internal/streams/state":33,"./internal/streams/stream":34,"_process":11,"buffer":3,"inherits":8,"util-deprecate":39}],27:[function(require,module,exports){
- (function (process){(function (){
- '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)}).call(this,require('_process'))
- },{"./end-of-stream":30,"_process":11}],28:[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":3,"util":2}],29:[function(require,module,exports){
- (function (process){(function (){
- '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)}).call(this,require('_process'))
- },{"_process":11}],30:[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":21}],31:[function(require,module,exports){
- module.exports = function () {
- throw new Error('Readable.from is not available in the browser')
- };
- },{}],32:[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":21,"./end-of-stream":30}],33:[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":21}],34:[function(require,module,exports){
- module.exports = require('events').EventEmitter;
- },{"events":5}],35:[function(require,module,exports){
- 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":22,"./lib/_stream_passthrough.js":23,"./lib/_stream_readable.js":24,"./lib/_stream_transform.js":25,"./lib/_stream_writable.js":26,"./lib/internal/streams/end-of-stream.js":30,"./lib/internal/streams/pipeline.js":32}],36:[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":16}],37:[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';
- var punycode = require('punycode');
- var util = require('./util');
- exports.parse = urlParse;
- exports.resolve = urlResolve;
- exports.resolveObject = urlResolveObject;
- exports.format = urlFormat;
- exports.Url = Url;
- function Url() {
- this.protocol = null;
- this.slashes = null;
- this.auth = null;
- this.host = null;
- this.port = null;
- this.hostname = null;
- this.hash = null;
- this.search = null;
- this.query = null;
- this.pathname = null;
- this.path = null;
- this.href = null;
- }
- // Reference: RFC 3986, RFC 1808, RFC 2396
- // define these here so at least they only have to be
- // compiled once on the first module load.
- var protocolPattern = /^([a-z0-9.+-]+:)/i,
- portPattern = /:[0-9]*$/,
- // Special case for a simple path URL
- simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,
- // RFC 2396: characters reserved for delimiting URLs.
- // We actually just auto-escape these.
- delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'],
- // RFC 2396: characters not allowed for various reasons.
- unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims),
- // Allowed by RFCs, but cause of XSS attacks. Always escape these.
- autoEscape = ['\''].concat(unwise),
- // Characters that are never ever allowed in a hostname.
- // Note that any invalid chars are also handled, but these
- // are the ones that are *expected* to be seen, so we fast-path
- // them.
- nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),
- hostEndingChars = ['/', '?', '#'],
- hostnameMaxLen = 255,
- hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,
- hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,
- // protocols that can allow "unsafe" and "unwise" chars.
- unsafeProtocol = {
- 'javascript': true,
- 'javascript:': true
- },
- // protocols that never have a hostname.
- hostlessProtocol = {
- 'javascript': true,
- 'javascript:': true
- },
- // protocols that always contain a // bit.
- slashedProtocol = {
- 'http': true,
- 'https': true,
- 'ftp': true,
- 'gopher': true,
- 'file': true,
- 'http:': true,
- 'https:': true,
- 'ftp:': true,
- 'gopher:': true,
- 'file:': true
- },
- querystring = require('querystring');
- function urlParse(url, parseQueryString, slashesDenoteHost) {
- if (url && util.isObject(url) && url instanceof Url) return url;
- var u = new Url;
- u.parse(url, parseQueryString, slashesDenoteHost);
- return u;
- }
- Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {
- if (!util.isString(url)) {
- throw new TypeError("Parameter 'url' must be a string, not " + typeof url);
- }
- // Copy chrome, IE, opera backslash-handling behavior.
- // Back slashes before the query string get converted to forward slashes
- // See: https://code.google.com/p/chromium/issues/detail?id=25916
- var queryIndex = url.indexOf('?'),
- splitter =
- (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',
- uSplit = url.split(splitter),
- slashRegex = /\\/g;
- uSplit[0] = uSplit[0].replace(slashRegex, '/');
- url = uSplit.join(splitter);
- var rest = url;
- // trim before proceeding.
- // This is to support parse stuff like " http://foo.com \n"
- rest = rest.trim();
- if (!slashesDenoteHost && url.split('#').length === 1) {
- // Try fast path regexp
- var simplePath = simplePathPattern.exec(rest);
- if (simplePath) {
- this.path = rest;
- this.href = rest;
- this.pathname = simplePath[1];
- if (simplePath[2]) {
- this.search = simplePath[2];
- if (parseQueryString) {
- this.query = querystring.parse(this.search.substr(1));
- } else {
- this.query = this.search.substr(1);
- }
- } else if (parseQueryString) {
- this.search = '';
- this.query = {};
- }
- return this;
- }
- }
- var proto = protocolPattern.exec(rest);
- if (proto) {
- proto = proto[0];
- var lowerProto = proto.toLowerCase();
- this.protocol = lowerProto;
- rest = rest.substr(proto.length);
- }
- // figure out if it's got a host
- // user@server is *always* interpreted as a hostname, and url
- // resolution will treat //foo/bar as host=foo,path=bar because that's
- // how the browser resolves relative URLs.
- if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) {
- var slashes = rest.substr(0, 2) === '//';
- if (slashes && !(proto && hostlessProtocol[proto])) {
- rest = rest.substr(2);
- this.slashes = true;
- }
- }
- if (!hostlessProtocol[proto] &&
- (slashes || (proto && !slashedProtocol[proto]))) {
- // there's a hostname.
- // the first instance of /, ?, ;, or # ends the host.
- //
- // If there is an @ in the hostname, then non-host chars *are* allowed
- // to the left of the last @ sign, unless some host-ending character
- // comes *before* the @-sign.
- // URLs are obnoxious.
- //
- // ex:
- // http://a@b@c/ => user:a@b host:c
- // http://a@b?@c => user:a host:c path:/?@c
- // v0.12 TODO(isaacs): This is not quite how Chrome does things.
- // Review our test case against browsers more comprehensively.
- // find the first instance of any hostEndingChars
- var hostEnd = -1;
- for (var i = 0; i < hostEndingChars.length; i++) {
- var hec = rest.indexOf(hostEndingChars[i]);
- if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))
- hostEnd = hec;
- }
- // at this point, either we have an explicit point where the
- // auth portion cannot go past, or the last @ char is the decider.
- var auth, atSign;
- if (hostEnd === -1) {
- // atSign can be anywhere.
- atSign = rest.lastIndexOf('@');
- } else {
- // atSign must be in auth portion.
- // http://a@b/c@d => host:b auth:a path:/c@d
- atSign = rest.lastIndexOf('@', hostEnd);
- }
- // Now we have a portion which is definitely the auth.
- // Pull that off.
- if (atSign !== -1) {
- auth = rest.slice(0, atSign);
- rest = rest.slice(atSign + 1);
- this.auth = decodeURIComponent(auth);
- }
- // the host is the remaining to the left of the first non-host char
- hostEnd = -1;
- for (var i = 0; i < nonHostChars.length; i++) {
- var hec = rest.indexOf(nonHostChars[i]);
- if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))
- hostEnd = hec;
- }
- // if we still have not hit it, then the entire thing is a host.
- if (hostEnd === -1)
- hostEnd = rest.length;
- this.host = rest.slice(0, hostEnd);
- rest = rest.slice(hostEnd);
- // pull out port.
- this.parseHost();
- // we've indicated that there is a hostname,
- // so even if it's empty, it has to be present.
- this.hostname = this.hostname || '';
- // if hostname begins with [ and ends with ]
- // assume that it's an IPv6 address.
- var ipv6Hostname = this.hostname[0] === '[' &&
- this.hostname[this.hostname.length - 1] === ']';
- // validate a little.
- if (!ipv6Hostname) {
- var hostparts = this.hostname.split(/\./);
- for (var i = 0, l = hostparts.length; i < l; i++) {
- var part = hostparts[i];
- if (!part) continue;
- if (!part.match(hostnamePartPattern)) {
- var newpart = '';
- for (var j = 0, k = part.length; j < k; j++) {
- if (part.charCodeAt(j) > 127) {
- // we replace non-ASCII char with a temporary placeholder
- // we need this to make sure size of hostname is not
- // broken by replacing non-ASCII by nothing
- newpart += 'x';
- } else {
- newpart += part[j];
- }
- }
- // we test again with ASCII char only
- if (!newpart.match(hostnamePartPattern)) {
- var validParts = hostparts.slice(0, i);
- var notHost = hostparts.slice(i + 1);
- var bit = part.match(hostnamePartStart);
- if (bit) {
- validParts.push(bit[1]);
- notHost.unshift(bit[2]);
- }
- if (notHost.length) {
- rest = '/' + notHost.join('.') + rest;
- }
- this.hostname = validParts.join('.');
- break;
- }
- }
- }
- }
- if (this.hostname.length > hostnameMaxLen) {
- this.hostname = '';
- } else {
- // hostnames are always lower case.
- this.hostname = this.hostname.toLowerCase();
- }
- if (!ipv6Hostname) {
- // IDNA Support: Returns a punycoded representation of "domain".
- // It only converts parts of the domain name that
- // have non-ASCII characters, i.e. it doesn't matter if
- // you call it with a domain that already is ASCII-only.
- this.hostname = punycode.toASCII(this.hostname);
- }
- var p = this.port ? ':' + this.port : '';
- var h = this.hostname || '';
- this.host = h + p;
- this.href += this.host;
- // strip [ and ] from the hostname
- // the host field still retains them, though
- if (ipv6Hostname) {
- this.hostname = this.hostname.substr(1, this.hostname.length - 2);
- if (rest[0] !== '/') {
- rest = '/' + rest;
- }
- }
- }
- // now rest is set to the post-host stuff.
- // chop off any delim chars.
- if (!unsafeProtocol[lowerProto]) {
- // First, make 100% sure that any "autoEscape" chars get
- // escaped, even if encodeURIComponent doesn't think they
- // need to be.
- for (var i = 0, l = autoEscape.length; i < l; i++) {
- var ae = autoEscape[i];
- if (rest.indexOf(ae) === -1)
- continue;
- var esc = encodeURIComponent(ae);
- if (esc === ae) {
- esc = escape(ae);
- }
- rest = rest.split(ae).join(esc);
- }
- }
- // chop off from the tail first.
- var hash = rest.indexOf('#');
- if (hash !== -1) {
- // got a fragment string.
- this.hash = rest.substr(hash);
- rest = rest.slice(0, hash);
- }
- var qm = rest.indexOf('?');
- if (qm !== -1) {
- this.search = rest.substr(qm);
- this.query = rest.substr(qm + 1);
- if (parseQueryString) {
- this.query = querystring.parse(this.query);
- }
- rest = rest.slice(0, qm);
- } else if (parseQueryString) {
- // no query string, but parseQueryString still requested
- this.search = '';
- this.query = {};
- }
- if (rest) this.pathname = rest;
- if (slashedProtocol[lowerProto] &&
- this.hostname && !this.pathname) {
- this.pathname = '/';
- }
- //to support http.request
- if (this.pathname || this.search) {
- var p = this.pathname || '';
- var s = this.search || '';
- this.path = p + s;
- }
- // finally, reconstruct the href based on what has been validated.
- this.href = this.format();
- return this;
- };
- // format a parsed object into a url string
- function urlFormat(obj) {
- // ensure it's an object, and not a string url.
- // If it's an obj, this is a no-op.
- // this way, you can call url_format() on strings
- // to clean up potentially wonky urls.
- if (util.isString(obj)) obj = urlParse(obj);
- if (!(obj instanceof Url)) return Url.prototype.format.call(obj);
- return obj.format();
- }
- Url.prototype.format = function() {
- var auth = this.auth || '';
- if (auth) {
- auth = encodeURIComponent(auth);
- auth = auth.replace(/%3A/i, ':');
- auth += '@';
- }
- var protocol = this.protocol || '',
- pathname = this.pathname || '',
- hash = this.hash || '',
- host = false,
- query = '';
- if (this.host) {
- host = auth + this.host;
- } else if (this.hostname) {
- host = auth + (this.hostname.indexOf(':') === -1 ?
- this.hostname :
- '[' + this.hostname + ']');
- if (this.port) {
- host += ':' + this.port;
- }
- }
- if (this.query &&
- util.isObject(this.query) &&
- Object.keys(this.query).length) {
- query = querystring.stringify(this.query);
- }
- var search = this.search || (query && ('?' + query)) || '';
- if (protocol && protocol.substr(-1) !== ':') protocol += ':';
- // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.
- // unless they had them to begin with.
- if (this.slashes ||
- (!protocol || slashedProtocol[protocol]) && host !== false) {
- host = '//' + (host || '');
- if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;
- } else if (!host) {
- host = '';
- }
- if (hash && hash.charAt(0) !== '#') hash = '#' + hash;
- if (search && search.charAt(0) !== '?') search = '?' + search;
- pathname = pathname.replace(/[?#]/g, function(match) {
- return encodeURIComponent(match);
- });
- search = search.replace('#', '%23');
- return protocol + host + pathname + search + hash;
- };
- function urlResolve(source, relative) {
- return urlParse(source, false, true).resolve(relative);
- }
- Url.prototype.resolve = function(relative) {
- return this.resolveObject(urlParse(relative, false, true)).format();
- };
- function urlResolveObject(source, relative) {
- if (!source) return relative;
- return urlParse(source, false, true).resolveObject(relative);
- }
- Url.prototype.resolveObject = function(relative) {
- if (util.isString(relative)) {
- var rel = new Url();
- rel.parse(relative, false, true);
- relative = rel;
- }
- var result = new Url();
- var tkeys = Object.keys(this);
- for (var tk = 0; tk < tkeys.length; tk++) {
- var tkey = tkeys[tk];
- result[tkey] = this[tkey];
- }
- // hash is always overridden, no matter what.
- // even href="" will remove it.
- result.hash = relative.hash;
- // if the relative url is empty, then there's nothing left to do here.
- if (relative.href === '') {
- result.href = result.format();
- return result;
- }
- // hrefs like //foo/bar always cut to the protocol.
- if (relative.slashes && !relative.protocol) {
- // take everything except the protocol from relative
- var rkeys = Object.keys(relative);
- for (var rk = 0; rk < rkeys.length; rk++) {
- var rkey = rkeys[rk];
- if (rkey !== 'protocol')
- result[rkey] = relative[rkey];
- }
- //urlParse appends trailing / to urls like http://www.example.com
- if (slashedProtocol[result.protocol] &&
- result.hostname && !result.pathname) {
- result.path = result.pathname = '/';
- }
- result.href = result.format();
- return result;
- }
- if (relative.protocol && relative.protocol !== result.protocol) {
- // if it's a known url protocol, then changing
- // the protocol does weird things
- // first, if it's not file:, then we MUST have a host,
- // and if there was a path
- // to begin with, then we MUST have a path.
- // if it is file:, then the host is dropped,
- // because that's known to be hostless.
- // anything else is assumed to be absolute.
- if (!slashedProtocol[relative.protocol]) {
- var keys = Object.keys(relative);
- for (var v = 0; v < keys.length; v++) {
- var k = keys[v];
- result[k] = relative[k];
- }
- result.href = result.format();
- return result;
- }
- result.protocol = relative.protocol;
- if (!relative.host && !hostlessProtocol[relative.protocol]) {
- var relPath = (relative.pathname || '').split('/');
- while (relPath.length && !(relative.host = relPath.shift()));
- if (!relative.host) relative.host = '';
- if (!relative.hostname) relative.hostname = '';
- if (relPath[0] !== '') relPath.unshift('');
- if (relPath.length < 2) relPath.unshift('');
- result.pathname = relPath.join('/');
- } else {
- result.pathname = relative.pathname;
- }
- result.search = relative.search;
- result.query = relative.query;
- result.host = relative.host || '';
- result.auth = relative.auth;
- result.hostname = relative.hostname || relative.host;
- result.port = relative.port;
- // to support http.request
- if (result.pathname || result.search) {
- var p = result.pathname || '';
- var s = result.search || '';
- result.path = p + s;
- }
- result.slashes = result.slashes || relative.slashes;
- result.href = result.format();
- return result;
- }
- var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),
- isRelAbs = (
- relative.host ||
- relative.pathname && relative.pathname.charAt(0) === '/'
- ),
- mustEndAbs = (isRelAbs || isSourceAbs ||
- (result.host && relative.pathname)),
- removeAllDots = mustEndAbs,
- srcPath = result.pathname && result.pathname.split('/') || [],
- relPath = relative.pathname && relative.pathname.split('/') || [],
- psychotic = result.protocol && !slashedProtocol[result.protocol];
- // if the url is a non-slashed url, then relative
- // links like ../.. should be able
- // to crawl up to the hostname, as well. This is strange.
- // result.protocol has already been set by now.
- // Later on, put the first path part into the host field.
- if (psychotic) {
- result.hostname = '';
- result.port = null;
- if (result.host) {
- if (srcPath[0] === '') srcPath[0] = result.host;
- else srcPath.unshift(result.host);
- }
- result.host = '';
- if (relative.protocol) {
- relative.hostname = null;
- relative.port = null;
- if (relative.host) {
- if (relPath[0] === '') relPath[0] = relative.host;
- else relPath.unshift(relative.host);
- }
- relative.host = null;
- }
- mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');
- }
- if (isRelAbs) {
- // it's absolute.
- result.host = (relative.host || relative.host === '') ?
- relative.host : result.host;
- result.hostname = (relative.hostname || relative.hostname === '') ?
- relative.hostname : result.hostname;
- result.search = relative.search;
- result.query = relative.query;
- srcPath = relPath;
- // fall through to the dot-handling below.
- } else if (relPath.length) {
- // it's relative
- // throw away the existing file, and take the new path instead.
- if (!srcPath) srcPath = [];
- srcPath.pop();
- srcPath = srcPath.concat(relPath);
- result.search = relative.search;
- result.query = relative.query;
- } else if (!util.isNullOrUndefined(relative.search)) {
- // just pull out the search.
- // like href='?foo'.
- // Put this after the other two cases because it simplifies the booleans
- if (psychotic) {
- result.hostname = result.host = srcPath.shift();
- //occationaly the auth can get stuck only in host
- //this especially happens in cases like
- //url.resolveObject('mailto:local1@domain1', 'local2@domain2')
- var authInHost = result.host && result.host.indexOf('@') > 0 ?
- result.host.split('@') : false;
- if (authInHost) {
- result.auth = authInHost.shift();
- result.host = result.hostname = authInHost.shift();
- }
- }
- result.search = relative.search;
- result.query = relative.query;
- //to support http.request
- if (!util.isNull(result.pathname) || !util.isNull(result.search)) {
- result.path = (result.pathname ? result.pathname : '') +
- (result.search ? result.search : '');
- }
- result.href = result.format();
- return result;
- }
- if (!srcPath.length) {
- // no path at all. easy.
- // we've already handled the other stuff above.
- result.pathname = null;
- //to support http.request
- if (result.search) {
- result.path = '/' + result.search;
- } else {
- result.path = null;
- }
- result.href = result.format();
- return result;
- }
- // if a url ENDs in . or .., then it must get a trailing slash.
- // however, if it ends in anything else non-slashy,
- // then it must NOT get a trailing slash.
- var last = srcPath.slice(-1)[0];
- var hasTrailingSlash = (
- (result.host || relative.host || srcPath.length > 1) &&
- (last === '.' || last === '..') || last === '');
- // strip single dots, resolve double dots to parent dir
- // if the path tries to go above the root, `up` ends up > 0
- var up = 0;
- for (var i = srcPath.length; i >= 0; i--) {
- last = srcPath[i];
- if (last === '.') {
- srcPath.splice(i, 1);
- } else if (last === '..') {
- srcPath.splice(i, 1);
- up++;
- } else if (up) {
- srcPath.splice(i, 1);
- up--;
- }
- }
- // if the path is allowed to go above the root, restore leading ..s
- if (!mustEndAbs && !removeAllDots) {
- for (; up--; up) {
- srcPath.unshift('..');
- }
- }
- if (mustEndAbs && srcPath[0] !== '' &&
- (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {
- srcPath.unshift('');
- }
- if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {
- srcPath.push('');
- }
- var isAbsolute = srcPath[0] === '' ||
- (srcPath[0] && srcPath[0].charAt(0) === '/');
- // put the host back
- if (psychotic) {
- result.hostname = result.host = isAbsolute ? '' :
- srcPath.length ? srcPath.shift() : '';
- //occationaly the auth can get stuck only in host
- //this especially happens in cases like
- //url.resolveObject('mailto:local1@domain1', 'local2@domain2')
- var authInHost = result.host && result.host.indexOf('@') > 0 ?
- result.host.split('@') : false;
- if (authInHost) {
- result.auth = authInHost.shift();
- result.host = result.hostname = authInHost.shift();
- }
- }
- mustEndAbs = mustEndAbs || (result.host && srcPath.length);
- if (mustEndAbs && !isAbsolute) {
- srcPath.unshift('');
- }
- if (!srcPath.length) {
- result.pathname = null;
- result.path = null;
- } else {
- result.pathname = srcPath.join('/');
- }
- //to support request.http
- if (!util.isNull(result.pathname) || !util.isNull(result.search)) {
- result.path = (result.pathname ? result.pathname : '') +
- (result.search ? result.search : '');
- }
- result.auth = relative.auth || result.auth;
- result.slashes = result.slashes || relative.slashes;
- result.href = result.format();
- return result;
- };
- Url.prototype.parseHost = function() {
- var host = this.host;
- var port = portPattern.exec(host);
- if (port) {
- port = port[0];
- if (port !== ':') {
- this.port = port.substr(1);
- }
- host = host.substr(0, host.length - port.length);
- }
- if (host) this.hostname = host;
- };
- },{"./util":38,"punycode":12,"querystring":15}],38:[function(require,module,exports){
- 'use strict';
- module.exports = {
- isString: function(arg) {
- return typeof(arg) === 'string';
- },
- isObject: function(arg) {
- return typeof(arg) === 'object' && arg !== null;
- },
- isNull: function(arg) {
- return arg === null;
- },
- isNullOrUndefined: function(arg) {
- return arg == null;
- }
- };
- },{}],39:[function(require,module,exports){
- (function (global){(function (){
- /**
- * 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)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{}],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); }
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var _toDate = _interopRequireDefault(require("./lib/toDate"));
- var _toFloat = _interopRequireDefault(require("./lib/toFloat"));
- var _toInt = _interopRequireDefault(require("./lib/toInt"));
- var _toBoolean = _interopRequireDefault(require("./lib/toBoolean"));
- var _equals = _interopRequireDefault(require("./lib/equals"));
- var _contains = _interopRequireDefault(require("./lib/contains"));
- var _matches = _interopRequireDefault(require("./lib/matches"));
- var _isEmail = _interopRequireDefault(require("./lib/isEmail"));
- var _isURL = _interopRequireDefault(require("./lib/isURL"));
- var _isMACAddress = _interopRequireDefault(require("./lib/isMACAddress"));
- var _isIP = _interopRequireDefault(require("./lib/isIP"));
- var _isIPRange = _interopRequireDefault(require("./lib/isIPRange"));
- var _isFQDN = _interopRequireDefault(require("./lib/isFQDN"));
- var _isDate = _interopRequireDefault(require("./lib/isDate"));
- var _isBoolean = _interopRequireDefault(require("./lib/isBoolean"));
- var _isLocale = _interopRequireDefault(require("./lib/isLocale"));
- var _isAlpha = _interopRequireWildcard(require("./lib/isAlpha"));
- var _isAlphanumeric = _interopRequireWildcard(require("./lib/isAlphanumeric"));
- var _isNumeric = _interopRequireDefault(require("./lib/isNumeric"));
- var _isPassportNumber = _interopRequireDefault(require("./lib/isPassportNumber"));
- var _isPort = _interopRequireDefault(require("./lib/isPort"));
- var _isLowercase = _interopRequireDefault(require("./lib/isLowercase"));
- var _isUppercase = _interopRequireDefault(require("./lib/isUppercase"));
- var _isIMEI = _interopRequireDefault(require("./lib/isIMEI"));
- var _isAscii = _interopRequireDefault(require("./lib/isAscii"));
- var _isFullWidth = _interopRequireDefault(require("./lib/isFullWidth"));
- var _isHalfWidth = _interopRequireDefault(require("./lib/isHalfWidth"));
- var _isVariableWidth = _interopRequireDefault(require("./lib/isVariableWidth"));
- var _isMultibyte = _interopRequireDefault(require("./lib/isMultibyte"));
- var _isSemVer = _interopRequireDefault(require("./lib/isSemVer"));
- var _isSurrogatePair = _interopRequireDefault(require("./lib/isSurrogatePair"));
- var _isInt = _interopRequireDefault(require("./lib/isInt"));
- var _isFloat = _interopRequireWildcard(require("./lib/isFloat"));
- var _isDecimal = _interopRequireDefault(require("./lib/isDecimal"));
- var _isHexadecimal = _interopRequireDefault(require("./lib/isHexadecimal"));
- var _isOctal = _interopRequireDefault(require("./lib/isOctal"));
- var _isDivisibleBy = _interopRequireDefault(require("./lib/isDivisibleBy"));
- var _isHexColor = _interopRequireDefault(require("./lib/isHexColor"));
- var _isRgbColor = _interopRequireDefault(require("./lib/isRgbColor"));
- var _isHSL = _interopRequireDefault(require("./lib/isHSL"));
- var _isISRC = _interopRequireDefault(require("./lib/isISRC"));
- var _isIBAN = _interopRequireWildcard(require("./lib/isIBAN"));
- var _isBIC = _interopRequireDefault(require("./lib/isBIC"));
- var _isMD = _interopRequireDefault(require("./lib/isMD5"));
- var _isHash = _interopRequireDefault(require("./lib/isHash"));
- var _isJWT = _interopRequireDefault(require("./lib/isJWT"));
- var _isJSON = _interopRequireDefault(require("./lib/isJSON"));
- var _isEmpty = _interopRequireDefault(require("./lib/isEmpty"));
- var _isLength = _interopRequireDefault(require("./lib/isLength"));
- var _isByteLength = _interopRequireDefault(require("./lib/isByteLength"));
- var _isUUID = _interopRequireDefault(require("./lib/isUUID"));
- var _isMongoId = _interopRequireDefault(require("./lib/isMongoId"));
- var _isAfter = _interopRequireDefault(require("./lib/isAfter"));
- var _isBefore = _interopRequireDefault(require("./lib/isBefore"));
- var _isIn = _interopRequireDefault(require("./lib/isIn"));
- var _isCreditCard = _interopRequireDefault(require("./lib/isCreditCard"));
- var _isIdentityCard = _interopRequireDefault(require("./lib/isIdentityCard"));
- var _isEAN = _interopRequireDefault(require("./lib/isEAN"));
- var _isISIN = _interopRequireDefault(require("./lib/isISIN"));
- var _isISBN = _interopRequireDefault(require("./lib/isISBN"));
- var _isISSN = _interopRequireDefault(require("./lib/isISSN"));
- var _isTaxID = _interopRequireDefault(require("./lib/isTaxID"));
- var _isMobilePhone = _interopRequireWildcard(require("./lib/isMobilePhone"));
- var _isEthereumAddress = _interopRequireDefault(require("./lib/isEthereumAddress"));
- var _isCurrency = _interopRequireDefault(require("./lib/isCurrency"));
- var _isBtcAddress = _interopRequireDefault(require("./lib/isBtcAddress"));
- var _isISO = _interopRequireDefault(require("./lib/isISO8601"));
- var _isRFC = _interopRequireDefault(require("./lib/isRFC3339"));
- var _isISO31661Alpha = _interopRequireDefault(require("./lib/isISO31661Alpha2"));
- var _isISO31661Alpha2 = _interopRequireDefault(require("./lib/isISO31661Alpha3"));
- var _isISO2 = _interopRequireDefault(require("./lib/isISO4217"));
- var _isBase = _interopRequireDefault(require("./lib/isBase32"));
- var _isBase2 = _interopRequireDefault(require("./lib/isBase58"));
- var _isBase3 = _interopRequireDefault(require("./lib/isBase64"));
- var _isDataURI = _interopRequireDefault(require("./lib/isDataURI"));
- var _isMagnetURI = _interopRequireDefault(require("./lib/isMagnetURI"));
- var _isMimeType = _interopRequireDefault(require("./lib/isMimeType"));
- var _isLatLong = _interopRequireDefault(require("./lib/isLatLong"));
- var _isPostalCode = _interopRequireWildcard(require("./lib/isPostalCode"));
- var _ltrim = _interopRequireDefault(require("./lib/ltrim"));
- var _rtrim = _interopRequireDefault(require("./lib/rtrim"));
- var _trim = _interopRequireDefault(require("./lib/trim"));
- var _escape = _interopRequireDefault(require("./lib/escape"));
- var _unescape = _interopRequireDefault(require("./lib/unescape"));
- var _stripLow = _interopRequireDefault(require("./lib/stripLow"));
- var _whitelist = _interopRequireDefault(require("./lib/whitelist"));
- var _blacklist = _interopRequireDefault(require("./lib/blacklist"));
- var _isWhitelisted = _interopRequireDefault(require("./lib/isWhitelisted"));
- var _normalizeEmail = _interopRequireDefault(require("./lib/normalizeEmail"));
- var _isSlug = _interopRequireDefault(require("./lib/isSlug"));
- var _isLicensePlate = _interopRequireDefault(require("./lib/isLicensePlate"));
- var _isStrongPassword = _interopRequireDefault(require("./lib/isStrongPassword"));
- var _isVAT = _interopRequireDefault(require("./lib/isVAT"));
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var version = '13.7.0';
- var validator = {
- version: version,
- toDate: _toDate.default,
- toFloat: _toFloat.default,
- toInt: _toInt.default,
- toBoolean: _toBoolean.default,
- equals: _equals.default,
- contains: _contains.default,
- matches: _matches.default,
- isEmail: _isEmail.default,
- isURL: _isURL.default,
- isMACAddress: _isMACAddress.default,
- isIP: _isIP.default,
- isIPRange: _isIPRange.default,
- isFQDN: _isFQDN.default,
- isBoolean: _isBoolean.default,
- isIBAN: _isIBAN.default,
- isBIC: _isBIC.default,
- isAlpha: _isAlpha.default,
- isAlphaLocales: _isAlpha.locales,
- isAlphanumeric: _isAlphanumeric.default,
- isAlphanumericLocales: _isAlphanumeric.locales,
- isNumeric: _isNumeric.default,
- isPassportNumber: _isPassportNumber.default,
- isPort: _isPort.default,
- isLowercase: _isLowercase.default,
- isUppercase: _isUppercase.default,
- isAscii: _isAscii.default,
- isFullWidth: _isFullWidth.default,
- isHalfWidth: _isHalfWidth.default,
- isVariableWidth: _isVariableWidth.default,
- isMultibyte: _isMultibyte.default,
- isSemVer: _isSemVer.default,
- isSurrogatePair: _isSurrogatePair.default,
- isInt: _isInt.default,
- isIMEI: _isIMEI.default,
- isFloat: _isFloat.default,
- isFloatLocales: _isFloat.locales,
- isDecimal: _isDecimal.default,
- isHexadecimal: _isHexadecimal.default,
- isOctal: _isOctal.default,
- isDivisibleBy: _isDivisibleBy.default,
- isHexColor: _isHexColor.default,
- isRgbColor: _isRgbColor.default,
- isHSL: _isHSL.default,
- isISRC: _isISRC.default,
- isMD5: _isMD.default,
- isHash: _isHash.default,
- isJWT: _isJWT.default,
- isJSON: _isJSON.default,
- isEmpty: _isEmpty.default,
- isLength: _isLength.default,
- isLocale: _isLocale.default,
- isByteLength: _isByteLength.default,
- isUUID: _isUUID.default,
- isMongoId: _isMongoId.default,
- isAfter: _isAfter.default,
- isBefore: _isBefore.default,
- isIn: _isIn.default,
- isCreditCard: _isCreditCard.default,
- isIdentityCard: _isIdentityCard.default,
- isEAN: _isEAN.default,
- isISIN: _isISIN.default,
- isISBN: _isISBN.default,
- isISSN: _isISSN.default,
- isMobilePhone: _isMobilePhone.default,
- isMobilePhoneLocales: _isMobilePhone.locales,
- isPostalCode: _isPostalCode.default,
- isPostalCodeLocales: _isPostalCode.locales,
- isEthereumAddress: _isEthereumAddress.default,
- isCurrency: _isCurrency.default,
- isBtcAddress: _isBtcAddress.default,
- isISO8601: _isISO.default,
- isRFC3339: _isRFC.default,
- isISO31661Alpha2: _isISO31661Alpha.default,
- isISO31661Alpha3: _isISO31661Alpha2.default,
- isISO4217: _isISO2.default,
- isBase32: _isBase.default,
- isBase58: _isBase2.default,
- isBase64: _isBase3.default,
- isDataURI: _isDataURI.default,
- isMagnetURI: _isMagnetURI.default,
- isMimeType: _isMimeType.default,
- isLatLong: _isLatLong.default,
- ltrim: _ltrim.default,
- rtrim: _rtrim.default,
- trim: _trim.default,
- escape: _escape.default,
- unescape: _unescape.default,
- stripLow: _stripLow.default,
- whitelist: _whitelist.default,
- blacklist: _blacklist.default,
- isWhitelisted: _isWhitelisted.default,
- normalizeEmail: _normalizeEmail.default,
- toString: toString,
- isSlug: _isSlug.default,
- isStrongPassword: _isStrongPassword.default,
- isTaxID: _isTaxID.default,
- isDate: _isDate.default,
- isLicensePlate: _isLicensePlate.default,
- isVAT: _isVAT.default,
- ibanLocales: _isIBAN.locales
- };
- var _default = validator;
- exports.default = _default;
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./lib/blacklist":42,"./lib/contains":43,"./lib/equals":44,"./lib/escape":45,"./lib/isAfter":46,"./lib/isAlpha":47,"./lib/isAlphanumeric":48,"./lib/isAscii":49,"./lib/isBIC":50,"./lib/isBase32":51,"./lib/isBase58":52,"./lib/isBase64":53,"./lib/isBefore":54,"./lib/isBoolean":55,"./lib/isBtcAddress":56,"./lib/isByteLength":57,"./lib/isCreditCard":58,"./lib/isCurrency":59,"./lib/isDataURI":60,"./lib/isDate":61,"./lib/isDecimal":62,"./lib/isDivisibleBy":63,"./lib/isEAN":64,"./lib/isEmail":65,"./lib/isEmpty":66,"./lib/isEthereumAddress":67,"./lib/isFQDN":68,"./lib/isFloat":69,"./lib/isFullWidth":70,"./lib/isHSL":71,"./lib/isHalfWidth":72,"./lib/isHash":73,"./lib/isHexColor":74,"./lib/isHexadecimal":75,"./lib/isIBAN":76,"./lib/isIMEI":77,"./lib/isIP":78,"./lib/isIPRange":79,"./lib/isISBN":80,"./lib/isISIN":81,"./lib/isISO31661Alpha2":82,"./lib/isISO31661Alpha3":83,"./lib/isISO4217":84,"./lib/isISO8601":85,"./lib/isISRC":86,"./lib/isISSN":87,"./lib/isIdentityCard":88,"./lib/isIn":89,"./lib/isInt":90,"./lib/isJSON":91,"./lib/isJWT":92,"./lib/isLatLong":93,"./lib/isLength":94,"./lib/isLicensePlate":95,"./lib/isLocale":96,"./lib/isLowercase":97,"./lib/isMACAddress":98,"./lib/isMD5":99,"./lib/isMagnetURI":100,"./lib/isMimeType":101,"./lib/isMobilePhone":102,"./lib/isMongoId":103,"./lib/isMultibyte":104,"./lib/isNumeric":105,"./lib/isOctal":106,"./lib/isPassportNumber":107,"./lib/isPort":108,"./lib/isPostalCode":109,"./lib/isRFC3339":110,"./lib/isRgbColor":111,"./lib/isSemVer":112,"./lib/isSlug":113,"./lib/isStrongPassword":114,"./lib/isSurrogatePair":115,"./lib/isTaxID":116,"./lib/isURL":117,"./lib/isUUID":118,"./lib/isUppercase":119,"./lib/isVAT":120,"./lib/isVariableWidth":121,"./lib/isWhitelisted":122,"./lib/ltrim":123,"./lib/matches":124,"./lib/normalizeEmail":125,"./lib/rtrim":126,"./lib/stripLow":127,"./lib/toBoolean":128,"./lib/toDate":129,"./lib/toFloat":130,"./lib/toInt":131,"./lib/trim":132,"./lib/unescape":133,"./lib/whitelist":140}],41:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.commaDecimal = exports.dotDecimal = exports.farsiLocales = exports.arabicLocales = exports.englishLocales = exports.decimal = exports.alphanumeric = exports.alpha = void 0;
- var alpha = {
- 'en-US': /^[A-Z]+$/i,
- 'az-AZ': /^[A-VXYZÇƏĞİıÖŞÜ]+$/i,
- 'bg-BG': /^[А-Я]+$/i,
- 'cs-CZ': /^[A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]+$/i,
- 'da-DK': /^[A-ZÆØÅ]+$/i,
- 'de-DE': /^[A-ZÄÖÜß]+$/i,
- 'el-GR': /^[Α-ώ]+$/i,
- 'es-ES': /^[A-ZÁÉÍÑÓÚÜ]+$/i,
- 'fa-IR': /^[ابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی]+$/i,
- 'fi-FI': /^[A-ZÅÄÖ]+$/i,
- 'fr-FR': /^[A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i,
- 'it-IT': /^[A-ZÀÉÈÌÎÓÒÙ]+$/i,
- 'nb-NO': /^[A-ZÆØÅ]+$/i,
- 'nl-NL': /^[A-ZÁÉËÏÓÖÜÚ]+$/i,
- 'nn-NO': /^[A-ZÆØÅ]+$/i,
- 'hu-HU': /^[A-ZÁÉÍÓÖŐÚÜŰ]+$/i,
- 'pl-PL': /^[A-ZĄĆĘŚŁŃÓŻŹ]+$/i,
- 'pt-PT': /^[A-ZÃÁÀÂÄÇÉÊËÍÏÕÓÔÖÚÜ]+$/i,
- 'ru-RU': /^[А-ЯЁ]+$/i,
- 'sl-SI': /^[A-ZČĆĐŠŽ]+$/i,
- 'sk-SK': /^[A-ZÁČĎÉÍŇÓŠŤÚÝŽĹŔĽÄÔ]+$/i,
- 'sr-RS@latin': /^[A-ZČĆŽŠĐ]+$/i,
- 'sr-RS': /^[А-ЯЂЈЉЊЋЏ]+$/i,
- 'sv-SE': /^[A-ZÅÄÖ]+$/i,
- 'th-TH': /^[ก-๐\s]+$/i,
- 'tr-TR': /^[A-ZÇĞİıÖŞÜ]+$/i,
- 'uk-UA': /^[А-ЩЬЮЯЄIЇҐі]+$/i,
- 'vi-VN': /^[A-ZÀÁẠẢÃÂẦẤẬẨẪĂẰẮẶẲẴĐÈÉẸẺẼÊỀẾỆỂỄÌÍỊỈĨÒÓỌỎÕÔỒỐỘỔỖƠỜỚỢỞỠÙÚỤỦŨƯỪỨỰỬỮỲÝỴỶỸ]+$/i,
- 'ku-IQ': /^[ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i,
- ar: /^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/,
- he: /^[א-ת]+$/,
- fa: /^['آاءأؤئبپتثجچحخدذرزژسشصضطظعغفقکگلمنوهةی']+$/i,
- 'hi-IN': /^[\u0900-\u0961]+[\u0972-\u097F]*$/i
- };
- exports.alpha = alpha;
- var alphanumeric = {
- 'en-US': /^[0-9A-Z]+$/i,
- 'az-AZ': /^[0-9A-VXYZÇƏĞİıÖŞÜ]+$/i,
- 'bg-BG': /^[0-9А-Я]+$/i,
- 'cs-CZ': /^[0-9A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]+$/i,
- 'da-DK': /^[0-9A-ZÆØÅ]+$/i,
- 'de-DE': /^[0-9A-ZÄÖÜß]+$/i,
- 'el-GR': /^[0-9Α-ω]+$/i,
- 'es-ES': /^[0-9A-ZÁÉÍÑÓÚÜ]+$/i,
- 'fi-FI': /^[0-9A-ZÅÄÖ]+$/i,
- 'fr-FR': /^[0-9A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i,
- 'it-IT': /^[0-9A-ZÀÉÈÌÎÓÒÙ]+$/i,
- 'hu-HU': /^[0-9A-ZÁÉÍÓÖŐÚÜŰ]+$/i,
- 'nb-NO': /^[0-9A-ZÆØÅ]+$/i,
- 'nl-NL': /^[0-9A-ZÁÉËÏÓÖÜÚ]+$/i,
- 'nn-NO': /^[0-9A-ZÆØÅ]+$/i,
- 'pl-PL': /^[0-9A-ZĄĆĘŚŁŃÓŻŹ]+$/i,
- 'pt-PT': /^[0-9A-ZÃÁÀÂÄÇÉÊËÍÏÕÓÔÖÚÜ]+$/i,
- 'ru-RU': /^[0-9А-ЯЁ]+$/i,
- 'sl-SI': /^[0-9A-ZČĆĐŠŽ]+$/i,
- 'sk-SK': /^[0-9A-ZÁČĎÉÍŇÓŠŤÚÝŽĹŔĽÄÔ]+$/i,
- 'sr-RS@latin': /^[0-9A-ZČĆŽŠĐ]+$/i,
- 'sr-RS': /^[0-9А-ЯЂЈЉЊЋЏ]+$/i,
- 'sv-SE': /^[0-9A-ZÅÄÖ]+$/i,
- 'th-TH': /^[ก-๙\s]+$/i,
- 'tr-TR': /^[0-9A-ZÇĞİıÖŞÜ]+$/i,
- 'uk-UA': /^[0-9А-ЩЬЮЯЄIЇҐі]+$/i,
- 'ku-IQ': /^[٠١٢٣٤٥٦٧٨٩0-9ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i,
- 'vi-VN': /^[0-9A-ZÀÁẠẢÃÂẦẤẬẨẪĂẰẮẶẲẴĐÈÉẸẺẼÊỀẾỆỂỄÌÍỊỈĨÒÓỌỎÕÔỒỐỘỔỖƠỜỚỢỞỠÙÚỤỦŨƯỪỨỰỬỮỲÝỴỶỸ]+$/i,
- ar: /^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/,
- he: /^[0-9א-ת]+$/,
- fa: /^['0-9آاءأؤئبپتثجچحخدذرزژسشصضطظعغفقکگلمنوهةی۱۲۳۴۵۶۷۸۹۰']+$/i,
- 'hi-IN': /^[\u0900-\u0963]+[\u0966-\u097F]*$/i
- };
- exports.alphanumeric = alphanumeric;
- var decimal = {
- 'en-US': '.',
- ar: '٫'
- };
- exports.decimal = decimal;
- var englishLocales = ['AU', 'GB', 'HK', 'IN', 'NZ', 'ZA', 'ZM'];
- exports.englishLocales = englishLocales;
- for (var locale, i = 0; i < englishLocales.length; i++) {
- locale = "en-".concat(englishLocales[i]);
- alpha[locale] = alpha['en-US'];
- alphanumeric[locale] = alphanumeric['en-US'];
- decimal[locale] = decimal['en-US'];
- } // Source: http://www.localeplanet.com/java/
- var arabicLocales = ['AE', 'BH', 'DZ', 'EG', 'IQ', 'JO', 'KW', 'LB', 'LY', 'MA', 'QM', 'QA', 'SA', 'SD', 'SY', 'TN', 'YE'];
- exports.arabicLocales = arabicLocales;
- for (var _locale, _i = 0; _i < arabicLocales.length; _i++) {
- _locale = "ar-".concat(arabicLocales[_i]);
- alpha[_locale] = alpha.ar;
- alphanumeric[_locale] = alphanumeric.ar;
- decimal[_locale] = decimal.ar;
- }
- var farsiLocales = ['IR', 'AF'];
- exports.farsiLocales = farsiLocales;
- for (var _locale2, _i2 = 0; _i2 < farsiLocales.length; _i2++) {
- _locale2 = "fa-".concat(farsiLocales[_i2]);
- alphanumeric[_locale2] = alphanumeric.fa;
- decimal[_locale2] = decimal.ar;
- } // Source: https://en.wikipedia.org/wiki/Decimal_mark
- var dotDecimal = ['ar-EG', 'ar-LB', 'ar-LY'];
- exports.dotDecimal = dotDecimal;
- var commaDecimal = ['bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'en-ZM', 'es-ES', 'fr-CA', 'fr-FR', 'id-ID', 'it-IT', 'ku-IQ', 'hi-IN', 'hu-HU', 'nb-NO', 'nn-NO', 'nl-NL', 'pl-PL', 'pt-PT', 'ru-RU', 'sl-SI', 'sr-RS@latin', 'sr-RS', 'sv-SE', 'tr-TR', 'uk-UA', 'vi-VN'];
- exports.commaDecimal = commaDecimal;
- for (var _i3 = 0; _i3 < dotDecimal.length; _i3++) {
- decimal[dotDecimal[_i3]] = decimal['en-US'];
- }
- for (var _i4 = 0; _i4 < commaDecimal.length; _i4++) {
- decimal[commaDecimal[_i4]] = ',';
- }
- alpha['fr-CA'] = alpha['fr-FR'];
- alphanumeric['fr-CA'] = alphanumeric['fr-FR'];
- alpha['pt-BR'] = alpha['pt-PT'];
- alphanumeric['pt-BR'] = alphanumeric['pt-PT'];
- decimal['pt-BR'] = decimal['pt-PT']; // see #862
- alpha['pl-Pl'] = alpha['pl-PL'];
- alphanumeric['pl-Pl'] = alphanumeric['pl-PL'];
- decimal['pl-Pl'] = decimal['pl-PL']; // see #1455
- alpha['fa-AF'] = alpha.fa;
- },{}],42:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = blacklist;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function blacklist(str, chars) {
- (0, _assertString.default)(str);
- return str.replace(new RegExp("[".concat(chars, "]+"), 'g'), '');
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],43:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = contains;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _toString = _interopRequireDefault(require("./util/toString"));
- var _merge = _interopRequireDefault(require("./util/merge"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var defaulContainsOptions = {
- ignoreCase: false,
- minOccurrences: 1
- };
- function contains(str, elem, options) {
- (0, _assertString.default)(str);
- options = (0, _merge.default)(options, defaulContainsOptions);
- if (options.ignoreCase) {
- return str.toLowerCase().split((0, _toString.default)(elem).toLowerCase()).length > options.minOccurrences;
- }
- return str.split((0, _toString.default)(elem)).length > options.minOccurrences;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135,"./util/merge":137,"./util/toString":139}],44:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = equals;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function equals(str, comparison) {
- (0, _assertString.default)(str);
- return str === comparison;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],45:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = escape;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function escape(str) {
- (0, _assertString.default)(str);
- return str.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''').replace(/</g, '<').replace(/>/g, '>').replace(/\//g, '/').replace(/\\/g, '\').replace(/`/g, '`');
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],46:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isAfter;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _toDate = _interopRequireDefault(require("./toDate"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function isAfter(str) {
- var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : String(new Date());
- (0, _assertString.default)(str);
- var comparison = (0, _toDate.default)(date);
- var original = (0, _toDate.default)(str);
- return !!(original && comparison && original > comparison);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./toDate":129,"./util/assertString":135}],47:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isAlpha;
- exports.locales = void 0;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _alpha = require("./alpha");
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function isAlpha(_str) {
- var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US';
- var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
- (0, _assertString.default)(_str);
- var str = _str;
- var ignore = options.ignore;
- if (ignore) {
- if (ignore instanceof RegExp) {
- str = str.replace(ignore, '');
- } else if (typeof ignore === 'string') {
- str = str.replace(new RegExp("[".concat(ignore.replace(/[-[\]{}()*+?.,\\^$|#\\s]/g, '\\$&'), "]"), 'g'), ''); // escape regex for ignore
- } else {
- throw new Error('ignore should be instance of a String or RegExp');
- }
- }
- if (locale in _alpha.alpha) {
- return _alpha.alpha[locale].test(str);
- }
- throw new Error("Invalid locale '".concat(locale, "'"));
- }
- var locales = Object.keys(_alpha.alpha);
- exports.locales = locales;
- },{"./alpha":41,"./util/assertString":135}],48:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isAlphanumeric;
- exports.locales = void 0;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _alpha = require("./alpha");
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function isAlphanumeric(_str) {
- var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US';
- var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
- (0, _assertString.default)(_str);
- var str = _str;
- var ignore = options.ignore;
- if (ignore) {
- if (ignore instanceof RegExp) {
- str = str.replace(ignore, '');
- } else if (typeof ignore === 'string') {
- str = str.replace(new RegExp("[".concat(ignore.replace(/[-[\]{}()*+?.,\\^$|#\\s]/g, '\\$&'), "]"), 'g'), ''); // escape regex for ignore
- } else {
- throw new Error('ignore should be instance of a String or RegExp');
- }
- }
- if (locale in _alpha.alphanumeric) {
- return _alpha.alphanumeric[locale].test(str);
- }
- throw new Error("Invalid locale '".concat(locale, "'"));
- }
- var locales = Object.keys(_alpha.alphanumeric);
- exports.locales = locales;
- },{"./alpha":41,"./util/assertString":135}],49:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isAscii;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /* eslint-disable no-control-regex */
- var ascii = /^[\x00-\x7F]+$/;
- /* eslint-enable no-control-regex */
- function isAscii(str) {
- (0, _assertString.default)(str);
- return ascii.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],50:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isBIC;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _isISO31661Alpha = require("./isISO31661Alpha2");
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- // https://en.wikipedia.org/wiki/ISO_9362
- var isBICReg = /^[A-Za-z]{6}[A-Za-z0-9]{2}([A-Za-z0-9]{3})?$/;
- function isBIC(str) {
- (0, _assertString.default)(str); // toUpperCase() should be removed when a new major version goes out that changes
- // the regex to [A-Z] (per the spec).
- if (!_isISO31661Alpha.CountryCodes.has(str.slice(4, 6).toUpperCase())) {
- return false;
- }
- return isBICReg.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./isISO31661Alpha2":82,"./util/assertString":135}],51:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isBase32;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var base32 = /^[A-Z2-7]+=*$/;
- function isBase32(str) {
- (0, _assertString.default)(str);
- var len = str.length;
- if (len % 8 === 0 && base32.test(str)) {
- return true;
- }
- return false;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],52:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isBase58;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- // Accepted chars - 123456789ABCDEFGH JKLMN PQRSTUVWXYZabcdefghijk mnopqrstuvwxyz
- var base58Reg = /^[A-HJ-NP-Za-km-z1-9]*$/;
- function isBase58(str) {
- (0, _assertString.default)(str);
- if (base58Reg.test(str)) {
- return true;
- }
- return false;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],53:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isBase64;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _merge = _interopRequireDefault(require("./util/merge"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var notBase64 = /[^A-Z0-9+\/=]/i;
- var urlSafeBase64 = /^[A-Z0-9_\-]*$/i;
- var defaultBase64Options = {
- urlSafe: false
- };
- function isBase64(str, options) {
- (0, _assertString.default)(str);
- options = (0, _merge.default)(options, defaultBase64Options);
- var len = str.length;
- if (options.urlSafe) {
- return urlSafeBase64.test(str);
- }
- if (len % 4 !== 0 || notBase64.test(str)) {
- return false;
- }
- var firstPaddingChar = str.indexOf('=');
- return firstPaddingChar === -1 || firstPaddingChar === len - 1 || firstPaddingChar === len - 2 && str[len - 1] === '=';
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135,"./util/merge":137}],54:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isBefore;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _toDate = _interopRequireDefault(require("./toDate"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function isBefore(str) {
- var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : String(new Date());
- (0, _assertString.default)(str);
- var comparison = (0, _toDate.default)(date);
- var original = (0, _toDate.default)(str);
- return !!(original && comparison && original < comparison);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./toDate":129,"./util/assertString":135}],55:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isBoolean;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var defaultOptions = {
- loose: false
- };
- var strictBooleans = ['true', 'false', '1', '0'];
- var looseBooleans = [].concat(strictBooleans, ['yes', 'no']);
- function isBoolean(str) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultOptions;
- (0, _assertString.default)(str);
- if (options.loose) {
- return looseBooleans.includes(str.toLowerCase());
- }
- return strictBooleans.includes(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],56:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isBtcAddress;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- // supports Bech32 addresses
- var bech32 = /^(bc1)[a-z0-9]{25,39}$/;
- var base58 = /^(1|3)[A-HJ-NP-Za-km-z1-9]{25,39}$/;
- function isBtcAddress(str) {
- (0, _assertString.default)(str); // check for bech32
- if (str.startsWith('bc1')) {
- return bech32.test(str);
- }
- return base58.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],57:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isByteLength;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: 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); }
- /* eslint-disable prefer-rest-params */
- function isByteLength(str, options) {
- (0, _assertString.default)(str);
- var min;
- var max;
- if (_typeof(options) === 'object') {
- min = options.min || 0;
- max = options.max;
- } else {
- // backwards compatibility: isByteLength(str, min [, max])
- min = arguments[1];
- max = arguments[2];
- }
- var len = encodeURI(str).split(/%..|./).length - 1;
- return len >= min && (typeof max === 'undefined' || len <= max);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],58:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isCreditCard;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /* eslint-disable max-len */
- var creditCard = /^(?:4[0-9]{12}(?:[0-9]{3,6})?|5[1-5][0-9]{14}|(222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|6(?:011|5[0-9][0-9])[0-9]{12,15}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11}|6[27][0-9]{14}|^(81[0-9]{14,17}))$/;
- /* eslint-enable max-len */
- function isCreditCard(str) {
- (0, _assertString.default)(str);
- var sanitized = str.replace(/[- ]+/g, '');
- if (!creditCard.test(sanitized)) {
- return false;
- }
- var sum = 0;
- var digit;
- var tmpNum;
- var shouldDouble;
- for (var i = sanitized.length - 1; i >= 0; i--) {
- digit = sanitized.substring(i, i + 1);
- tmpNum = parseInt(digit, 10);
- if (shouldDouble) {
- tmpNum *= 2;
- if (tmpNum >= 10) {
- sum += tmpNum % 10 + 1;
- } else {
- sum += tmpNum;
- }
- } else {
- sum += tmpNum;
- }
- shouldDouble = !shouldDouble;
- }
- return !!(sum % 10 === 0 ? sanitized : false);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],59:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isCurrency;
- var _merge = _interopRequireDefault(require("./util/merge"));
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function currencyRegex(options) {
- var decimal_digits = "\\d{".concat(options.digits_after_decimal[0], "}");
- options.digits_after_decimal.forEach(function (digit, index) {
- if (index !== 0) decimal_digits = "".concat(decimal_digits, "|\\d{").concat(digit, "}");
- });
- var symbol = "(".concat(options.symbol.replace(/\W/, function (m) {
- return "\\".concat(m);
- }), ")").concat(options.require_symbol ? '' : '?'),
- negative = '-?',
- whole_dollar_amount_without_sep = '[1-9]\\d*',
- whole_dollar_amount_with_sep = "[1-9]\\d{0,2}(\\".concat(options.thousands_separator, "\\d{3})*"),
- valid_whole_dollar_amounts = ['0', whole_dollar_amount_without_sep, whole_dollar_amount_with_sep],
- whole_dollar_amount = "(".concat(valid_whole_dollar_amounts.join('|'), ")?"),
- decimal_amount = "(\\".concat(options.decimal_separator, "(").concat(decimal_digits, "))").concat(options.require_decimal ? '' : '?');
- var pattern = whole_dollar_amount + (options.allow_decimal || options.require_decimal ? decimal_amount : ''); // default is negative sign before symbol, but there are two other options (besides parens)
- if (options.allow_negatives && !options.parens_for_negatives) {
- if (options.negative_sign_after_digits) {
- pattern += negative;
- } else if (options.negative_sign_before_digits) {
- pattern = negative + pattern;
- }
- } // South African Rand, for example, uses R 123 (space) and R-123 (no space)
- if (options.allow_negative_sign_placeholder) {
- pattern = "( (?!\\-))?".concat(pattern);
- } else if (options.allow_space_after_symbol) {
- pattern = " ?".concat(pattern);
- } else if (options.allow_space_after_digits) {
- pattern += '( (?!$))?';
- }
- if (options.symbol_after_digits) {
- pattern += symbol;
- } else {
- pattern = symbol + pattern;
- }
- if (options.allow_negatives) {
- if (options.parens_for_negatives) {
- pattern = "(\\(".concat(pattern, "\\)|").concat(pattern, ")");
- } else if (!(options.negative_sign_before_digits || options.negative_sign_after_digits)) {
- pattern = negative + pattern;
- }
- } // ensure there's a dollar and/or decimal amount, and that
- // it doesn't start with a space or a negative sign followed by a space
- return new RegExp("^(?!-? )(?=.*\\d)".concat(pattern, "$"));
- }
- var default_currency_options = {
- symbol: '$',
- require_symbol: false,
- allow_space_after_symbol: false,
- symbol_after_digits: false,
- allow_negatives: true,
- parens_for_negatives: false,
- negative_sign_before_digits: false,
- negative_sign_after_digits: false,
- allow_negative_sign_placeholder: false,
- thousands_separator: ',',
- decimal_separator: '.',
- allow_decimal: true,
- require_decimal: false,
- digits_after_decimal: [2],
- allow_space_after_digits: false
- };
- function isCurrency(str, options) {
- (0, _assertString.default)(str);
- options = (0, _merge.default)(options, default_currency_options);
- return currencyRegex(options).test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135,"./util/merge":137}],60:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isDataURI;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var validMediaType = /^[a-z]+\/[a-z0-9\-\+]+$/i;
- var validAttribute = /^[a-z\-]+=[a-z0-9\-]+$/i;
- var validData = /^[a-z0-9!\$&'\(\)\*\+,;=\-\._~:@\/\?%\s]*$/i;
- function isDataURI(str) {
- (0, _assertString.default)(str);
- var data = str.split(',');
- if (data.length < 2) {
- return false;
- }
- var attributes = data.shift().trim().split(';');
- var schemeAndMediaType = attributes.shift();
- if (schemeAndMediaType.substr(0, 5) !== 'data:') {
- return false;
- }
- var mediaType = schemeAndMediaType.substr(5);
- if (mediaType !== '' && !validMediaType.test(mediaType)) {
- return false;
- }
- for (var i = 0; i < attributes.length; i++) {
- if (!(i === attributes.length - 1 && attributes[i].toLowerCase() === 'base64') && !validAttribute.test(attributes[i])) {
- return false;
- }
- }
- for (var _i = 0; _i < data.length; _i++) {
- if (!validData.test(data[_i])) {
- return false;
- }
- }
- return true;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],61:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isDate;
- var _merge = _interopRequireDefault(require("./util/merge"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: 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 _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 _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(_e2) { throw _e2; }, 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(_e3) { didErr = true; err = _e3; }, 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; }
- var default_date_options = {
- format: 'YYYY/MM/DD',
- delimiters: ['/', '-'],
- strictMode: false
- };
- function isValidFormat(format) {
- return /(^(y{4}|y{2})[.\/-](m{1,2})[.\/-](d{1,2})$)|(^(m{1,2})[.\/-](d{1,2})[.\/-]((y{4}|y{2})$))|(^(d{1,2})[.\/-](m{1,2})[.\/-]((y{4}|y{2})$))/gi.test(format);
- }
- function zip(date, format) {
- var zippedArr = [],
- len = Math.min(date.length, format.length);
- for (var i = 0; i < len; i++) {
- zippedArr.push([date[i], format[i]]);
- }
- return zippedArr;
- }
- function isDate(input, options) {
- if (typeof options === 'string') {
- // Allow backward compatbility for old format isDate(input [, format])
- options = (0, _merge.default)({
- format: options
- }, default_date_options);
- } else {
- options = (0, _merge.default)(options, default_date_options);
- }
- if (typeof input === 'string' && isValidFormat(options.format)) {
- var formatDelimiter = options.delimiters.find(function (delimiter) {
- return options.format.indexOf(delimiter) !== -1;
- });
- var dateDelimiter = options.strictMode ? formatDelimiter : options.delimiters.find(function (delimiter) {
- return input.indexOf(delimiter) !== -1;
- });
- var dateAndFormat = zip(input.split(dateDelimiter), options.format.toLowerCase().split(formatDelimiter));
- var dateObj = {};
- var _iterator = _createForOfIteratorHelper(dateAndFormat),
- _step;
- try {
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
- var _step$value = _slicedToArray(_step.value, 2),
- dateWord = _step$value[0],
- formatWord = _step$value[1];
- if (dateWord.length !== formatWord.length) {
- return false;
- }
- dateObj[formatWord.charAt(0)] = dateWord;
- }
- } catch (err) {
- _iterator.e(err);
- } finally {
- _iterator.f();
- }
- return new Date("".concat(dateObj.m, "/").concat(dateObj.d, "/").concat(dateObj.y)).getDate() === +dateObj.d;
- }
- if (!options.strictMode) {
- return Object.prototype.toString.call(input) === '[object Date]' && isFinite(input);
- }
- return false;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/merge":137}],62:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isDecimal;
- var _merge = _interopRequireDefault(require("./util/merge"));
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _includes = _interopRequireDefault(require("./util/includes"));
- var _alpha = require("./alpha");
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function decimalRegExp(options) {
- var regExp = new RegExp("^[-+]?([0-9]+)?(\\".concat(_alpha.decimal[options.locale], "[0-9]{").concat(options.decimal_digits, "})").concat(options.force_decimal ? '' : '?', "$"));
- return regExp;
- }
- var default_decimal_options = {
- force_decimal: false,
- decimal_digits: '1,',
- locale: 'en-US'
- };
- var blacklist = ['', '-', '+'];
- function isDecimal(str, options) {
- (0, _assertString.default)(str);
- options = (0, _merge.default)(options, default_decimal_options);
- if (options.locale in _alpha.decimal) {
- return !(0, _includes.default)(blacklist, str.replace(/ /g, '')) && decimalRegExp(options).test(str);
- }
- throw new Error("Invalid locale '".concat(options.locale, "'"));
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./alpha":41,"./util/assertString":135,"./util/includes":136,"./util/merge":137}],63:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isDivisibleBy;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _toFloat = _interopRequireDefault(require("./toFloat"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function isDivisibleBy(str, num) {
- (0, _assertString.default)(str);
- return (0, _toFloat.default)(str) % parseInt(num, 10) === 0;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./toFloat":130,"./util/assertString":135}],64:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isEAN;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /**
- * The most commonly used EAN standard is
- * the thirteen-digit EAN-13, while the
- * less commonly used 8-digit EAN-8 barcode was
- * introduced for use on small packages.
- * Also EAN/UCC-14 is used for Grouping of individual
- * trade items above unit level(Intermediate, Carton or Pallet).
- * For more info about EAN-14 checkout: https://www.gtin.info/itf-14-barcodes/
- * EAN consists of:
- * GS1 prefix, manufacturer code, product code and check digit
- * Reference: https://en.wikipedia.org/wiki/International_Article_Number
- * Reference: https://www.gtin.info/
- */
- /**
- * Define EAN Lenghts; 8 for EAN-8; 13 for EAN-13; 14 for EAN-14
- * and Regular Expression for valid EANs (EAN-8, EAN-13, EAN-14),
- * with exact numberic matching of 8 or 13 or 14 digits [0-9]
- */
- var LENGTH_EAN_8 = 8;
- var LENGTH_EAN_14 = 14;
- var validEanRegex = /^(\d{8}|\d{13}|\d{14})$/;
- /**
- * Get position weight given:
- * EAN length and digit index/position
- *
- * @param {number} length
- * @param {number} index
- * @return {number}
- */
- function getPositionWeightThroughLengthAndIndex(length, index) {
- if (length === LENGTH_EAN_8 || length === LENGTH_EAN_14) {
- return index % 2 === 0 ? 3 : 1;
- }
- return index % 2 === 0 ? 1 : 3;
- }
- /**
- * Calculate EAN Check Digit
- * Reference: https://en.wikipedia.org/wiki/International_Article_Number#Calculation_of_checksum_digit
- *
- * @param {string} ean
- * @return {number}
- */
- function calculateCheckDigit(ean) {
- var checksum = ean.slice(0, -1).split('').map(function (char, index) {
- return Number(char) * getPositionWeightThroughLengthAndIndex(ean.length, index);
- }).reduce(function (acc, partialSum) {
- return acc + partialSum;
- }, 0);
- var remainder = 10 - checksum % 10;
- return remainder < 10 ? remainder : 0;
- }
- /**
- * Check if string is valid EAN:
- * Matches EAN-8/EAN-13/EAN-14 regex
- * Has valid check digit.
- *
- * @param {string} str
- * @return {boolean}
- */
- function isEAN(str) {
- (0, _assertString.default)(str);
- var actualCheckDigit = Number(str.slice(-1));
- return validEanRegex.test(str) && actualCheckDigit === calculateCheckDigit(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],65:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isEmail;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _merge = _interopRequireDefault(require("./util/merge"));
- var _isByteLength = _interopRequireDefault(require("./isByteLength"));
- var _isFQDN = _interopRequireDefault(require("./isFQDN"));
- var _isIP = _interopRequireDefault(require("./isIP"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var default_email_options = {
- allow_display_name: false,
- require_display_name: false,
- allow_utf8_local_part: true,
- require_tld: true,
- blacklisted_chars: '',
- ignore_max_length: false,
- host_blacklist: []
- };
- /* eslint-disable max-len */
- /* eslint-disable no-control-regex */
- var splitNameAddress = /^([^\x00-\x1F\x7F-\x9F\cX]+)</i;
- var emailUserPart = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i;
- var gmailUserPart = /^[a-z\d]+$/;
- var quotedEmailUser = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i;
- var emailUserUtf8Part = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i;
- var quotedEmailUserUtf8 = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i;
- var defaultMaxEmailLength = 254;
- /* eslint-enable max-len */
- /* eslint-enable no-control-regex */
- /**
- * Validate display name according to the RFC2822: https://tools.ietf.org/html/rfc2822#appendix-A.1.2
- * @param {String} display_name
- */
- function validateDisplayName(display_name) {
- var display_name_without_quotes = display_name.replace(/^"(.+)"$/, '$1'); // display name with only spaces is not valid
- if (!display_name_without_quotes.trim()) {
- return false;
- } // check whether display name contains illegal character
- var contains_illegal = /[\.";<>]/.test(display_name_without_quotes);
- if (contains_illegal) {
- // if contains illegal characters,
- // must to be enclosed in double-quotes, otherwise it's not a valid display name
- if (display_name_without_quotes === display_name) {
- return false;
- } // the quotes in display name must start with character symbol \
- var all_start_with_back_slash = display_name_without_quotes.split('"').length === display_name_without_quotes.split('\\"').length;
- if (!all_start_with_back_slash) {
- return false;
- }
- }
- return true;
- }
- function isEmail(str, options) {
- (0, _assertString.default)(str);
- options = (0, _merge.default)(options, default_email_options);
- if (options.require_display_name || options.allow_display_name) {
- var display_email = str.match(splitNameAddress);
- if (display_email) {
- var display_name = display_email[1]; // Remove display name and angle brackets to get email address
- // Can be done in the regex but will introduce a ReDOS (See #1597 for more info)
- str = str.replace(display_name, '').replace(/(^<|>$)/g, ''); // sometimes need to trim the last space to get the display name
- // because there may be a space between display name and email address
- // eg. myname <address@gmail.com>
- // the display name is `myname` instead of `myname `, so need to trim the last space
- if (display_name.endsWith(' ')) {
- display_name = display_name.substr(0, display_name.length - 1);
- }
- if (!validateDisplayName(display_name)) {
- return false;
- }
- } else if (options.require_display_name) {
- return false;
- }
- }
- if (!options.ignore_max_length && str.length > defaultMaxEmailLength) {
- return false;
- }
- var parts = str.split('@');
- var domain = parts.pop();
- var lower_domain = domain.toLowerCase();
- if (options.host_blacklist.includes(lower_domain)) {
- return false;
- }
- var user = parts.join('@');
- if (options.domain_specific_validation && (lower_domain === 'gmail.com' || lower_domain === 'googlemail.com')) {
- /*
- Previously we removed dots for gmail addresses before validating.
- This was removed because it allows `multiple..dots@gmail.com`
- to be reported as valid, but it is not.
- Gmail only normalizes single dots, removing them from here is pointless,
- should be done in normalizeEmail
- */
- user = user.toLowerCase(); // Removing sub-address from username before gmail validation
- var username = user.split('+')[0]; // Dots are not included in gmail length restriction
- if (!(0, _isByteLength.default)(username.replace(/\./g, ''), {
- min: 6,
- max: 30
- })) {
- return false;
- }
- var _user_parts = username.split('.');
- for (var i = 0; i < _user_parts.length; i++) {
- if (!gmailUserPart.test(_user_parts[i])) {
- return false;
- }
- }
- }
- if (options.ignore_max_length === false && (!(0, _isByteLength.default)(user, {
- max: 64
- }) || !(0, _isByteLength.default)(domain, {
- max: 254
- }))) {
- return false;
- }
- if (!(0, _isFQDN.default)(domain, {
- require_tld: options.require_tld
- })) {
- if (!options.allow_ip_domain) {
- return false;
- }
- if (!(0, _isIP.default)(domain)) {
- if (!domain.startsWith('[') || !domain.endsWith(']')) {
- return false;
- }
- var noBracketdomain = domain.substr(1, domain.length - 2);
- if (noBracketdomain.length === 0 || !(0, _isIP.default)(noBracketdomain)) {
- return false;
- }
- }
- }
- if (user[0] === '"') {
- user = user.slice(1, user.length - 1);
- return options.allow_utf8_local_part ? quotedEmailUserUtf8.test(user) : quotedEmailUser.test(user);
- }
- var pattern = options.allow_utf8_local_part ? emailUserUtf8Part : emailUserPart;
- var user_parts = user.split('.');
- for (var _i = 0; _i < user_parts.length; _i++) {
- if (!pattern.test(user_parts[_i])) {
- return false;
- }
- }
- if (options.blacklisted_chars) {
- if (user.search(new RegExp("[".concat(options.blacklisted_chars, "]+"), 'g')) !== -1) return false;
- }
- return true;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./isByteLength":57,"./isFQDN":68,"./isIP":78,"./util/assertString":135,"./util/merge":137}],66:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isEmpty;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _merge = _interopRequireDefault(require("./util/merge"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var default_is_empty_options = {
- ignore_whitespace: false
- };
- function isEmpty(str, options) {
- (0, _assertString.default)(str);
- options = (0, _merge.default)(options, default_is_empty_options);
- return (options.ignore_whitespace ? str.trim().length : str.length) === 0;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135,"./util/merge":137}],67:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isEthereumAddress;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var eth = /^(0x)[0-9a-f]{40}$/i;
- function isEthereumAddress(str) {
- (0, _assertString.default)(str);
- return eth.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],68:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isFQDN;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _merge = _interopRequireDefault(require("./util/merge"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var default_fqdn_options = {
- require_tld: true,
- allow_underscores: false,
- allow_trailing_dot: false,
- allow_numeric_tld: false,
- allow_wildcard: false
- };
- function isFQDN(str, options) {
- (0, _assertString.default)(str);
- options = (0, _merge.default)(options, default_fqdn_options);
- /* Remove the optional trailing dot before checking validity */
- if (options.allow_trailing_dot && str[str.length - 1] === '.') {
- str = str.substring(0, str.length - 1);
- }
- /* Remove the optional wildcard before checking validity */
- if (options.allow_wildcard === true && str.indexOf('*.') === 0) {
- str = str.substring(2);
- }
- var parts = str.split('.');
- var tld = parts[parts.length - 1];
- if (options.require_tld) {
- // disallow fqdns without tld
- if (parts.length < 2) {
- return false;
- }
- if (!/^([a-z\u00A1-\u00A8\u00AA-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) {
- return false;
- } // disallow spaces
- if (/\s/.test(tld)) {
- return false;
- }
- } // reject numeric TLDs
- if (!options.allow_numeric_tld && /^\d+$/.test(tld)) {
- return false;
- }
- return parts.every(function (part) {
- if (part.length > 63) {
- return false;
- }
- if (!/^[a-z_\u00a1-\uffff0-9-]+$/i.test(part)) {
- return false;
- } // disallow full-width chars
- if (/[\uff01-\uff5e]/.test(part)) {
- return false;
- } // disallow parts starting or ending with hyphen
- if (/^-|-$/.test(part)) {
- return false;
- }
- if (!options.allow_underscores && /_/.test(part)) {
- return false;
- }
- return true;
- });
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135,"./util/merge":137}],69:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isFloat;
- exports.locales = void 0;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _alpha = require("./alpha");
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function isFloat(str, options) {
- (0, _assertString.default)(str);
- options = options || {};
- var float = new RegExp("^(?:[-+])?(?:[0-9]+)?(?:\\".concat(options.locale ? _alpha.decimal[options.locale] : '.', "[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$"));
- if (str === '' || str === '.' || str === '-' || str === '+') {
- return false;
- }
- var value = parseFloat(str.replace(',', '.'));
- return float.test(str) && (!options.hasOwnProperty('min') || value >= options.min) && (!options.hasOwnProperty('max') || value <= options.max) && (!options.hasOwnProperty('lt') || value < options.lt) && (!options.hasOwnProperty('gt') || value > options.gt);
- }
- var locales = Object.keys(_alpha.decimal);
- exports.locales = locales;
- },{"./alpha":41,"./util/assertString":135}],70:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isFullWidth;
- exports.fullWidth = void 0;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var fullWidth = /[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/;
- exports.fullWidth = fullWidth;
- function isFullWidth(str) {
- (0, _assertString.default)(str);
- return fullWidth.test(str);
- }
- },{"./util/assertString":135}],71:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isHSL;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var hslComma = /^hsla?\(((\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?))(deg|grad|rad|turn)?(,(\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?)%){2}(,((\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?)%?))?\)$/i;
- var hslSpace = /^hsla?\(((\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?))(deg|grad|rad|turn)?(\s(\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?)%){2}\s?(\/\s((\+|\-)?([0-9]+(\.[0-9]+)?(e(\+|\-)?[0-9]+)?|\.[0-9]+(e(\+|\-)?[0-9]+)?)%?)\s?)?\)$/i;
- function isHSL(str) {
- (0, _assertString.default)(str); // Strip duplicate spaces before calling the validation regex (See #1598 for more info)
- var strippedStr = str.replace(/\s+/g, ' ').replace(/\s?(hsla?\(|\)|,)\s?/ig, '$1');
- if (strippedStr.indexOf(',') !== -1) {
- return hslComma.test(strippedStr);
- }
- return hslSpace.test(strippedStr);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],72:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isHalfWidth;
- exports.halfWidth = void 0;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var halfWidth = /[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/;
- exports.halfWidth = halfWidth;
- function isHalfWidth(str) {
- (0, _assertString.default)(str);
- return halfWidth.test(str);
- }
- },{"./util/assertString":135}],73:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isHash;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var lengths = {
- md5: 32,
- md4: 32,
- sha1: 40,
- sha256: 64,
- sha384: 96,
- sha512: 128,
- ripemd128: 32,
- ripemd160: 40,
- tiger128: 32,
- tiger160: 40,
- tiger192: 48,
- crc32: 8,
- crc32b: 8
- };
- function isHash(str, algorithm) {
- (0, _assertString.default)(str);
- var hash = new RegExp("^[a-fA-F0-9]{".concat(lengths[algorithm], "}$"));
- return hash.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],74:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isHexColor;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var hexcolor = /^#?([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$/i;
- function isHexColor(str) {
- (0, _assertString.default)(str);
- return hexcolor.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],75:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isHexadecimal;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var hexadecimal = /^(0x|0h)?[0-9A-F]+$/i;
- function isHexadecimal(str) {
- (0, _assertString.default)(str);
- return hexadecimal.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],76:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isIBAN;
- exports.locales = void 0;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /**
- * List of country codes with
- * corresponding IBAN regular expression
- * Reference: https://en.wikipedia.org/wiki/International_Bank_Account_Number
- */
- var ibanRegexThroughCountryCode = {
- AD: /^(AD[0-9]{2})\d{8}[A-Z0-9]{12}$/,
- AE: /^(AE[0-9]{2})\d{3}\d{16}$/,
- AL: /^(AL[0-9]{2})\d{8}[A-Z0-9]{16}$/,
- AT: /^(AT[0-9]{2})\d{16}$/,
- AZ: /^(AZ[0-9]{2})[A-Z0-9]{4}\d{20}$/,
- BA: /^(BA[0-9]{2})\d{16}$/,
- BE: /^(BE[0-9]{2})\d{12}$/,
- BG: /^(BG[0-9]{2})[A-Z]{4}\d{6}[A-Z0-9]{8}$/,
- BH: /^(BH[0-9]{2})[A-Z]{4}[A-Z0-9]{14}$/,
- BR: /^(BR[0-9]{2})\d{23}[A-Z]{1}[A-Z0-9]{1}$/,
- BY: /^(BY[0-9]{2})[A-Z0-9]{4}\d{20}$/,
- CH: /^(CH[0-9]{2})\d{5}[A-Z0-9]{12}$/,
- CR: /^(CR[0-9]{2})\d{18}$/,
- CY: /^(CY[0-9]{2})\d{8}[A-Z0-9]{16}$/,
- CZ: /^(CZ[0-9]{2})\d{20}$/,
- DE: /^(DE[0-9]{2})\d{18}$/,
- DK: /^(DK[0-9]{2})\d{14}$/,
- DO: /^(DO[0-9]{2})[A-Z]{4}\d{20}$/,
- EE: /^(EE[0-9]{2})\d{16}$/,
- EG: /^(EG[0-9]{2})\d{25}$/,
- ES: /^(ES[0-9]{2})\d{20}$/,
- FI: /^(FI[0-9]{2})\d{14}$/,
- FO: /^(FO[0-9]{2})\d{14}$/,
- FR: /^(FR[0-9]{2})\d{10}[A-Z0-9]{11}\d{2}$/,
- GB: /^(GB[0-9]{2})[A-Z]{4}\d{14}$/,
- GE: /^(GE[0-9]{2})[A-Z0-9]{2}\d{16}$/,
- GI: /^(GI[0-9]{2})[A-Z]{4}[A-Z0-9]{15}$/,
- GL: /^(GL[0-9]{2})\d{14}$/,
- GR: /^(GR[0-9]{2})\d{7}[A-Z0-9]{16}$/,
- GT: /^(GT[0-9]{2})[A-Z0-9]{4}[A-Z0-9]{20}$/,
- HR: /^(HR[0-9]{2})\d{17}$/,
- HU: /^(HU[0-9]{2})\d{24}$/,
- IE: /^(IE[0-9]{2})[A-Z0-9]{4}\d{14}$/,
- IL: /^(IL[0-9]{2})\d{19}$/,
- IQ: /^(IQ[0-9]{2})[A-Z]{4}\d{15}$/,
- IR: /^(IR[0-9]{2})0\d{2}0\d{18}$/,
- IS: /^(IS[0-9]{2})\d{22}$/,
- IT: /^(IT[0-9]{2})[A-Z]{1}\d{10}[A-Z0-9]{12}$/,
- JO: /^(JO[0-9]{2})[A-Z]{4}\d{22}$/,
- KW: /^(KW[0-9]{2})[A-Z]{4}[A-Z0-9]{22}$/,
- KZ: /^(KZ[0-9]{2})\d{3}[A-Z0-9]{13}$/,
- LB: /^(LB[0-9]{2})\d{4}[A-Z0-9]{20}$/,
- LC: /^(LC[0-9]{2})[A-Z]{4}[A-Z0-9]{24}$/,
- LI: /^(LI[0-9]{2})\d{5}[A-Z0-9]{12}$/,
- LT: /^(LT[0-9]{2})\d{16}$/,
- LU: /^(LU[0-9]{2})\d{3}[A-Z0-9]{13}$/,
- LV: /^(LV[0-9]{2})[A-Z]{4}[A-Z0-9]{13}$/,
- MC: /^(MC[0-9]{2})\d{10}[A-Z0-9]{11}\d{2}$/,
- MD: /^(MD[0-9]{2})[A-Z0-9]{20}$/,
- ME: /^(ME[0-9]{2})\d{18}$/,
- MK: /^(MK[0-9]{2})\d{3}[A-Z0-9]{10}\d{2}$/,
- MR: /^(MR[0-9]{2})\d{23}$/,
- MT: /^(MT[0-9]{2})[A-Z]{4}\d{5}[A-Z0-9]{18}$/,
- MU: /^(MU[0-9]{2})[A-Z]{4}\d{19}[A-Z]{3}$/,
- MZ: /^(MZ[0-9]{2})\d{21}$/,
- NL: /^(NL[0-9]{2})[A-Z]{4}\d{10}$/,
- NO: /^(NO[0-9]{2})\d{11}$/,
- PK: /^(PK[0-9]{2})[A-Z0-9]{4}\d{16}$/,
- PL: /^(PL[0-9]{2})\d{24}$/,
- PS: /^(PS[0-9]{2})[A-Z0-9]{4}\d{21}$/,
- PT: /^(PT[0-9]{2})\d{21}$/,
- QA: /^(QA[0-9]{2})[A-Z]{4}[A-Z0-9]{21}$/,
- RO: /^(RO[0-9]{2})[A-Z]{4}[A-Z0-9]{16}$/,
- RS: /^(RS[0-9]{2})\d{18}$/,
- SA: /^(SA[0-9]{2})\d{2}[A-Z0-9]{18}$/,
- SC: /^(SC[0-9]{2})[A-Z]{4}\d{20}[A-Z]{3}$/,
- SE: /^(SE[0-9]{2})\d{20}$/,
- SI: /^(SI[0-9]{2})\d{15}$/,
- SK: /^(SK[0-9]{2})\d{20}$/,
- SM: /^(SM[0-9]{2})[A-Z]{1}\d{10}[A-Z0-9]{12}$/,
- SV: /^(SV[0-9]{2})[A-Z0-9]{4}\d{20}$/,
- TL: /^(TL[0-9]{2})\d{19}$/,
- TN: /^(TN[0-9]{2})\d{20}$/,
- TR: /^(TR[0-9]{2})\d{5}[A-Z0-9]{17}$/,
- UA: /^(UA[0-9]{2})\d{6}[A-Z0-9]{19}$/,
- VA: /^(VA[0-9]{2})\d{18}$/,
- VG: /^(VG[0-9]{2})[A-Z0-9]{4}\d{16}$/,
- XK: /^(XK[0-9]{2})\d{16}$/
- };
- /**
- * Check whether string has correct universal IBAN format
- * The IBAN consists of up to 34 alphanumeric characters, as follows:
- * Country Code using ISO 3166-1 alpha-2, two letters
- * check digits, two digits and
- * Basic Bank Account Number (BBAN), up to 30 alphanumeric characters.
- * NOTE: Permitted IBAN characters are: digits [0-9] and the 26 latin alphabetic [A-Z]
- *
- * @param {string} str - string under validation
- * @return {boolean}
- */
- function hasValidIbanFormat(str) {
- // Strip white spaces and hyphens
- var strippedStr = str.replace(/[\s\-]+/gi, '').toUpperCase();
- var isoCountryCode = strippedStr.slice(0, 2).toUpperCase();
- return isoCountryCode in ibanRegexThroughCountryCode && ibanRegexThroughCountryCode[isoCountryCode].test(strippedStr);
- }
- /**
- * Check whether string has valid IBAN Checksum
- * by performing basic mod-97 operation and
- * the remainder should equal 1
- * -- Start by rearranging the IBAN by moving the four initial characters to the end of the string
- * -- Replace each letter in the string with two digits, A -> 10, B = 11, Z = 35
- * -- Interpret the string as a decimal integer and
- * -- compute the remainder on division by 97 (mod 97)
- * Reference: https://en.wikipedia.org/wiki/International_Bank_Account_Number
- *
- * @param {string} str
- * @return {boolean}
- */
- function hasValidIbanChecksum(str) {
- var strippedStr = str.replace(/[^A-Z0-9]+/gi, '').toUpperCase(); // Keep only digits and A-Z latin alphabetic
- var rearranged = strippedStr.slice(4) + strippedStr.slice(0, 4);
- var alphaCapsReplacedWithDigits = rearranged.replace(/[A-Z]/g, function (char) {
- return char.charCodeAt(0) - 55;
- });
- var remainder = alphaCapsReplacedWithDigits.match(/\d{1,7}/g).reduce(function (acc, value) {
- return Number(acc + value) % 97;
- }, '');
- return remainder === 1;
- }
- function isIBAN(str) {
- (0, _assertString.default)(str);
- return hasValidIbanFormat(str) && hasValidIbanChecksum(str);
- }
- var locales = Object.keys(ibanRegexThroughCountryCode);
- exports.locales = locales;
- },{"./util/assertString":135}],77:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isIMEI;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var imeiRegexWithoutHypens = /^[0-9]{15}$/;
- var imeiRegexWithHypens = /^\d{2}-\d{6}-\d{6}-\d{1}$/;
- function isIMEI(str, options) {
- (0, _assertString.default)(str);
- options = options || {}; // default regex for checking imei is the one without hyphens
- var imeiRegex = imeiRegexWithoutHypens;
- if (options.allow_hyphens) {
- imeiRegex = imeiRegexWithHypens;
- }
- if (!imeiRegex.test(str)) {
- return false;
- }
- str = str.replace(/-/g, '');
- var sum = 0,
- mul = 2,
- l = 14;
- for (var i = 0; i < l; i++) {
- var digit = str.substring(l - i - 1, l - i);
- var tp = parseInt(digit, 10) * mul;
- if (tp >= 10) {
- sum += tp % 10 + 1;
- } else {
- sum += tp;
- }
- if (mul === 1) {
- mul += 1;
- } else {
- mul -= 1;
- }
- }
- var chk = (10 - sum % 10) % 10;
- if (chk !== parseInt(str.substring(14, 15), 10)) {
- return false;
- }
- return true;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],78:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isIP;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /**
- 11.3. Examples
- The following addresses
- fe80::1234 (on the 1st link of the node)
- ff02::5678 (on the 5th link of the node)
- ff08::9abc (on the 10th organization of the node)
- would be represented as follows:
- fe80::1234%1
- ff02::5678%5
- ff08::9abc%10
- (Here we assume a natural translation from a zone index to the
- <zone_id> part, where the Nth zone of any scope is translated into
- "N".)
- If we use interface names as <zone_id>, those addresses could also be
- represented as follows:
- fe80::1234%ne0
- ff02::5678%pvc1.3
- ff08::9abc%interface10
- where the interface "ne0" belongs to the 1st link, "pvc1.3" belongs
- to the 5th link, and "interface10" belongs to the 10th organization.
- * * */
- var IPv4SegmentFormat = '(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
- var IPv4AddressFormat = "(".concat(IPv4SegmentFormat, "[.]){3}").concat(IPv4SegmentFormat);
- var IPv4AddressRegExp = new RegExp("^".concat(IPv4AddressFormat, "$"));
- var IPv6SegmentFormat = '(?:[0-9a-fA-F]{1,4})';
- var IPv6AddressRegExp = new RegExp('^(' + "(?:".concat(IPv6SegmentFormat, ":){7}(?:").concat(IPv6SegmentFormat, "|:)|") + "(?:".concat(IPv6SegmentFormat, ":){6}(?:").concat(IPv4AddressFormat, "|:").concat(IPv6SegmentFormat, "|:)|") + "(?:".concat(IPv6SegmentFormat, ":){5}(?::").concat(IPv4AddressFormat, "|(:").concat(IPv6SegmentFormat, "){1,2}|:)|") + "(?:".concat(IPv6SegmentFormat, ":){4}(?:(:").concat(IPv6SegmentFormat, "){0,1}:").concat(IPv4AddressFormat, "|(:").concat(IPv6SegmentFormat, "){1,3}|:)|") + "(?:".concat(IPv6SegmentFormat, ":){3}(?:(:").concat(IPv6SegmentFormat, "){0,2}:").concat(IPv4AddressFormat, "|(:").concat(IPv6SegmentFormat, "){1,4}|:)|") + "(?:".concat(IPv6SegmentFormat, ":){2}(?:(:").concat(IPv6SegmentFormat, "){0,3}:").concat(IPv4AddressFormat, "|(:").concat(IPv6SegmentFormat, "){1,5}|:)|") + "(?:".concat(IPv6SegmentFormat, ":){1}(?:(:").concat(IPv6SegmentFormat, "){0,4}:").concat(IPv4AddressFormat, "|(:").concat(IPv6SegmentFormat, "){1,6}|:)|") + "(?::((?::".concat(IPv6SegmentFormat, "){0,5}:").concat(IPv4AddressFormat, "|(?::").concat(IPv6SegmentFormat, "){1,7}|:))") + ')(%[0-9a-zA-Z-.:]{1,})?$');
- function isIP(str) {
- var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
- (0, _assertString.default)(str);
- version = String(version);
- if (!version) {
- return isIP(str, 4) || isIP(str, 6);
- }
- if (version === '4') {
- if (!IPv4AddressRegExp.test(str)) {
- return false;
- }
- var parts = str.split('.').sort(function (a, b) {
- return a - b;
- });
- return parts[3] <= 255;
- }
- if (version === '6') {
- return !!IPv6AddressRegExp.test(str);
- }
- return false;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],79:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isIPRange;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _isIP = _interopRequireDefault(require("./isIP"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var subnetMaybe = /^\d{1,3}$/;
- var v4Subnet = 32;
- var v6Subnet = 128;
- function isIPRange(str) {
- var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
- (0, _assertString.default)(str);
- var parts = str.split('/'); // parts[0] -> ip, parts[1] -> subnet
- if (parts.length !== 2) {
- return false;
- }
- if (!subnetMaybe.test(parts[1])) {
- return false;
- } // Disallow preceding 0 i.e. 01, 02, ...
- if (parts[1].length > 1 && parts[1].startsWith('0')) {
- return false;
- }
- var isValidIP = (0, _isIP.default)(parts[0], version);
- if (!isValidIP) {
- return false;
- } // Define valid subnet according to IP's version
- var expectedSubnet = null;
- switch (String(version)) {
- case '4':
- expectedSubnet = v4Subnet;
- break;
- case '6':
- expectedSubnet = v6Subnet;
- break;
- default:
- expectedSubnet = (0, _isIP.default)(parts[0], '6') ? v6Subnet : v4Subnet;
- }
- return parts[1] <= expectedSubnet && parts[1] >= 0;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./isIP":78,"./util/assertString":135}],80:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isISBN;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var isbn10Maybe = /^(?:[0-9]{9}X|[0-9]{10})$/;
- var isbn13Maybe = /^(?:[0-9]{13})$/;
- var factor = [1, 3];
- function isISBN(str) {
- var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
- (0, _assertString.default)(str);
- version = String(version);
- if (!version) {
- return isISBN(str, 10) || isISBN(str, 13);
- }
- var sanitized = str.replace(/[\s-]+/g, '');
- var checksum = 0;
- var i;
- if (version === '10') {
- if (!isbn10Maybe.test(sanitized)) {
- return false;
- }
- for (i = 0; i < 9; i++) {
- checksum += (i + 1) * sanitized.charAt(i);
- }
- if (sanitized.charAt(9) === 'X') {
- checksum += 10 * 10;
- } else {
- checksum += 10 * sanitized.charAt(9);
- }
- if (checksum % 11 === 0) {
- return !!sanitized;
- }
- } else if (version === '13') {
- if (!isbn13Maybe.test(sanitized)) {
- return false;
- }
- for (i = 0; i < 12; i++) {
- checksum += factor[i % 2] * sanitized.charAt(i);
- }
- if (sanitized.charAt(12) - (10 - checksum % 10) % 10 === 0) {
- return !!sanitized;
- }
- }
- return false;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],81:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isISIN;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var isin = /^[A-Z]{2}[0-9A-Z]{9}[0-9]$/; // this link details how the check digit is calculated:
- // https://www.isin.org/isin-format/. it is a little bit
- // odd in that it works with digits, not numbers. in order
- // to make only one pass through the ISIN characters, the
- // each alpha character is handled as 2 characters within
- // the loop.
- function isISIN(str) {
- (0, _assertString.default)(str);
- if (!isin.test(str)) {
- return false;
- }
- var double = true;
- var sum = 0; // convert values
- for (var i = str.length - 2; i >= 0; i--) {
- if (str[i] >= 'A' && str[i] <= 'Z') {
- var value = str[i].charCodeAt(0) - 55;
- var lo = value % 10;
- var hi = Math.trunc(value / 10); // letters have two digits, so handle the low order
- // and high order digits separately.
- for (var _i = 0, _arr = [lo, hi]; _i < _arr.length; _i++) {
- var digit = _arr[_i];
- if (double) {
- if (digit >= 5) {
- sum += 1 + (digit - 5) * 2;
- } else {
- sum += digit * 2;
- }
- } else {
- sum += digit;
- }
- double = !double;
- }
- } else {
- var _digit = str[i].charCodeAt(0) - '0'.charCodeAt(0);
- if (double) {
- if (_digit >= 5) {
- sum += 1 + (_digit - 5) * 2;
- } else {
- sum += _digit * 2;
- }
- } else {
- sum += _digit;
- }
- double = !double;
- }
- }
- var check = Math.trunc((sum + 9) / 10) * 10 - sum;
- return +str[str.length - 1] === check;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],82:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isISO31661Alpha2;
- exports.CountryCodes = void 0;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- // from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
- var validISO31661Alpha2CountriesCodes = new Set(['AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW']);
- function isISO31661Alpha2(str) {
- (0, _assertString.default)(str);
- return validISO31661Alpha2CountriesCodes.has(str.toUpperCase());
- }
- var CountryCodes = validISO31661Alpha2CountriesCodes;
- exports.CountryCodes = CountryCodes;
- },{"./util/assertString":135}],83:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isISO31661Alpha3;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- // from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3
- var validISO31661Alpha3CountriesCodes = new Set(['AFG', 'ALA', 'ALB', 'DZA', 'ASM', 'AND', 'AGO', 'AIA', 'ATA', 'ATG', 'ARG', 'ARM', 'ABW', 'AUS', 'AUT', 'AZE', 'BHS', 'BHR', 'BGD', 'BRB', 'BLR', 'BEL', 'BLZ', 'BEN', 'BMU', 'BTN', 'BOL', 'BES', 'BIH', 'BWA', 'BVT', 'BRA', 'IOT', 'BRN', 'BGR', 'BFA', 'BDI', 'KHM', 'CMR', 'CAN', 'CPV', 'CYM', 'CAF', 'TCD', 'CHL', 'CHN', 'CXR', 'CCK', 'COL', 'COM', 'COG', 'COD', 'COK', 'CRI', 'CIV', 'HRV', 'CUB', 'CUW', 'CYP', 'CZE', 'DNK', 'DJI', 'DMA', 'DOM', 'ECU', 'EGY', 'SLV', 'GNQ', 'ERI', 'EST', 'ETH', 'FLK', 'FRO', 'FJI', 'FIN', 'FRA', 'GUF', 'PYF', 'ATF', 'GAB', 'GMB', 'GEO', 'DEU', 'GHA', 'GIB', 'GRC', 'GRL', 'GRD', 'GLP', 'GUM', 'GTM', 'GGY', 'GIN', 'GNB', 'GUY', 'HTI', 'HMD', 'VAT', 'HND', 'HKG', 'HUN', 'ISL', 'IND', 'IDN', 'IRN', 'IRQ', 'IRL', 'IMN', 'ISR', 'ITA', 'JAM', 'JPN', 'JEY', 'JOR', 'KAZ', 'KEN', 'KIR', 'PRK', 'KOR', 'KWT', 'KGZ', 'LAO', 'LVA', 'LBN', 'LSO', 'LBR', 'LBY', 'LIE', 'LTU', 'LUX', 'MAC', 'MKD', 'MDG', 'MWI', 'MYS', 'MDV', 'MLI', 'MLT', 'MHL', 'MTQ', 'MRT', 'MUS', 'MYT', 'MEX', 'FSM', 'MDA', 'MCO', 'MNG', 'MNE', 'MSR', 'MAR', 'MOZ', 'MMR', 'NAM', 'NRU', 'NPL', 'NLD', 'NCL', 'NZL', 'NIC', 'NER', 'NGA', 'NIU', 'NFK', 'MNP', 'NOR', 'OMN', 'PAK', 'PLW', 'PSE', 'PAN', 'PNG', 'PRY', 'PER', 'PHL', 'PCN', 'POL', 'PRT', 'PRI', 'QAT', 'REU', 'ROU', 'RUS', 'RWA', 'BLM', 'SHN', 'KNA', 'LCA', 'MAF', 'SPM', 'VCT', 'WSM', 'SMR', 'STP', 'SAU', 'SEN', 'SRB', 'SYC', 'SLE', 'SGP', 'SXM', 'SVK', 'SVN', 'SLB', 'SOM', 'ZAF', 'SGS', 'SSD', 'ESP', 'LKA', 'SDN', 'SUR', 'SJM', 'SWZ', 'SWE', 'CHE', 'SYR', 'TWN', 'TJK', 'TZA', 'THA', 'TLS', 'TGO', 'TKL', 'TON', 'TTO', 'TUN', 'TUR', 'TKM', 'TCA', 'TUV', 'UGA', 'UKR', 'ARE', 'GBR', 'USA', 'UMI', 'URY', 'UZB', 'VUT', 'VEN', 'VNM', 'VGB', 'VIR', 'WLF', 'ESH', 'YEM', 'ZMB', 'ZWE']);
- function isISO31661Alpha3(str) {
- (0, _assertString.default)(str);
- return validISO31661Alpha3CountriesCodes.has(str.toUpperCase());
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],84:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isISO4217;
- exports.CurrencyCodes = void 0;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- // from https://en.wikipedia.org/wiki/ISO_4217
- var validISO4217CurrencyCodes = new Set(['AED', 'AFN', 'ALL', 'AMD', 'ANG', 'AOA', 'ARS', 'AUD', 'AWG', 'AZN', 'BAM', 'BBD', 'BDT', 'BGN', 'BHD', 'BIF', 'BMD', 'BND', 'BOB', 'BOV', 'BRL', 'BSD', 'BTN', 'BWP', 'BYN', 'BZD', 'CAD', 'CDF', 'CHE', 'CHF', 'CHW', 'CLF', 'CLP', 'CNY', 'COP', 'COU', 'CRC', 'CUC', 'CUP', 'CVE', 'CZK', 'DJF', 'DKK', 'DOP', 'DZD', 'EGP', 'ERN', 'ETB', 'EUR', 'FJD', 'FKP', 'GBP', 'GEL', 'GHS', 'GIP', 'GMD', 'GNF', 'GTQ', 'GYD', 'HKD', 'HNL', 'HRK', 'HTG', 'HUF', 'IDR', 'ILS', 'INR', 'IQD', 'IRR', 'ISK', 'JMD', 'JOD', 'JPY', 'KES', 'KGS', 'KHR', 'KMF', 'KPW', 'KRW', 'KWD', 'KYD', 'KZT', 'LAK', 'LBP', 'LKR', 'LRD', 'LSL', 'LYD', 'MAD', 'MDL', 'MGA', 'MKD', 'MMK', 'MNT', 'MOP', 'MRU', 'MUR', 'MVR', 'MWK', 'MXN', 'MXV', 'MYR', 'MZN', 'NAD', 'NGN', 'NIO', 'NOK', 'NPR', 'NZD', 'OMR', 'PAB', 'PEN', 'PGK', 'PHP', 'PKR', 'PLN', 'PYG', 'QAR', 'RON', 'RSD', 'RUB', 'RWF', 'SAR', 'SBD', 'SCR', 'SDG', 'SEK', 'SGD', 'SHP', 'SLL', 'SOS', 'SRD', 'SSP', 'STN', 'SVC', 'SYP', 'SZL', 'THB', 'TJS', 'TMT', 'TND', 'TOP', 'TRY', 'TTD', 'TWD', 'TZS', 'UAH', 'UGX', 'USD', 'USN', 'UYI', 'UYU', 'UYW', 'UZS', 'VES', 'VND', 'VUV', 'WST', 'XAF', 'XAG', 'XAU', 'XBA', 'XBB', 'XBC', 'XBD', 'XCD', 'XDR', 'XOF', 'XPD', 'XPF', 'XPT', 'XSU', 'XTS', 'XUA', 'XXX', 'YER', 'ZAR', 'ZMW', 'ZWL']);
- function isISO4217(str) {
- (0, _assertString.default)(str);
- return validISO4217CurrencyCodes.has(str.toUpperCase());
- }
- var CurrencyCodes = validISO4217CurrencyCodes;
- exports.CurrencyCodes = CurrencyCodes;
- },{"./util/assertString":135}],85:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isISO8601;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /* eslint-disable max-len */
- // from http://goo.gl/0ejHHW
- var iso8601 = /^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/; // same as above, except with a strict 'T' separator between date and time
- var iso8601StrictSeparator = /^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T]((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/;
- /* eslint-enable max-len */
- var isValidDate = function isValidDate(str) {
- // str must have passed the ISO8601 check
- // this check is meant to catch invalid dates
- // like 2009-02-31
- // first check for ordinal dates
- var ordinalMatch = str.match(/^(\d{4})-?(\d{3})([ T]{1}\.*|$)/);
- if (ordinalMatch) {
- var oYear = Number(ordinalMatch[1]);
- var oDay = Number(ordinalMatch[2]); // if is leap year
- if (oYear % 4 === 0 && oYear % 100 !== 0 || oYear % 400 === 0) return oDay <= 366;
- return oDay <= 365;
- }
- var match = str.match(/(\d{4})-?(\d{0,2})-?(\d*)/).map(Number);
- var year = match[1];
- var month = match[2];
- var day = match[3];
- var monthString = month ? "0".concat(month).slice(-2) : month;
- var dayString = day ? "0".concat(day).slice(-2) : day; // create a date object and compare
- var d = new Date("".concat(year, "-").concat(monthString || '01', "-").concat(dayString || '01'));
- if (month && day) {
- return d.getUTCFullYear() === year && d.getUTCMonth() + 1 === month && d.getUTCDate() === day;
- }
- return true;
- };
- function isISO8601(str) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- (0, _assertString.default)(str);
- var check = options.strictSeparator ? iso8601StrictSeparator.test(str) : iso8601.test(str);
- if (check && options.strict) return isValidDate(str);
- return check;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],86:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isISRC;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- // see http://isrc.ifpi.org/en/isrc-standard/code-syntax
- var isrc = /^[A-Z]{2}[0-9A-Z]{3}\d{2}\d{5}$/;
- function isISRC(str) {
- (0, _assertString.default)(str);
- return isrc.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],87:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isISSN;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var issn = '^\\d{4}-?\\d{3}[\\dX]$';
- function isISSN(str) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- (0, _assertString.default)(str);
- var testIssn = issn;
- testIssn = options.require_hyphen ? testIssn.replace('?', '') : testIssn;
- testIssn = options.case_sensitive ? new RegExp(testIssn) : new RegExp(testIssn, 'i');
- if (!testIssn.test(str)) {
- return false;
- }
- var digits = str.replace('-', '').toUpperCase();
- var checksum = 0;
- for (var i = 0; i < digits.length; i++) {
- var digit = digits[i];
- checksum += (digit === 'X' ? 10 : +digit) * (8 - i);
- }
- return checksum % 11 === 0;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],88:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isIdentityCard;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _isInt = _interopRequireDefault(require("./isInt"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var validators = {
- PL: function PL(str) {
- (0, _assertString.default)(str);
- var weightOfDigits = {
- 1: 1,
- 2: 3,
- 3: 7,
- 4: 9,
- 5: 1,
- 6: 3,
- 7: 7,
- 8: 9,
- 9: 1,
- 10: 3,
- 11: 0
- };
- if (str != null && str.length === 11 && (0, _isInt.default)(str, {
- allow_leading_zeroes: true
- })) {
- var digits = str.split('').slice(0, -1);
- var sum = digits.reduce(function (acc, digit, index) {
- return acc + Number(digit) * weightOfDigits[index + 1];
- }, 0);
- var modulo = sum % 10;
- var lastDigit = Number(str.charAt(str.length - 1));
- if (modulo === 0 && lastDigit === 0 || lastDigit === 10 - modulo) {
- return true;
- }
- }
- return false;
- },
- ES: function ES(str) {
- (0, _assertString.default)(str);
- var DNI = /^[0-9X-Z][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/;
- var charsValue = {
- X: 0,
- Y: 1,
- Z: 2
- };
- var controlDigits = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E']; // sanitize user input
- var sanitized = str.trim().toUpperCase(); // validate the data structure
- if (!DNI.test(sanitized)) {
- return false;
- } // validate the control digit
- var number = sanitized.slice(0, -1).replace(/[X,Y,Z]/g, function (char) {
- return charsValue[char];
- });
- return sanitized.endsWith(controlDigits[number % 23]);
- },
- FI: function FI(str) {
- // https://dvv.fi/en/personal-identity-code#:~:text=control%20character%20for%20a-,personal,-identity%20code%20calculated
- (0, _assertString.default)(str);
- if (str.length !== 11) {
- return false;
- }
- if (!str.match(/^\d{6}[\-A\+]\d{3}[0-9ABCDEFHJKLMNPRSTUVWXY]{1}$/)) {
- return false;
- }
- var checkDigits = '0123456789ABCDEFHJKLMNPRSTUVWXY';
- var idAsNumber = parseInt(str.slice(0, 6), 10) * 1000 + parseInt(str.slice(7, 10), 10);
- var remainder = idAsNumber % 31;
- var checkDigit = checkDigits[remainder];
- return checkDigit === str.slice(10, 11);
- },
- IN: function IN(str) {
- var DNI = /^[1-9]\d{3}\s?\d{4}\s?\d{4}$/; // multiplication table
- var d = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 0, 6, 7, 8, 9, 5], [2, 3, 4, 0, 1, 7, 8, 9, 5, 6], [3, 4, 0, 1, 2, 8, 9, 5, 6, 7], [4, 0, 1, 2, 3, 9, 5, 6, 7, 8], [5, 9, 8, 7, 6, 0, 4, 3, 2, 1], [6, 5, 9, 8, 7, 1, 0, 4, 3, 2], [7, 6, 5, 9, 8, 2, 1, 0, 4, 3], [8, 7, 6, 5, 9, 3, 2, 1, 0, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]]; // permutation table
- var p = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 5, 7, 6, 2, 8, 3, 0, 9, 4], [5, 8, 0, 3, 7, 9, 6, 1, 4, 2], [8, 9, 1, 6, 0, 4, 3, 5, 2, 7], [9, 4, 5, 3, 1, 2, 6, 8, 7, 0], [4, 2, 8, 6, 5, 7, 3, 9, 0, 1], [2, 7, 9, 3, 8, 0, 6, 4, 1, 5], [7, 0, 4, 6, 9, 1, 3, 2, 5, 8]]; // sanitize user input
- var sanitized = str.trim(); // validate the data structure
- if (!DNI.test(sanitized)) {
- return false;
- }
- var c = 0;
- var invertedArray = sanitized.replace(/\s/g, '').split('').map(Number).reverse();
- invertedArray.forEach(function (val, i) {
- c = d[c][p[i % 8][val]];
- });
- return c === 0;
- },
- IR: function IR(str) {
- if (!str.match(/^\d{10}$/)) return false;
- str = "0000".concat(str).substr(str.length - 6);
- if (parseInt(str.substr(3, 6), 10) === 0) return false;
- var lastNumber = parseInt(str.substr(9, 1), 10);
- var sum = 0;
- for (var i = 0; i < 9; i++) {
- sum += parseInt(str.substr(i, 1), 10) * (10 - i);
- }
- sum %= 11;
- return sum < 2 && lastNumber === sum || sum >= 2 && lastNumber === 11 - sum;
- },
- IT: function IT(str) {
- if (str.length !== 9) return false;
- if (str === 'CA00000AA') return false; // https://it.wikipedia.org/wiki/Carta_d%27identit%C3%A0_elettronica_italiana
- return str.search(/C[A-Z][0-9]{5}[A-Z]{2}/i) > -1;
- },
- NO: function NO(str) {
- var sanitized = str.trim();
- if (isNaN(Number(sanitized))) return false;
- if (sanitized.length !== 11) return false;
- if (sanitized === '00000000000') return false; // https://no.wikipedia.org/wiki/F%C3%B8dselsnummer
- var f = sanitized.split('').map(Number);
- var k1 = (11 - (3 * f[0] + 7 * f[1] + 6 * f[2] + 1 * f[3] + 8 * f[4] + 9 * f[5] + 4 * f[6] + 5 * f[7] + 2 * f[8]) % 11) % 11;
- var k2 = (11 - (5 * f[0] + 4 * f[1] + 3 * f[2] + 2 * f[3] + 7 * f[4] + 6 * f[5] + 5 * f[6] + 4 * f[7] + 3 * f[8] + 2 * k1) % 11) % 11;
- if (k1 !== f[9] || k2 !== f[10]) return false;
- return true;
- },
- TH: function TH(str) {
- if (!str.match(/^[1-8]\d{12}$/)) return false; // validate check digit
- var sum = 0;
- for (var i = 0; i < 12; i++) {
- sum += parseInt(str[i], 10) * (13 - i);
- }
- return str[12] === ((11 - sum % 11) % 10).toString();
- },
- LK: function LK(str) {
- var old_nic = /^[1-9]\d{8}[vx]$/i;
- var new_nic = /^[1-9]\d{11}$/i;
- if (str.length === 10 && old_nic.test(str)) return true;else if (str.length === 12 && new_nic.test(str)) return true;
- return false;
- },
- 'he-IL': function heIL(str) {
- var DNI = /^\d{9}$/; // sanitize user input
- var sanitized = str.trim(); // validate the data structure
- if (!DNI.test(sanitized)) {
- return false;
- }
- var id = sanitized;
- var sum = 0,
- incNum;
- for (var i = 0; i < id.length; i++) {
- incNum = Number(id[i]) * (i % 2 + 1); // Multiply number by 1 or 2
- sum += incNum > 9 ? incNum - 9 : incNum; // Sum the digits up and add to total
- }
- return sum % 10 === 0;
- },
- 'ar-LY': function arLY(str) {
- // Libya National Identity Number NIN is 12 digits, the first digit is either 1 or 2
- var NIN = /^(1|2)\d{11}$/; // sanitize user input
- var sanitized = str.trim(); // validate the data structure
- if (!NIN.test(sanitized)) {
- return false;
- }
- return true;
- },
- 'ar-TN': function arTN(str) {
- var DNI = /^\d{8}$/; // sanitize user input
- var sanitized = str.trim(); // validate the data structure
- if (!DNI.test(sanitized)) {
- return false;
- }
- return true;
- },
- 'zh-CN': function zhCN(str) {
- var provincesAndCities = ['11', // 北京
- '12', // 天津
- '13', // 河北
- '14', // 山西
- '15', // 内蒙古
- '21', // 辽宁
- '22', // 吉林
- '23', // 黑龙江
- '31', // 上海
- '32', // 江苏
- '33', // 浙江
- '34', // 安徽
- '35', // 福建
- '36', // 江西
- '37', // 山东
- '41', // 河南
- '42', // 湖北
- '43', // 湖南
- '44', // 广东
- '45', // 广西
- '46', // 海南
- '50', // 重庆
- '51', // 四川
- '52', // 贵州
- '53', // 云南
- '54', // 西藏
- '61', // 陕西
- '62', // 甘肃
- '63', // 青海
- '64', // 宁夏
- '65', // 新疆
- '71', // 台湾
- '81', // 香港
- '82', // 澳门
- '91' // 国外
- ];
- var powers = ['7', '9', '10', '5', '8', '4', '2', '1', '6', '3', '7', '9', '10', '5', '8', '4', '2'];
- var parityBit = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
- var checkAddressCode = function checkAddressCode(addressCode) {
- return provincesAndCities.includes(addressCode);
- };
- var checkBirthDayCode = function checkBirthDayCode(birDayCode) {
- var yyyy = parseInt(birDayCode.substring(0, 4), 10);
- var mm = parseInt(birDayCode.substring(4, 6), 10);
- var dd = parseInt(birDayCode.substring(6), 10);
- var xdata = new Date(yyyy, mm - 1, dd);
- if (xdata > new Date()) {
- return false; // eslint-disable-next-line max-len
- } else if (xdata.getFullYear() === yyyy && xdata.getMonth() === mm - 1 && xdata.getDate() === dd) {
- return true;
- }
- return false;
- };
- var getParityBit = function getParityBit(idCardNo) {
- var id17 = idCardNo.substring(0, 17);
- var power = 0;
- for (var i = 0; i < 17; i++) {
- power += parseInt(id17.charAt(i), 10) * parseInt(powers[i], 10);
- }
- var mod = power % 11;
- return parityBit[mod];
- };
- var checkParityBit = function checkParityBit(idCardNo) {
- return getParityBit(idCardNo) === idCardNo.charAt(17).toUpperCase();
- };
- var check15IdCardNo = function check15IdCardNo(idCardNo) {
- var check = /^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(idCardNo);
- if (!check) return false;
- var addressCode = idCardNo.substring(0, 2);
- check = checkAddressCode(addressCode);
- if (!check) return false;
- var birDayCode = "19".concat(idCardNo.substring(6, 12));
- check = checkBirthDayCode(birDayCode);
- if (!check) return false;
- return true;
- };
- var check18IdCardNo = function check18IdCardNo(idCardNo) {
- var check = /^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/.test(idCardNo);
- if (!check) return false;
- var addressCode = idCardNo.substring(0, 2);
- check = checkAddressCode(addressCode);
- if (!check) return false;
- var birDayCode = idCardNo.substring(6, 14);
- check = checkBirthDayCode(birDayCode);
- if (!check) return false;
- return checkParityBit(idCardNo);
- };
- var checkIdCardNo = function checkIdCardNo(idCardNo) {
- var check = /^\d{15}|(\d{17}(\d|x|X))$/.test(idCardNo);
- if (!check) return false;
- if (idCardNo.length === 15) {
- return check15IdCardNo(idCardNo);
- }
- return check18IdCardNo(idCardNo);
- };
- return checkIdCardNo(str);
- },
- 'zh-TW': function zhTW(str) {
- var ALPHABET_CODES = {
- A: 10,
- B: 11,
- C: 12,
- D: 13,
- E: 14,
- F: 15,
- G: 16,
- H: 17,
- I: 34,
- J: 18,
- K: 19,
- L: 20,
- M: 21,
- N: 22,
- O: 35,
- P: 23,
- Q: 24,
- R: 25,
- S: 26,
- T: 27,
- U: 28,
- V: 29,
- W: 32,
- X: 30,
- Y: 31,
- Z: 33
- };
- var sanitized = str.trim().toUpperCase();
- if (!/^[A-Z][0-9]{9}$/.test(sanitized)) return false;
- return Array.from(sanitized).reduce(function (sum, number, index) {
- if (index === 0) {
- var code = ALPHABET_CODES[number];
- return code % 10 * 9 + Math.floor(code / 10);
- }
- if (index === 9) {
- return (10 - sum % 10 - Number(number)) % 10 === 0;
- }
- return sum + Number(number) * (9 - index);
- }, 0);
- }
- };
- function isIdentityCard(str, locale) {
- (0, _assertString.default)(str);
- if (locale in validators) {
- return validators[locale](str);
- } else if (locale === 'any') {
- for (var key in validators) {
- // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes
- // istanbul ignore else
- if (validators.hasOwnProperty(key)) {
- var validator = validators[key];
- if (validator(str)) {
- return true;
- }
- }
- }
- return false;
- }
- throw new Error("Invalid locale '".concat(locale, "'"));
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./isInt":90,"./util/assertString":135}],89:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isIn;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _toString = _interopRequireDefault(require("./util/toString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: 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 isIn(str, options) {
- (0, _assertString.default)(str);
- var i;
- if (Object.prototype.toString.call(options) === '[object Array]') {
- var array = [];
- for (i in options) {
- // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes
- // istanbul ignore else
- if ({}.hasOwnProperty.call(options, i)) {
- array[i] = (0, _toString.default)(options[i]);
- }
- }
- return array.indexOf(str) >= 0;
- } else if (_typeof(options) === 'object') {
- return options.hasOwnProperty(str);
- } else if (options && typeof options.indexOf === 'function') {
- return options.indexOf(str) >= 0;
- }
- return false;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135,"./util/toString":139}],90:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isInt;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var int = /^(?:[-+]?(?:0|[1-9][0-9]*))$/;
- var intLeadingZeroes = /^[-+]?[0-9]+$/;
- function isInt(str, options) {
- (0, _assertString.default)(str);
- options = options || {}; // Get the regex to use for testing, based on whether
- // leading zeroes are allowed or not.
- var regex = options.hasOwnProperty('allow_leading_zeroes') && !options.allow_leading_zeroes ? int : intLeadingZeroes; // Check min/max/lt/gt
- var minCheckPassed = !options.hasOwnProperty('min') || str >= options.min;
- var maxCheckPassed = !options.hasOwnProperty('max') || str <= options.max;
- var ltCheckPassed = !options.hasOwnProperty('lt') || str < options.lt;
- var gtCheckPassed = !options.hasOwnProperty('gt') || str > options.gt;
- return regex.test(str) && minCheckPassed && maxCheckPassed && ltCheckPassed && gtCheckPassed;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],91:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isJSON;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _merge = _interopRequireDefault(require("./util/merge"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: 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); }
- var default_json_options = {
- allow_primitives: false
- };
- function isJSON(str, options) {
- (0, _assertString.default)(str);
- try {
- options = (0, _merge.default)(options, default_json_options);
- var primitives = [];
- if (options.allow_primitives) {
- primitives = [null, false, true];
- }
- var obj = JSON.parse(str);
- return primitives.includes(obj) || !!obj && _typeof(obj) === 'object';
- } catch (e) {
- /* ignore */
- }
- return false;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135,"./util/merge":137}],92:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isJWT;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _isBase = _interopRequireDefault(require("./isBase64"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function isJWT(str) {
- (0, _assertString.default)(str);
- var dotSplit = str.split('.');
- var len = dotSplit.length;
- if (len > 3 || len < 2) {
- return false;
- }
- return dotSplit.reduce(function (acc, currElem) {
- return acc && (0, _isBase.default)(currElem, {
- urlSafe: true
- });
- }, true);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./isBase64":53,"./util/assertString":135}],93:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isLatLong;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _merge = _interopRequireDefault(require("./util/merge"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var lat = /^\(?[+-]?(90(\.0+)?|[1-8]?\d(\.\d+)?)$/;
- var long = /^\s?[+-]?(180(\.0+)?|1[0-7]\d(\.\d+)?|\d{1,2}(\.\d+)?)\)?$/;
- var latDMS = /^(([1-8]?\d)\D+([1-5]?\d|60)\D+([1-5]?\d|60)(\.\d+)?|90\D+0\D+0)\D+[NSns]?$/i;
- var longDMS = /^\s*([1-7]?\d{1,2}\D+([1-5]?\d|60)\D+([1-5]?\d|60)(\.\d+)?|180\D+0\D+0)\D+[EWew]?$/i;
- var defaultLatLongOptions = {
- checkDMS: false
- };
- function isLatLong(str, options) {
- (0, _assertString.default)(str);
- options = (0, _merge.default)(options, defaultLatLongOptions);
- if (!str.includes(',')) return false;
- var pair = str.split(',');
- if (pair[0].startsWith('(') && !pair[1].endsWith(')') || pair[1].endsWith(')') && !pair[0].startsWith('(')) return false;
- if (options.checkDMS) {
- return latDMS.test(pair[0]) && longDMS.test(pair[1]);
- }
- return lat.test(pair[0]) && long.test(pair[1]);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135,"./util/merge":137}],94:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isLength;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: 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); }
- /* eslint-disable prefer-rest-params */
- function isLength(str, options) {
- (0, _assertString.default)(str);
- var min;
- var max;
- if (_typeof(options) === 'object') {
- min = options.min || 0;
- max = options.max;
- } else {
- // backwards compatibility: isLength(str, min [, max])
- min = arguments[1] || 0;
- max = arguments[2];
- }
- var surrogatePairs = str.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g) || [];
- var len = str.length - surrogatePairs.length;
- return len >= min && (typeof max === 'undefined' || len <= max);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],95:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isLicensePlate;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var validators = {
- 'cs-CZ': function csCZ(str) {
- return /^(([ABCDEFHKIJKLMNPRSTUVXYZ]|[0-9])-?){5,8}$/.test(str);
- },
- 'de-DE': function deDE(str) {
- return /^((AW|UL|AK|GA|AÖ|LF|AZ|AM|AS|ZE|AN|AB|A|KG|KH|BA|EW|BZ|HY|KM|BT|HP|B|BC|BI|BO|FN|TT|ÜB|BN|AH|BS|FR|HB|ZZ|BB|BK|BÖ|OC|OK|CW|CE|C|CO|LH|CB|KW|LC|LN|DA|DI|DE|DH|SY|NÖ|DO|DD|DU|DN|D|EI|EA|EE|FI|EM|EL|EN|PF|ED|EF|ER|AU|ZP|E|ES|NT|EU|FL|FO|FT|FF|F|FS|FD|FÜ|GE|G|GI|GF|GS|ZR|GG|GP|GR|NY|ZI|GÖ|GZ|GT|HA|HH|HM|HU|WL|HZ|WR|RN|HK|HD|HN|HS|GK|HE|HF|RZ|HI|HG|HO|HX|IK|IL|IN|J|JL|KL|KA|KS|KF|KE|KI|KT|KO|KN|KR|KC|KU|K|LD|LL|LA|L|OP|LM|LI|LB|LU|LÖ|HL|LG|MD|GN|MZ|MA|ML|MR|MY|AT|DM|MC|NZ|RM|RG|MM|ME|MB|MI|FG|DL|HC|MW|RL|MK|MG|MÜ|WS|MH|M|MS|NU|NB|ND|NM|NK|NW|NR|NI|NF|DZ|EB|OZ|TG|TO|N|OA|GM|OB|CA|EH|FW|OF|OL|OE|OG|BH|LR|OS|AA|GD|OH|KY|NP|WK|PB|PA|PE|PI|PS|P|PM|PR|RA|RV|RE|R|H|SB|WN|RS|RD|RT|BM|NE|GV|RP|SU|GL|RO|GÜ|RH|EG|RW|PN|SK|MQ|RU|SZ|RI|SL|SM|SC|HR|FZ|VS|SW|SN|CR|SE|SI|SO|LP|SG|NH|SP|IZ|ST|BF|TE|HV|OD|SR|S|AC|DW|ZW|TF|TS|TR|TÜ|UM|PZ|TP|UE|UN|UH|MN|KK|VB|V|AE|PL|RC|VG|GW|PW|VR|VK|KB|WA|WT|BE|WM|WE|AP|MO|WW|FB|WZ|WI|WB|JE|WF|WO|W|WÜ|BL|Z|GC)[- ]?[A-Z]{1,2}[- ]?\d{1,4}|(AIC|FDB|ABG|SLN|SAW|KLZ|BUL|ESB|NAB|SUL|WST|ABI|AZE|BTF|KÖT|DKB|FEU|ROT|ALZ|SMÜ|WER|AUR|NOR|DÜW|BRK|HAB|TÖL|WOR|BAD|BAR|BER|BIW|EBS|KEM|MÜB|PEG|BGL|BGD|REI|WIL|BKS|BIR|WAT|BOR|BOH|BOT|BRB|BLK|HHM|NEB|NMB|WSF|LEO|HDL|WMS|WZL|BÜS|CHA|KÖZ|ROD|WÜM|CLP|NEC|COC|ZEL|COE|CUX|DAH|LDS|DEG|DEL|RSL|DLG|DGF|LAN|HEI|MED|DON|KIB|ROK|JÜL|MON|SLE|EBE|EIC|HIG|WBS|BIT|PRÜ|LIB|EMD|WIT|ERH|HÖS|ERZ|ANA|ASZ|MAB|MEK|STL|SZB|FDS|HCH|HOR|WOL|FRG|GRA|WOS|FRI|FFB|GAP|GER|BRL|CLZ|GTH|NOH|HGW|GRZ|LÖB|NOL|WSW|DUD|HMÜ|OHA|KRU|HAL|HAM|HBS|QLB|HVL|NAU|HAS|EBN|GEO|HOH|HDH|ERK|HER|WAN|HEF|ROF|HBN|ALF|HSK|USI|NAI|REH|SAN|KÜN|ÖHR|HOL|WAR|ARN|BRG|GNT|HOG|WOH|KEH|MAI|PAR|RID|ROL|KLE|GEL|KUS|KYF|ART|SDH|LDK|DIL|MAL|VIB|LER|BNA|GHA|GRM|MTL|WUR|LEV|LIF|STE|WEL|LIP|VAI|LUP|HGN|LBZ|LWL|PCH|STB|DAN|MKK|SLÜ|MSP|TBB|MGH|MTK|BIN|MSH|EIL|HET|SGH|BID|MYK|MSE|MST|MÜR|WRN|MEI|GRH|RIE|MZG|MIL|OBB|BED|FLÖ|MOL|FRW|SEE|SRB|AIB|MOS|BCH|ILL|SOB|NMS|NEA|SEF|UFF|NEW|VOH|NDH|TDO|NWM|GDB|GVM|WIS|NOM|EIN|GAN|LAU|HEB|OHV|OSL|SFB|ERB|LOS|BSK|KEL|BSB|MEL|WTL|OAL|FÜS|MOD|OHZ|OPR|BÜR|PAF|PLÖ|CAS|GLA|REG|VIT|ECK|SIM|GOA|EMS|DIZ|GOH|RÜD|SWA|NES|KÖN|MET|LRO|BÜZ|DBR|ROS|TET|HRO|ROW|BRV|HIP|PAN|GRI|SHK|EIS|SRO|SOK|LBS|SCZ|MER|QFT|SLF|SLS|HOM|SLK|ASL|BBG|SBK|SFT|SHG|MGN|MEG|ZIG|SAD|NEN|OVI|SHA|BLB|SIG|SON|SPN|FOR|GUB|SPB|IGB|WND|STD|STA|SDL|OBG|HST|BOG|SHL|PIR|FTL|SEB|SÖM|SÜW|TIR|SAB|TUT|ANG|SDT|LÜN|LSZ|MHL|VEC|VER|VIE|OVL|ANK|OVP|SBG|UEM|UER|WLG|GMN|NVP|RDG|RÜG|DAU|FKB|WAF|WAK|SLZ|WEN|SOG|APD|WUG|GUN|ESW|WIZ|WES|DIN|BRA|BÜD|WHV|HWI|GHC|WTM|WOB|WUN|MAK|SEL|OCH|HOT|WDA)[- ]?(([A-Z][- ]?\d{1,4})|([A-Z]{2}[- ]?\d{1,3})))[- ]?(E|H)?$/.test(str);
- },
- 'de-LI': function deLI(str) {
- return /^FL[- ]?\d{1,5}[UZ]?$/.test(str);
- },
- 'fi-FI': function fiFI(str) {
- return /^(?=.{4,7})(([A-Z]{1,3}|[0-9]{1,3})[\s-]?([A-Z]{1,3}|[0-9]{1,5}))$/.test(str);
- },
- 'pt-PT': function ptPT(str) {
- return /^([A-Z]{2}|[0-9]{2})[ -·]?([A-Z]{2}|[0-9]{2})[ -·]?([A-Z]{2}|[0-9]{2})$/.test(str);
- },
- 'sq-AL': function sqAL(str) {
- return /^[A-Z]{2}[- ]?((\d{3}[- ]?(([A-Z]{2})|T))|(R[- ]?\d{3}))$/.test(str);
- },
- 'pt-BR': function ptBR(str) {
- return /^[A-Z]{3}[ -]?[0-9][A-Z][0-9]{2}|[A-Z]{3}[ -]?[0-9]{4}$/.test(str);
- }
- };
- function isLicensePlate(str, locale) {
- (0, _assertString.default)(str);
- if (locale in validators) {
- return validators[locale](str);
- } else if (locale === 'any') {
- for (var key in validators) {
- /* eslint guard-for-in: 0 */
- var validator = validators[key];
- if (validator(str)) {
- return true;
- }
- }
- return false;
- }
- throw new Error("Invalid locale '".concat(locale, "'"));
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],96:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isLocale;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var localeReg = /^[A-Za-z]{2,4}([_-]([A-Za-z]{4}|[\d]{3}))?([_-]([A-Za-z]{2}|[\d]{3}))?$/;
- function isLocale(str) {
- (0, _assertString.default)(str);
- if (str === 'en_US_POSIX' || str === 'ca_ES_VALENCIA') {
- return true;
- }
- return localeReg.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],97:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isLowercase;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function isLowercase(str) {
- (0, _assertString.default)(str);
- return str === str.toLowerCase();
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],98:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isMACAddress;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var macAddress = /^(?:[0-9a-fA-F]{2}([-:\s]))([0-9a-fA-F]{2}\1){4}([0-9a-fA-F]{2})$/;
- var macAddressNoSeparators = /^([0-9a-fA-F]){12}$/;
- var macAddressWithDots = /^([0-9a-fA-F]{4}\.){2}([0-9a-fA-F]{4})$/;
- function isMACAddress(str, options) {
- (0, _assertString.default)(str);
- /**
- * @deprecated `no_colons` TODO: remove it in the next major
- */
- if (options && (options.no_colons || options.no_separators)) {
- return macAddressNoSeparators.test(str);
- }
- return macAddress.test(str) || macAddressWithDots.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],99:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isMD5;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var md5 = /^[a-f0-9]{32}$/;
- function isMD5(str) {
- (0, _assertString.default)(str);
- return md5.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],100:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isMagnetURI;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var magnetURI = /^magnet:\?xt(?:\.1)?=urn:(?:aich|bitprint|btih|ed2k|ed2khash|kzhash|md5|sha1|tree:tiger):[a-z0-9]{32}(?:[a-z0-9]{8})?($|&)/i;
- function isMagnetURI(url) {
- (0, _assertString.default)(url);
- return magnetURI.test(url.trim());
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],101:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isMimeType;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /*
- Checks if the provided string matches to a correct Media type format (MIME type)
- This function only checks is the string format follows the
- etablished rules by the according RFC specifications.
- This function supports 'charset' in textual media types
- (https://tools.ietf.org/html/rfc6657).
- This function does not check against all the media types listed
- by the IANA (https://www.iana.org/assignments/media-types/media-types.xhtml)
- because of lightness purposes : it would require to include
- all these MIME types in this librairy, which would weigh it
- significantly. This kind of effort maybe is not worth for the use that
- this function has in this entire librairy.
- More informations in the RFC specifications :
- - https://tools.ietf.org/html/rfc2045
- - https://tools.ietf.org/html/rfc2046
- - https://tools.ietf.org/html/rfc7231#section-3.1.1.1
- - https://tools.ietf.org/html/rfc7231#section-3.1.1.5
- */
- // Match simple MIME types
- // NB :
- // Subtype length must not exceed 100 characters.
- // This rule does not comply to the RFC specs (what is the max length ?).
- var mimeTypeSimple = /^(application|audio|font|image|message|model|multipart|text|video)\/[a-zA-Z0-9\.\-\+]{1,100}$/i; // eslint-disable-line max-len
- // Handle "charset" in "text/*"
- var mimeTypeText = /^text\/[a-zA-Z0-9\.\-\+]{1,100};\s?charset=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?$/i; // eslint-disable-line max-len
- // Handle "boundary" in "multipart/*"
- var mimeTypeMultipart = /^multipart\/[a-zA-Z0-9\.\-\+]{1,100}(;\s?(boundary|charset)=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?){0,2}$/i; // eslint-disable-line max-len
- function isMimeType(str) {
- (0, _assertString.default)(str);
- return mimeTypeSimple.test(str) || mimeTypeText.test(str) || mimeTypeMultipart.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],102:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isMobilePhone;
- exports.locales = void 0;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /* eslint-disable max-len */
- var phones = {
- 'am-AM': /^(\+?374|0)((10|[9|7][0-9])\d{6}$|[2-4]\d{7}$)/,
- 'ar-AE': /^((\+?971)|0)?5[024568]\d{7}$/,
- 'ar-BH': /^(\+?973)?(3|6)\d{7}$/,
- 'ar-DZ': /^(\+?213|0)(5|6|7)\d{8}$/,
- 'ar-LB': /^(\+?961)?((3|81)\d{6}|7\d{7})$/,
- 'ar-EG': /^((\+?20)|0)?1[0125]\d{8}$/,
- 'ar-IQ': /^(\+?964|0)?7[0-9]\d{8}$/,
- 'ar-JO': /^(\+?962|0)?7[789]\d{7}$/,
- 'ar-KW': /^(\+?965)[569]\d{7}$/,
- 'ar-LY': /^((\+?218)|0)?(9[1-6]\d{7}|[1-8]\d{7,9})$/,
- 'ar-MA': /^(?:(?:\+|00)212|0)[5-7]\d{8}$/,
- 'ar-OM': /^((\+|00)968)?(9[1-9])\d{6}$/,
- 'ar-PS': /^(\+?970|0)5[6|9](\d{7})$/,
- 'ar-SA': /^(!?(\+?966)|0)?5\d{8}$/,
- 'ar-SY': /^(!?(\+?963)|0)?9\d{8}$/,
- 'ar-TN': /^(\+?216)?[2459]\d{7}$/,
- 'az-AZ': /^(\+994|0)(5[015]|7[07]|99)\d{7}$/,
- 'bs-BA': /^((((\+|00)3876)|06))((([0-3]|[5-6])\d{6})|(4\d{7}))$/,
- 'be-BY': /^(\+?375)?(24|25|29|33|44)\d{7}$/,
- 'bg-BG': /^(\+?359|0)?8[789]\d{7}$/,
- 'bn-BD': /^(\+?880|0)1[13456789][0-9]{8}$/,
- 'ca-AD': /^(\+376)?[346]\d{5}$/,
- 'cs-CZ': /^(\+?420)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,
- 'da-DK': /^(\+?45)?\s?\d{2}\s?\d{2}\s?\d{2}\s?\d{2}$/,
- 'de-DE': /^((\+49|0)[1|3])([0|5][0-45-9]\d|6([23]|0\d?)|7([0-57-9]|6\d))\d{7,9}$/,
- 'de-AT': /^(\+43|0)\d{1,4}\d{3,12}$/,
- 'de-CH': /^(\+41|0)([1-9])\d{1,9}$/,
- 'de-LU': /^(\+352)?((6\d1)\d{6})$/,
- 'dv-MV': /^(\+?960)?(7[2-9]|91|9[3-9])\d{7}$/,
- 'el-GR': /^(\+?30|0)?(69\d{8})$/,
- 'en-AU': /^(\+?61|0)4\d{8}$/,
- 'en-BM': /^(\+?1)?441(((3|7)\d{6}$)|(5[0-3][0-9]\d{4}$)|(59\d{5}))/,
- 'en-GB': /^(\+?44|0)7\d{9}$/,
- 'en-GG': /^(\+?44|0)1481\d{6}$/,
- 'en-GH': /^(\+233|0)(20|50|24|54|27|57|26|56|23|28|55|59)\d{7}$/,
- 'en-GY': /^(\+592|0)6\d{6}$/,
- 'en-HK': /^(\+?852[-\s]?)?[456789]\d{3}[-\s]?\d{4}$/,
- 'en-MO': /^(\+?853[-\s]?)?[6]\d{3}[-\s]?\d{4}$/,
- 'en-IE': /^(\+?353|0)8[356789]\d{7}$/,
- 'en-IN': /^(\+?91|0)?[6789]\d{9}$/,
- 'en-KE': /^(\+?254|0)(7|1)\d{8}$/,
- 'en-KI': /^((\+686|686)?)?( )?((6|7)(2|3|8)[0-9]{6})$/,
- 'en-MT': /^(\+?356|0)?(99|79|77|21|27|22|25)[0-9]{6}$/,
- 'en-MU': /^(\+?230|0)?\d{8}$/,
- 'en-NA': /^(\+?264|0)(6|8)\d{7}$/,
- 'en-NG': /^(\+?234|0)?[789]\d{9}$/,
- 'en-NZ': /^(\+?64|0)[28]\d{7,9}$/,
- 'en-PK': /^((00|\+)?92|0)3[0-6]\d{8}$/,
- 'en-PH': /^(09|\+639)\d{9}$/,
- 'en-RW': /^(\+?250|0)?[7]\d{8}$/,
- 'en-SG': /^(\+65)?[3689]\d{7}$/,
- 'en-SL': /^(\+?232|0)\d{8}$/,
- 'en-TZ': /^(\+?255|0)?[67]\d{8}$/,
- 'en-UG': /^(\+?256|0)?[7]\d{8}$/,
- 'en-US': /^((\+1|1)?( |-)?)?(\([2-9][0-9]{2}\)|[2-9][0-9]{2})( |-)?([2-9][0-9]{2}( |-)?[0-9]{4})$/,
- 'en-ZA': /^(\+?27|0)\d{9}$/,
- 'en-ZM': /^(\+?26)?09[567]\d{7}$/,
- 'en-ZW': /^(\+263)[0-9]{9}$/,
- 'en-BW': /^(\+?267)?(7[1-8]{1})\d{6}$/,
- 'es-AR': /^\+?549(11|[2368]\d)\d{8}$/,
- 'es-BO': /^(\+?591)?(6|7)\d{7}$/,
- 'es-CO': /^(\+?57)?3(0(0|1|2|4|5)|1\d|2[0-4]|5(0|1))\d{7}$/,
- 'es-CL': /^(\+?56|0)[2-9]\d{1}\d{7}$/,
- 'es-CR': /^(\+506)?[2-8]\d{7}$/,
- 'es-CU': /^(\+53|0053)?5\d{7}/,
- 'es-DO': /^(\+?1)?8[024]9\d{7}$/,
- 'es-HN': /^(\+?504)?[9|8]\d{7}$/,
- 'es-EC': /^(\+?593|0)([2-7]|9[2-9])\d{7}$/,
- 'es-ES': /^(\+?34)?[6|7]\d{8}$/,
- 'es-PE': /^(\+?51)?9\d{8}$/,
- 'es-MX': /^(\+?52)?(1|01)?\d{10,11}$/,
- 'es-PA': /^(\+?507)\d{7,8}$/,
- 'es-PY': /^(\+?595|0)9[9876]\d{7}$/,
- 'es-SV': /^(\+?503)?[67]\d{7}$/,
- 'es-UY': /^(\+598|0)9[1-9][\d]{6}$/,
- 'es-VE': /^(\+?58)?(2|4)\d{9}$/,
- 'et-EE': /^(\+?372)?\s?(5|8[1-4])\s?([0-9]\s?){6,7}$/,
- 'fa-IR': /^(\+?98[\-\s]?|0)9[0-39]\d[\-\s]?\d{3}[\-\s]?\d{4}$/,
- 'fi-FI': /^(\+?358|0)\s?(4(0|1|2|4|5|6)?|50)\s?(\d\s?){4,8}\d$/,
- 'fj-FJ': /^(\+?679)?\s?\d{3}\s?\d{4}$/,
- 'fo-FO': /^(\+?298)?\s?\d{2}\s?\d{2}\s?\d{2}$/,
- 'fr-BF': /^(\+226|0)[67]\d{7}$/,
- 'fr-CM': /^(\+?237)6[0-9]{8}$/,
- 'fr-FR': /^(\+?33|0)[67]\d{8}$/,
- 'fr-GF': /^(\+?594|0|00594)[67]\d{8}$/,
- 'fr-GP': /^(\+?590|0|00590)[67]\d{8}$/,
- 'fr-MQ': /^(\+?596|0|00596)[67]\d{8}$/,
- 'fr-PF': /^(\+?689)?8[789]\d{6}$/,
- 'fr-RE': /^(\+?262|0|00262)[67]\d{8}$/,
- 'he-IL': /^(\+972|0)([23489]|5[012345689]|77)[1-9]\d{6}$/,
- 'hu-HU': /^(\+?36|06)(20|30|31|50|70)\d{7}$/,
- 'id-ID': /^(\+?62|0)8(1[123456789]|2[1238]|3[1238]|5[12356789]|7[78]|9[56789]|8[123456789])([\s?|\d]{5,11})$/,
- 'it-IT': /^(\+?39)?\s?3\d{2} ?\d{6,7}$/,
- 'it-SM': /^((\+378)|(0549)|(\+390549)|(\+3780549))?6\d{5,9}$/,
- 'ja-JP': /^(\+81[ \-]?(\(0\))?|0)[6789]0[ \-]?\d{4}[ \-]?\d{4}$/,
- 'ka-GE': /^(\+?995)?(5|79)\d{7}$/,
- 'kk-KZ': /^(\+?7|8)?7\d{9}$/,
- 'kl-GL': /^(\+?299)?\s?\d{2}\s?\d{2}\s?\d{2}$/,
- 'ko-KR': /^((\+?82)[ \-]?)?0?1([0|1|6|7|8|9]{1})[ \-]?\d{3,4}[ \-]?\d{4}$/,
- 'lt-LT': /^(\+370|8)\d{8}$/,
- 'lv-LV': /^(\+?371)2\d{7}$/,
- 'ms-MY': /^(\+?6?01){1}(([0145]{1}(\-|\s)?\d{7,8})|([236789]{1}(\s|\-)?\d{7}))$/,
- 'mz-MZ': /^(\+?258)?8[234567]\d{7}$/,
- 'nb-NO': /^(\+?47)?[49]\d{7}$/,
- 'ne-NP': /^(\+?977)?9[78]\d{8}$/,
- 'nl-BE': /^(\+?32|0)4\d{8}$/,
- 'nl-NL': /^(((\+|00)?31\(0\))|((\+|00)?31)|0)6{1}\d{8}$/,
- 'nn-NO': /^(\+?47)?[49]\d{7}$/,
- 'pl-PL': /^(\+?48)? ?[5-8]\d ?\d{3} ?\d{2} ?\d{2}$/,
- 'pt-BR': /^((\+?55\ ?[1-9]{2}\ ?)|(\+?55\ ?\([1-9]{2}\)\ ?)|(0[1-9]{2}\ ?)|(\([1-9]{2}\)\ ?)|([1-9]{2}\ ?))((\d{4}\-?\d{4})|(9[2-9]{1}\d{3}\-?\d{4}))$/,
- 'pt-PT': /^(\+?351)?9[1236]\d{7}$/,
- 'pt-AO': /^(\+244)\d{9}$/,
- 'ro-RO': /^(\+?4?0)\s?7\d{2}(\/|\s|\.|\-)?\d{3}(\s|\.|\-)?\d{3}$/,
- 'ru-RU': /^(\+?7|8)?9\d{9}$/,
- 'si-LK': /^(?:0|94|\+94)?(7(0|1|2|4|5|6|7|8)( |-)?)\d{7}$/,
- 'sl-SI': /^(\+386\s?|0)(\d{1}\s?\d{3}\s?\d{2}\s?\d{2}|\d{2}\s?\d{3}\s?\d{3})$/,
- 'sk-SK': /^(\+?421)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,
- 'sq-AL': /^(\+355|0)6[789]\d{6}$/,
- 'sr-RS': /^(\+3816|06)[- \d]{5,9}$/,
- 'sv-SE': /^(\+?46|0)[\s\-]?7[\s\-]?[02369]([\s\-]?\d){7}$/,
- 'tg-TJ': /^(\+?992)?[5][5]\d{7}$/,
- 'th-TH': /^(\+66|66|0)\d{9}$/,
- 'tr-TR': /^(\+?90|0)?5\d{9}$/,
- 'tk-TM': /^(\+993|993|8)\d{8}$/,
- 'uk-UA': /^(\+?38|8)?0\d{9}$/,
- 'uz-UZ': /^(\+?998)?(6[125-79]|7[1-69]|88|9\d)\d{7}$/,
- 'vi-VN': /^((\+?84)|0)((3([2-9]))|(5([25689]))|(7([0|6-9]))|(8([1-9]))|(9([0-9])))([0-9]{7})$/,
- 'zh-CN': /^((\+|00)86)?(1[3-9]|9[28])\d{9}$/,
- 'zh-TW': /^(\+?886\-?|0)?9\d{8}$/,
- 'dz-BT': /^(\+?975|0)?(17|16|77|02)\d{6}$/
- };
- /* eslint-enable max-len */
- // aliases
- phones['en-CA'] = phones['en-US'];
- phones['fr-CA'] = phones['en-CA'];
- phones['fr-BE'] = phones['nl-BE'];
- phones['zh-HK'] = phones['en-HK'];
- phones['zh-MO'] = phones['en-MO'];
- phones['ga-IE'] = phones['en-IE'];
- phones['fr-CH'] = phones['de-CH'];
- phones['it-CH'] = phones['fr-CH'];
- function isMobilePhone(str, locale, options) {
- (0, _assertString.default)(str);
- if (options && options.strictMode && !str.startsWith('+')) {
- return false;
- }
- if (Array.isArray(locale)) {
- return locale.some(function (key) {
- // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes
- // istanbul ignore else
- if (phones.hasOwnProperty(key)) {
- var phone = phones[key];
- if (phone.test(str)) {
- return true;
- }
- }
- return false;
- });
- } else if (locale in phones) {
- return phones[locale].test(str); // alias falsey locale as 'any'
- } else if (!locale || locale === 'any') {
- for (var key in phones) {
- // istanbul ignore else
- if (phones.hasOwnProperty(key)) {
- var phone = phones[key];
- if (phone.test(str)) {
- return true;
- }
- }
- }
- return false;
- }
- throw new Error("Invalid locale '".concat(locale, "'"));
- }
- var locales = Object.keys(phones);
- exports.locales = locales;
- },{"./util/assertString":135}],103:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isMongoId;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _isHexadecimal = _interopRequireDefault(require("./isHexadecimal"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function isMongoId(str) {
- (0, _assertString.default)(str);
- return (0, _isHexadecimal.default)(str) && str.length === 24;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./isHexadecimal":75,"./util/assertString":135}],104:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isMultibyte;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /* eslint-disable no-control-regex */
- var multibyte = /[^\x00-\x7F]/;
- /* eslint-enable no-control-regex */
- function isMultibyte(str) {
- (0, _assertString.default)(str);
- return multibyte.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],105:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isNumeric;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _alpha = require("./alpha");
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var numericNoSymbols = /^[0-9]+$/;
- function isNumeric(str, options) {
- (0, _assertString.default)(str);
- if (options && options.no_symbols) {
- return numericNoSymbols.test(str);
- }
- return new RegExp("^[+-]?([0-9]*[".concat((options || {}).locale ? _alpha.decimal[options.locale] : '.', "])?[0-9]+$")).test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./alpha":41,"./util/assertString":135}],106:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isOctal;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var octal = /^(0o)?[0-7]+$/i;
- function isOctal(str) {
- (0, _assertString.default)(str);
- return octal.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],107:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isPassportNumber;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /**
- * Reference:
- * https://en.wikipedia.org/ -- Wikipedia
- * https://docs.microsoft.com/en-us/microsoft-365/compliance/eu-passport-number -- EU Passport Number
- * https://countrycode.org/ -- Country Codes
- */
- var passportRegexByCountryCode = {
- AM: /^[A-Z]{2}\d{7}$/,
- // ARMENIA
- AR: /^[A-Z]{3}\d{6}$/,
- // ARGENTINA
- AT: /^[A-Z]\d{7}$/,
- // AUSTRIA
- AU: /^[A-Z]\d{7}$/,
- // AUSTRALIA
- BE: /^[A-Z]{2}\d{6}$/,
- // BELGIUM
- BG: /^\d{9}$/,
- // BULGARIA
- BR: /^[A-Z]{2}\d{6}$/,
- // BRAZIL
- BY: /^[A-Z]{2}\d{7}$/,
- // BELARUS
- CA: /^[A-Z]{2}\d{6}$/,
- // CANADA
- CH: /^[A-Z]\d{7}$/,
- // SWITZERLAND
- CN: /^G\d{8}$|^E(?![IO])[A-Z0-9]\d{7}$/,
- // CHINA [G=Ordinary, E=Electronic] followed by 8-digits, or E followed by any UPPERCASE letter (except I and O) followed by 7 digits
- CY: /^[A-Z](\d{6}|\d{8})$/,
- // CYPRUS
- CZ: /^\d{8}$/,
- // CZECH REPUBLIC
- DE: /^[CFGHJKLMNPRTVWXYZ0-9]{9}$/,
- // GERMANY
- DK: /^\d{9}$/,
- // DENMARK
- DZ: /^\d{9}$/,
- // ALGERIA
- EE: /^([A-Z]\d{7}|[A-Z]{2}\d{7})$/,
- // ESTONIA (K followed by 7-digits), e-passports have 2 UPPERCASE followed by 7 digits
- ES: /^[A-Z0-9]{2}([A-Z0-9]?)\d{6}$/,
- // SPAIN
- FI: /^[A-Z]{2}\d{7}$/,
- // FINLAND
- FR: /^\d{2}[A-Z]{2}\d{5}$/,
- // FRANCE
- GB: /^\d{9}$/,
- // UNITED KINGDOM
- GR: /^[A-Z]{2}\d{7}$/,
- // GREECE
- HR: /^\d{9}$/,
- // CROATIA
- HU: /^[A-Z]{2}(\d{6}|\d{7})$/,
- // HUNGARY
- IE: /^[A-Z0-9]{2}\d{7}$/,
- // IRELAND
- IN: /^[A-Z]{1}-?\d{7}$/,
- // INDIA
- ID: /^[A-C]\d{7}$/,
- // INDONESIA
- IR: /^[A-Z]\d{8}$/,
- // IRAN
- IS: /^(A)\d{7}$/,
- // ICELAND
- IT: /^[A-Z0-9]{2}\d{7}$/,
- // ITALY
- JP: /^[A-Z]{2}\d{7}$/,
- // JAPAN
- KR: /^[MS]\d{8}$/,
- // SOUTH KOREA, REPUBLIC OF KOREA, [S=PS Passports, M=PM Passports]
- LT: /^[A-Z0-9]{8}$/,
- // LITHUANIA
- LU: /^[A-Z0-9]{8}$/,
- // LUXEMBURG
- LV: /^[A-Z0-9]{2}\d{7}$/,
- // LATVIA
- LY: /^[A-Z0-9]{8}$/,
- // LIBYA
- MT: /^\d{7}$/,
- // MALTA
- MZ: /^([A-Z]{2}\d{7})|(\d{2}[A-Z]{2}\d{5})$/,
- // MOZAMBIQUE
- MY: /^[AHK]\d{8}$/,
- // MALAYSIA
- NL: /^[A-Z]{2}[A-Z0-9]{6}\d$/,
- // NETHERLANDS
- PL: /^[A-Z]{2}\d{7}$/,
- // POLAND
- PT: /^[A-Z]\d{6}$/,
- // PORTUGAL
- RO: /^\d{8,9}$/,
- // ROMANIA
- RU: /^\d{9}$/,
- // RUSSIAN FEDERATION
- SE: /^\d{8}$/,
- // SWEDEN
- SL: /^(P)[A-Z]\d{7}$/,
- // SLOVANIA
- SK: /^[0-9A-Z]\d{7}$/,
- // SLOVAKIA
- TR: /^[A-Z]\d{8}$/,
- // TURKEY
- UA: /^[A-Z]{2}\d{6}$/,
- // UKRAINE
- US: /^\d{9}$/ // UNITED STATES
- };
- /**
- * Check if str is a valid passport number
- * relative to provided ISO Country Code.
- *
- * @param {string} str
- * @param {string} countryCode
- * @return {boolean}
- */
- function isPassportNumber(str, countryCode) {
- (0, _assertString.default)(str);
- /** Remove All Whitespaces, Convert to UPPERCASE */
- var normalizedStr = str.replace(/\s/g, '').toUpperCase();
- return countryCode.toUpperCase() in passportRegexByCountryCode && passportRegexByCountryCode[countryCode].test(normalizedStr);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],108:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isPort;
- var _isInt = _interopRequireDefault(require("./isInt"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function isPort(str) {
- return (0, _isInt.default)(str, {
- min: 0,
- max: 65535
- });
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./isInt":90}],109:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isPostalCode;
- exports.locales = void 0;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- // common patterns
- var threeDigit = /^\d{3}$/;
- var fourDigit = /^\d{4}$/;
- var fiveDigit = /^\d{5}$/;
- var sixDigit = /^\d{6}$/;
- var patterns = {
- AD: /^AD\d{3}$/,
- AT: fourDigit,
- AU: fourDigit,
- AZ: /^AZ\d{4}$/,
- BE: fourDigit,
- BG: fourDigit,
- BR: /^\d{5}-\d{3}$/,
- BY: /2[1-4]{1}\d{4}$/,
- CA: /^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][\s\-]?\d[ABCEGHJ-NPRSTV-Z]\d$/i,
- CH: fourDigit,
- CN: /^(0[1-7]|1[012356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[1-5]|8[1345]|9[09])\d{4}$/,
- CZ: /^\d{3}\s?\d{2}$/,
- DE: fiveDigit,
- DK: fourDigit,
- DO: fiveDigit,
- DZ: fiveDigit,
- EE: fiveDigit,
- ES: /^(5[0-2]{1}|[0-4]{1}\d{1})\d{3}$/,
- FI: fiveDigit,
- FR: /^\d{2}\s?\d{3}$/,
- GB: /^(gir\s?0aa|[a-z]{1,2}\d[\da-z]?\s?(\d[a-z]{2})?)$/i,
- GR: /^\d{3}\s?\d{2}$/,
- HR: /^([1-5]\d{4}$)/,
- HT: /^HT\d{4}$/,
- HU: fourDigit,
- ID: fiveDigit,
- IE: /^(?!.*(?:o))[A-Za-z]\d[\dw]\s\w{4}$/i,
- IL: /^(\d{5}|\d{7})$/,
- IN: /^((?!10|29|35|54|55|65|66|86|87|88|89)[1-9][0-9]{5})$/,
- IR: /\b(?!(\d)\1{3})[13-9]{4}[1346-9][013-9]{5}\b/,
- IS: threeDigit,
- IT: fiveDigit,
- JP: /^\d{3}\-\d{4}$/,
- KE: fiveDigit,
- KR: /^(\d{5}|\d{6})$/,
- LI: /^(948[5-9]|949[0-7])$/,
- LT: /^LT\-\d{5}$/,
- LU: fourDigit,
- LV: /^LV\-\d{4}$/,
- LK: fiveDigit,
- MX: fiveDigit,
- MT: /^[A-Za-z]{3}\s{0,1}\d{4}$/,
- MY: fiveDigit,
- NL: /^\d{4}\s?[a-z]{2}$/i,
- NO: fourDigit,
- NP: /^(10|21|22|32|33|34|44|45|56|57)\d{3}$|^(977)$/i,
- NZ: fourDigit,
- PL: /^\d{2}\-\d{3}$/,
- PR: /^00[679]\d{2}([ -]\d{4})?$/,
- PT: /^\d{4}\-\d{3}?$/,
- RO: sixDigit,
- RU: sixDigit,
- SA: fiveDigit,
- SE: /^[1-9]\d{2}\s?\d{2}$/,
- SG: sixDigit,
- SI: fourDigit,
- SK: /^\d{3}\s?\d{2}$/,
- TH: fiveDigit,
- TN: fourDigit,
- TW: /^\d{3}(\d{2})?$/,
- UA: fiveDigit,
- US: /^\d{5}(-\d{4})?$/,
- ZA: fourDigit,
- ZM: fiveDigit
- };
- var locales = Object.keys(patterns);
- exports.locales = locales;
- function isPostalCode(str, locale) {
- (0, _assertString.default)(str);
- if (locale in patterns) {
- return patterns[locale].test(str);
- } else if (locale === 'any') {
- for (var key in patterns) {
- // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes
- // istanbul ignore else
- if (patterns.hasOwnProperty(key)) {
- var pattern = patterns[key];
- if (pattern.test(str)) {
- return true;
- }
- }
- }
- return false;
- }
- throw new Error("Invalid locale '".concat(locale, "'"));
- }
- },{"./util/assertString":135}],110:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isRFC3339;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /* Based on https://tools.ietf.org/html/rfc3339#section-5.6 */
- var dateFullYear = /[0-9]{4}/;
- var dateMonth = /(0[1-9]|1[0-2])/;
- var dateMDay = /([12]\d|0[1-9]|3[01])/;
- var timeHour = /([01][0-9]|2[0-3])/;
- var timeMinute = /[0-5][0-9]/;
- var timeSecond = /([0-5][0-9]|60)/;
- var timeSecFrac = /(\.[0-9]+)?/;
- var timeNumOffset = new RegExp("[-+]".concat(timeHour.source, ":").concat(timeMinute.source));
- var timeOffset = new RegExp("([zZ]|".concat(timeNumOffset.source, ")"));
- var partialTime = new RegExp("".concat(timeHour.source, ":").concat(timeMinute.source, ":").concat(timeSecond.source).concat(timeSecFrac.source));
- var fullDate = new RegExp("".concat(dateFullYear.source, "-").concat(dateMonth.source, "-").concat(dateMDay.source));
- var fullTime = new RegExp("".concat(partialTime.source).concat(timeOffset.source));
- var rfc3339 = new RegExp("^".concat(fullDate.source, "[ tT]").concat(fullTime.source, "$"));
- function isRFC3339(str) {
- (0, _assertString.default)(str);
- return rfc3339.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],111:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isRgbColor;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var rgbColor = /^rgb\((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]),){2}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\)$/;
- var rgbaColor = /^rgba\((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]),){3}(0?\.\d|1(\.0)?|0(\.0)?)\)$/;
- var rgbColorPercent = /^rgb\((([0-9]%|[1-9][0-9]%|100%),){2}([0-9]%|[1-9][0-9]%|100%)\)/;
- var rgbaColorPercent = /^rgba\((([0-9]%|[1-9][0-9]%|100%),){3}(0?\.\d|1(\.0)?|0(\.0)?)\)/;
- function isRgbColor(str) {
- var includePercentValues = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
- (0, _assertString.default)(str);
- if (!includePercentValues) {
- return rgbColor.test(str) || rgbaColor.test(str);
- }
- return rgbColor.test(str) || rgbaColor.test(str) || rgbColorPercent.test(str) || rgbaColorPercent.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],112:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isSemVer;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _multilineRegex = _interopRequireDefault(require("./util/multilineRegex"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /**
- * Regular Expression to match
- * semantic versioning (SemVer)
- * built from multi-line, multi-parts regexp
- * Reference: https://semver.org/
- */
- var semanticVersioningRegex = (0, _multilineRegex.default)(['^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)', '(?:-((?:0|[1-9]\\d*|\\d*[a-z-][0-9a-z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-z-][0-9a-z-]*))*))', '?(?:\\+([0-9a-z-]+(?:\\.[0-9a-z-]+)*))?$'], 'i');
- function isSemVer(str) {
- (0, _assertString.default)(str);
- return semanticVersioningRegex.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135,"./util/multilineRegex":138}],113:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isSlug;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var charsetRegex = /^[^\s-_](?!.*?[-_]{2,})[a-z0-9-\\][^\s]*[^-_\s]$/;
- function isSlug(str) {
- (0, _assertString.default)(str);
- return charsetRegex.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],114:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isStrongPassword;
- var _merge = _interopRequireDefault(require("./util/merge"));
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var upperCaseRegex = /^[A-Z]$/;
- var lowerCaseRegex = /^[a-z]$/;
- var numberRegex = /^[0-9]$/;
- var symbolRegex = /^[-#!$@%^&*()_+|~=`{}\[\]:";'<>?,.\/ ]$/;
- var defaultOptions = {
- minLength: 8,
- minLowercase: 1,
- minUppercase: 1,
- minNumbers: 1,
- minSymbols: 1,
- returnScore: false,
- pointsPerUnique: 1,
- pointsPerRepeat: 0.5,
- pointsForContainingLower: 10,
- pointsForContainingUpper: 10,
- pointsForContainingNumber: 10,
- pointsForContainingSymbol: 10
- };
- /* Counts number of occurrences of each char in a string
- * could be moved to util/ ?
- */
- function countChars(str) {
- var result = {};
- Array.from(str).forEach(function (char) {
- var curVal = result[char];
- if (curVal) {
- result[char] += 1;
- } else {
- result[char] = 1;
- }
- });
- return result;
- }
- /* Return information about a password */
- function analyzePassword(password) {
- var charMap = countChars(password);
- var analysis = {
- length: password.length,
- uniqueChars: Object.keys(charMap).length,
- uppercaseCount: 0,
- lowercaseCount: 0,
- numberCount: 0,
- symbolCount: 0
- };
- Object.keys(charMap).forEach(function (char) {
- /* istanbul ignore else */
- if (upperCaseRegex.test(char)) {
- analysis.uppercaseCount += charMap[char];
- } else if (lowerCaseRegex.test(char)) {
- analysis.lowercaseCount += charMap[char];
- } else if (numberRegex.test(char)) {
- analysis.numberCount += charMap[char];
- } else if (symbolRegex.test(char)) {
- analysis.symbolCount += charMap[char];
- }
- });
- return analysis;
- }
- function scorePassword(analysis, scoringOptions) {
- var points = 0;
- points += analysis.uniqueChars * scoringOptions.pointsPerUnique;
- points += (analysis.length - analysis.uniqueChars) * scoringOptions.pointsPerRepeat;
- if (analysis.lowercaseCount > 0) {
- points += scoringOptions.pointsForContainingLower;
- }
- if (analysis.uppercaseCount > 0) {
- points += scoringOptions.pointsForContainingUpper;
- }
- if (analysis.numberCount > 0) {
- points += scoringOptions.pointsForContainingNumber;
- }
- if (analysis.symbolCount > 0) {
- points += scoringOptions.pointsForContainingSymbol;
- }
- return points;
- }
- function isStrongPassword(str) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
- (0, _assertString.default)(str);
- var analysis = analyzePassword(str);
- options = (0, _merge.default)(options || {}, defaultOptions);
- if (options.returnScore) {
- return scorePassword(analysis, options);
- }
- return analysis.length >= options.minLength && analysis.lowercaseCount >= options.minLowercase && analysis.uppercaseCount >= options.minUppercase && analysis.numberCount >= options.minNumbers && analysis.symbolCount >= options.minSymbols;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135,"./util/merge":137}],115:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isSurrogatePair;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var surrogatePair = /[\uD800-\uDBFF][\uDC00-\uDFFF]/;
- function isSurrogatePair(str) {
- (0, _assertString.default)(str);
- return surrogatePair.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],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); }
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isTaxID;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var algorithms = _interopRequireWildcard(require("./util/algorithms"));
- var _isDate = _interopRequireDefault(require("./isDate"));
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: 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; }
- /**
- * TIN Validation
- * Validates Tax Identification Numbers (TINs) from the US, EU member states and the United Kingdom.
- *
- * EU-UK:
- * National TIN validity is calculated using public algorithms as made available by DG TAXUD.
- *
- * See `https://ec.europa.eu/taxation_customs/tin/specs/FS-TIN%20Algorithms-Public.docx` for more information.
- *
- * US:
- * An Employer Identification Number (EIN), also known as a Federal Tax Identification Number,
- * is used to identify a business entity.
- *
- * NOTES:
- * - Prefix 47 is being reserved for future use
- * - Prefixes 26, 27, 45, 46 and 47 were previously assigned by the Philadelphia campus.
- *
- * See `http://www.irs.gov/Businesses/Small-Businesses-&-Self-Employed/How-EINs-are-Assigned-and-Valid-EIN-Prefixes`
- * for more information.
- */
- // Locale functions
- /*
- * bg-BG validation function
- * (Edinen graždanski nomer (EGN/ЕГН), persons only)
- * Checks if birth date (first six digits) is valid and calculates check (last) digit
- */
- function bgBgCheck(tin) {
- // Extract full year, normalize month and check birth date validity
- var century_year = tin.slice(0, 2);
- var month = parseInt(tin.slice(2, 4), 10);
- if (month > 40) {
- month -= 40;
- century_year = "20".concat(century_year);
- } else if (month > 20) {
- month -= 20;
- century_year = "18".concat(century_year);
- } else {
- century_year = "19".concat(century_year);
- }
- if (month < 10) {
- month = "0".concat(month);
- }
- var date = "".concat(century_year, "/").concat(month, "/").concat(tin.slice(4, 6));
- if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
- return false;
- } // split digits into an array for further processing
- var digits = tin.split('').map(function (a) {
- return parseInt(a, 10);
- }); // Calculate checksum by multiplying digits with fixed values
- var multip_lookup = [2, 4, 8, 5, 10, 9, 7, 3, 6];
- var checksum = 0;
- for (var i = 0; i < multip_lookup.length; i++) {
- checksum += digits[i] * multip_lookup[i];
- }
- checksum = checksum % 11 === 10 ? 0 : checksum % 11;
- return checksum === digits[9];
- }
- /*
- * cs-CZ validation function
- * (Rodné číslo (RČ), persons only)
- * Checks if birth date (first six digits) is valid and divisibility by 11
- * Material not in DG TAXUD document sourced from:
- * -`https://lorenc.info/3MA381/overeni-spravnosti-rodneho-cisla.htm`
- * -`https://www.mvcr.cz/clanek/rady-a-sluzby-dokumenty-rodne-cislo.aspx`
- */
- function csCzCheck(tin) {
- tin = tin.replace(/\W/, ''); // Extract full year from TIN length
- var full_year = parseInt(tin.slice(0, 2), 10);
- if (tin.length === 10) {
- if (full_year < 54) {
- full_year = "20".concat(full_year);
- } else {
- full_year = "19".concat(full_year);
- }
- } else {
- if (tin.slice(6) === '000') {
- return false;
- } // Three-zero serial not assigned before 1954
- if (full_year < 54) {
- full_year = "19".concat(full_year);
- } else {
- return false; // No 18XX years seen in any of the resources
- }
- } // Add missing zero if needed
- if (full_year.length === 3) {
- full_year = [full_year.slice(0, 2), '0', full_year.slice(2)].join('');
- } // Extract month from TIN and normalize
- var month = parseInt(tin.slice(2, 4), 10);
- if (month > 50) {
- month -= 50;
- }
- if (month > 20) {
- // Month-plus-twenty was only introduced in 2004
- if (parseInt(full_year, 10) < 2004) {
- return false;
- }
- month -= 20;
- }
- if (month < 10) {
- month = "0".concat(month);
- } // Check date validity
- var date = "".concat(full_year, "/").concat(month, "/").concat(tin.slice(4, 6));
- if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
- return false;
- } // Verify divisibility by 11
- if (tin.length === 10) {
- if (parseInt(tin, 10) % 11 !== 0) {
- // Some numbers up to and including 1985 are still valid if
- // check (last) digit equals 0 and modulo of first 9 digits equals 10
- var checkdigit = parseInt(tin.slice(0, 9), 10) % 11;
- if (parseInt(full_year, 10) < 1986 && checkdigit === 10) {
- if (parseInt(tin.slice(9), 10) !== 0) {
- return false;
- }
- } else {
- return false;
- }
- }
- }
- return true;
- }
- /*
- * de-AT validation function
- * (Abgabenkontonummer, persons/entities)
- * Verify TIN validity by calling luhnCheck()
- */
- function deAtCheck(tin) {
- return algorithms.luhnCheck(tin);
- }
- /*
- * de-DE validation function
- * (Steueridentifikationsnummer (Steuer-IdNr.), persons only)
- * Tests for single duplicate/triplicate value, then calculates ISO 7064 check (last) digit
- * Partial implementation of spec (same result with both algorithms always)
- */
- function deDeCheck(tin) {
- // Split digits into an array for further processing
- var digits = tin.split('').map(function (a) {
- return parseInt(a, 10);
- }); // Fill array with strings of number positions
- var occurences = [];
- for (var i = 0; i < digits.length - 1; i++) {
- occurences.push('');
- for (var j = 0; j < digits.length - 1; j++) {
- if (digits[i] === digits[j]) {
- occurences[i] += j;
- }
- }
- } // Remove digits with one occurence and test for only one duplicate/triplicate
- occurences = occurences.filter(function (a) {
- return a.length > 1;
- });
- if (occurences.length !== 2 && occurences.length !== 3) {
- return false;
- } // In case of triplicate value only two digits are allowed next to each other
- if (occurences[0].length === 3) {
- var trip_locations = occurences[0].split('').map(function (a) {
- return parseInt(a, 10);
- });
- var recurrent = 0; // Amount of neighbour occurences
- for (var _i = 0; _i < trip_locations.length - 1; _i++) {
- if (trip_locations[_i] + 1 === trip_locations[_i + 1]) {
- recurrent += 1;
- }
- }
- if (recurrent === 2) {
- return false;
- }
- }
- return algorithms.iso7064Check(tin);
- }
- /*
- * dk-DK validation function
- * (CPR-nummer (personnummer), persons only)
- * Checks if birth date (first six digits) is valid and assigned to century (seventh) digit,
- * and calculates check (last) digit
- */
- function dkDkCheck(tin) {
- tin = tin.replace(/\W/, ''); // Extract year, check if valid for given century digit and add century
- var year = parseInt(tin.slice(4, 6), 10);
- var century_digit = tin.slice(6, 7);
- switch (century_digit) {
- case '0':
- case '1':
- case '2':
- case '3':
- year = "19".concat(year);
- break;
- case '4':
- case '9':
- if (year < 37) {
- year = "20".concat(year);
- } else {
- year = "19".concat(year);
- }
- break;
- default:
- if (year < 37) {
- year = "20".concat(year);
- } else if (year > 58) {
- year = "18".concat(year);
- } else {
- return false;
- }
- break;
- } // Add missing zero if needed
- if (year.length === 3) {
- year = [year.slice(0, 2), '0', year.slice(2)].join('');
- } // Check date validity
- var date = "".concat(year, "/").concat(tin.slice(2, 4), "/").concat(tin.slice(0, 2));
- if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
- return false;
- } // Split digits into an array for further processing
- var digits = tin.split('').map(function (a) {
- return parseInt(a, 10);
- });
- var checksum = 0;
- var weight = 4; // Multiply by weight and add to checksum
- for (var i = 0; i < 9; i++) {
- checksum += digits[i] * weight;
- weight -= 1;
- if (weight === 1) {
- weight = 7;
- }
- }
- checksum %= 11;
- if (checksum === 1) {
- return false;
- }
- return checksum === 0 ? digits[9] === 0 : digits[9] === 11 - checksum;
- }
- /*
- * el-CY validation function
- * (Arithmos Forologikou Mitroou (AFM/ΑΦΜ), persons only)
- * Verify TIN validity by calculating ASCII value of check (last) character
- */
- function elCyCheck(tin) {
- // split digits into an array for further processing
- var digits = tin.slice(0, 8).split('').map(function (a) {
- return parseInt(a, 10);
- });
- var checksum = 0; // add digits in even places
- for (var i = 1; i < digits.length; i += 2) {
- checksum += digits[i];
- } // add digits in odd places
- for (var _i2 = 0; _i2 < digits.length; _i2 += 2) {
- if (digits[_i2] < 2) {
- checksum += 1 - digits[_i2];
- } else {
- checksum += 2 * (digits[_i2] - 2) + 5;
- if (digits[_i2] > 4) {
- checksum += 2;
- }
- }
- }
- return String.fromCharCode(checksum % 26 + 65) === tin.charAt(8);
- }
- /*
- * el-GR validation function
- * (Arithmos Forologikou Mitroou (AFM/ΑΦΜ), persons/entities)
- * Verify TIN validity by calculating check (last) digit
- * Algorithm not in DG TAXUD document- sourced from:
- * - `http://epixeirisi.gr/%CE%9A%CE%A1%CE%99%CE%A3%CE%99%CE%9C%CE%91-%CE%98%CE%95%CE%9C%CE%91%CE%A4%CE%91-%CE%A6%CE%9F%CE%A1%CE%9F%CE%9B%CE%9F%CE%93%CE%99%CE%91%CE%A3-%CE%9A%CE%91%CE%99-%CE%9B%CE%9F%CE%93%CE%99%CE%A3%CE%A4%CE%99%CE%9A%CE%97%CE%A3/23791/%CE%91%CF%81%CE%B9%CE%B8%CE%BC%CF%8C%CF%82-%CE%A6%CE%BF%CF%81%CE%BF%CE%BB%CE%BF%CE%B3%CE%B9%CE%BA%CE%BF%CF%8D-%CE%9C%CE%B7%CF%84%CF%81%CF%8E%CE%BF%CF%85`
- */
- function elGrCheck(tin) {
- // split digits into an array for further processing
- var digits = tin.split('').map(function (a) {
- return parseInt(a, 10);
- });
- var checksum = 0;
- for (var i = 0; i < 8; i++) {
- checksum += digits[i] * Math.pow(2, 8 - i);
- }
- return checksum % 11 % 10 === digits[8];
- }
- /*
- * en-GB validation function (should go here if needed)
- * (National Insurance Number (NINO) or Unique Taxpayer Reference (UTR),
- * persons/entities respectively)
- */
- /*
- * en-IE validation function
- * (Personal Public Service Number (PPS No), persons only)
- * Verify TIN validity by calculating check (second to last) character
- */
- function enIeCheck(tin) {
- var checksum = algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 7).map(function (a) {
- return parseInt(a, 10);
- }), 8);
- if (tin.length === 9 && tin[8] !== 'W') {
- checksum += (tin[8].charCodeAt(0) - 64) * 9;
- }
- checksum %= 23;
- if (checksum === 0) {
- return tin[7].toUpperCase() === 'W';
- }
- return tin[7].toUpperCase() === String.fromCharCode(64 + checksum);
- } // Valid US IRS campus prefixes
- var enUsCampusPrefix = {
- andover: ['10', '12'],
- atlanta: ['60', '67'],
- austin: ['50', '53'],
- brookhaven: ['01', '02', '03', '04', '05', '06', '11', '13', '14', '16', '21', '22', '23', '25', '34', '51', '52', '54', '55', '56', '57', '58', '59', '65'],
- cincinnati: ['30', '32', '35', '36', '37', '38', '61'],
- fresno: ['15', '24'],
- internet: ['20', '26', '27', '45', '46', '47'],
- kansas: ['40', '44'],
- memphis: ['94', '95'],
- ogden: ['80', '90'],
- philadelphia: ['33', '39', '41', '42', '43', '46', '48', '62', '63', '64', '66', '68', '71', '72', '73', '74', '75', '76', '77', '81', '82', '83', '84', '85', '86', '87', '88', '91', '92', '93', '98', '99'],
- sba: ['31']
- }; // Return an array of all US IRS campus prefixes
- function enUsGetPrefixes() {
- var prefixes = [];
- for (var location in enUsCampusPrefix) {
- // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes
- // istanbul ignore else
- if (enUsCampusPrefix.hasOwnProperty(location)) {
- prefixes.push.apply(prefixes, _toConsumableArray(enUsCampusPrefix[location]));
- }
- }
- return prefixes;
- }
- /*
- * en-US validation function
- * Verify that the TIN starts with a valid IRS campus prefix
- */
- function enUsCheck(tin) {
- return enUsGetPrefixes().indexOf(tin.substr(0, 2)) !== -1;
- }
- /*
- * es-ES validation function
- * (Documento Nacional de Identidad (DNI)
- * or Número de Identificación de Extranjero (NIE), persons only)
- * Verify TIN validity by calculating check (last) character
- */
- function esEsCheck(tin) {
- // Split characters into an array for further processing
- var chars = tin.toUpperCase().split(''); // Replace initial letter if needed
- if (isNaN(parseInt(chars[0], 10)) && chars.length > 1) {
- var lead_replace = 0;
- switch (chars[0]) {
- case 'Y':
- lead_replace = 1;
- break;
- case 'Z':
- lead_replace = 2;
- break;
- default:
- }
- chars.splice(0, 1, lead_replace); // Fill with zeros if smaller than proper
- } else {
- while (chars.length < 9) {
- chars.unshift(0);
- }
- } // Calculate checksum and check according to lookup
- var lookup = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E'];
- chars = chars.join('');
- var checksum = parseInt(chars.slice(0, 8), 10) % 23;
- return chars[8] === lookup[checksum];
- }
- /*
- * et-EE validation function
- * (Isikukood (IK), persons only)
- * Checks if birth date (century digit and six following) is valid and calculates check (last) digit
- * Material not in DG TAXUD document sourced from:
- * - `https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/Estonia-TIN.pdf`
- */
- function etEeCheck(tin) {
- // Extract year and add century
- var full_year = tin.slice(1, 3);
- var century_digit = tin.slice(0, 1);
- switch (century_digit) {
- case '1':
- case '2':
- full_year = "18".concat(full_year);
- break;
- case '3':
- case '4':
- full_year = "19".concat(full_year);
- break;
- default:
- full_year = "20".concat(full_year);
- break;
- } // Check date validity
- var date = "".concat(full_year, "/").concat(tin.slice(3, 5), "/").concat(tin.slice(5, 7));
- if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
- return false;
- } // Split digits into an array for further processing
- var digits = tin.split('').map(function (a) {
- return parseInt(a, 10);
- });
- var checksum = 0;
- var weight = 1; // Multiply by weight and add to checksum
- for (var i = 0; i < 10; i++) {
- checksum += digits[i] * weight;
- weight += 1;
- if (weight === 10) {
- weight = 1;
- }
- } // Do again if modulo 11 of checksum is 10
- if (checksum % 11 === 10) {
- checksum = 0;
- weight = 3;
- for (var _i3 = 0; _i3 < 10; _i3++) {
- checksum += digits[_i3] * weight;
- weight += 1;
- if (weight === 10) {
- weight = 1;
- }
- }
- if (checksum % 11 === 10) {
- return digits[10] === 0;
- }
- }
- return checksum % 11 === digits[10];
- }
- /*
- * fi-FI validation function
- * (Henkilötunnus (HETU), persons only)
- * Checks if birth date (first six digits plus century symbol) is valid
- * and calculates check (last) digit
- */
- function fiFiCheck(tin) {
- // Extract year and add century
- var full_year = tin.slice(4, 6);
- var century_symbol = tin.slice(6, 7);
- switch (century_symbol) {
- case '+':
- full_year = "18".concat(full_year);
- break;
- case '-':
- full_year = "19".concat(full_year);
- break;
- default:
- full_year = "20".concat(full_year);
- break;
- } // Check date validity
- var date = "".concat(full_year, "/").concat(tin.slice(2, 4), "/").concat(tin.slice(0, 2));
- if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
- return false;
- } // Calculate check character
- var checksum = parseInt(tin.slice(0, 6) + tin.slice(7, 10), 10) % 31;
- if (checksum < 10) {
- return checksum === parseInt(tin.slice(10), 10);
- }
- checksum -= 10;
- var letters_lookup = ['A', 'B', 'C', 'D', 'E', 'F', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y'];
- return letters_lookup[checksum] === tin.slice(10);
- }
- /*
- * fr/nl-BE validation function
- * (Numéro national (N.N.), persons only)
- * Checks if birth date (first six digits) is valid and calculates check (last two) digits
- */
- function frBeCheck(tin) {
- // Zero month/day value is acceptable
- if (tin.slice(2, 4) !== '00' || tin.slice(4, 6) !== '00') {
- // Extract date from first six digits of TIN
- var date = "".concat(tin.slice(0, 2), "/").concat(tin.slice(2, 4), "/").concat(tin.slice(4, 6));
- if (!(0, _isDate.default)(date, 'YY/MM/DD')) {
- return false;
- }
- }
- var checksum = 97 - parseInt(tin.slice(0, 9), 10) % 97;
- var checkdigits = parseInt(tin.slice(9, 11), 10);
- if (checksum !== checkdigits) {
- checksum = 97 - parseInt("2".concat(tin.slice(0, 9)), 10) % 97;
- if (checksum !== checkdigits) {
- return false;
- }
- }
- return true;
- }
- /*
- * fr-FR validation function
- * (Numéro fiscal de référence (numéro SPI), persons only)
- * Verify TIN validity by calculating check (last three) digits
- */
- function frFrCheck(tin) {
- tin = tin.replace(/\s/g, '');
- var checksum = parseInt(tin.slice(0, 10), 10) % 511;
- var checkdigits = parseInt(tin.slice(10, 13), 10);
- return checksum === checkdigits;
- }
- /*
- * fr/lb-LU validation function
- * (numéro d’identification personnelle, persons only)
- * Verify birth date validity and run Luhn and Verhoeff checks
- */
- function frLuCheck(tin) {
- // Extract date and check validity
- var date = "".concat(tin.slice(0, 4), "/").concat(tin.slice(4, 6), "/").concat(tin.slice(6, 8));
- if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
- return false;
- } // Run Luhn check
- if (!algorithms.luhnCheck(tin.slice(0, 12))) {
- return false;
- } // Remove Luhn check digit and run Verhoeff check
- return algorithms.verhoeffCheck("".concat(tin.slice(0, 11)).concat(tin[12]));
- }
- /*
- * hr-HR validation function
- * (Osobni identifikacijski broj (OIB), persons/entities)
- * Verify TIN validity by calling iso7064Check(digits)
- */
- function hrHrCheck(tin) {
- return algorithms.iso7064Check(tin);
- }
- /*
- * hu-HU validation function
- * (Adóazonosító jel, persons only)
- * Verify TIN validity by calculating check (last) digit
- */
- function huHuCheck(tin) {
- // split digits into an array for further processing
- var digits = tin.split('').map(function (a) {
- return parseInt(a, 10);
- });
- var checksum = 8;
- for (var i = 1; i < 9; i++) {
- checksum += digits[i] * (i + 1);
- }
- return checksum % 11 === digits[9];
- }
- /*
- * lt-LT validation function (should go here if needed)
- * (Asmens kodas, persons/entities respectively)
- * Current validation check is alias of etEeCheck- same format applies
- */
- /*
- * it-IT first/last name validity check
- * Accepts it-IT TIN-encoded names as a three-element character array and checks their validity
- * Due to lack of clarity between resources ("Are only Italian consonants used?
- * What happens if a person has X in their name?" etc.) only two test conditions
- * have been implemented:
- * Vowels may only be followed by other vowels or an X character
- * and X characters after vowels may only be followed by other X characters.
- */
- function itItNameCheck(name) {
- // true at the first occurence of a vowel
- var vowelflag = false; // true at the first occurence of an X AFTER vowel
- // (to properly handle last names with X as consonant)
- var xflag = false;
- for (var i = 0; i < 3; i++) {
- if (!vowelflag && /[AEIOU]/.test(name[i])) {
- vowelflag = true;
- } else if (!xflag && vowelflag && name[i] === 'X') {
- xflag = true;
- } else if (i > 0) {
- if (vowelflag && !xflag) {
- if (!/[AEIOU]/.test(name[i])) {
- return false;
- }
- }
- if (xflag) {
- if (!/X/.test(name[i])) {
- return false;
- }
- }
- }
- }
- return true;
- }
- /*
- * it-IT validation function
- * (Codice fiscale (TIN-IT), persons only)
- * Verify name, birth date and codice catastale validity
- * and calculate check character.
- * Material not in DG-TAXUD document sourced from:
- * `https://en.wikipedia.org/wiki/Italian_fiscal_code`
- */
- function itItCheck(tin) {
- // Capitalize and split characters into an array for further processing
- var chars = tin.toUpperCase().split(''); // Check first and last name validity calling itItNameCheck()
- if (!itItNameCheck(chars.slice(0, 3))) {
- return false;
- }
- if (!itItNameCheck(chars.slice(3, 6))) {
- return false;
- } // Convert letters in number spaces back to numbers if any
- var number_locations = [6, 7, 9, 10, 12, 13, 14];
- var number_replace = {
- L: '0',
- M: '1',
- N: '2',
- P: '3',
- Q: '4',
- R: '5',
- S: '6',
- T: '7',
- U: '8',
- V: '9'
- };
- for (var _i4 = 0, _number_locations = number_locations; _i4 < _number_locations.length; _i4++) {
- var i = _number_locations[_i4];
- if (chars[i] in number_replace) {
- chars.splice(i, 1, number_replace[chars[i]]);
- }
- } // Extract month and day, and check date validity
- var month_replace = {
- A: '01',
- B: '02',
- C: '03',
- D: '04',
- E: '05',
- H: '06',
- L: '07',
- M: '08',
- P: '09',
- R: '10',
- S: '11',
- T: '12'
- };
- var month = month_replace[chars[8]];
- var day = parseInt(chars[9] + chars[10], 10);
- if (day > 40) {
- day -= 40;
- }
- if (day < 10) {
- day = "0".concat(day);
- }
- var date = "".concat(chars[6]).concat(chars[7], "/").concat(month, "/").concat(day);
- if (!(0, _isDate.default)(date, 'YY/MM/DD')) {
- return false;
- } // Calculate check character by adding up even and odd characters as numbers
- var checksum = 0;
- for (var _i5 = 1; _i5 < chars.length - 1; _i5 += 2) {
- var char_to_int = parseInt(chars[_i5], 10);
- if (isNaN(char_to_int)) {
- char_to_int = chars[_i5].charCodeAt(0) - 65;
- }
- checksum += char_to_int;
- }
- var odd_convert = {
- // Maps of characters at odd places
- A: 1,
- B: 0,
- C: 5,
- D: 7,
- E: 9,
- F: 13,
- G: 15,
- H: 17,
- I: 19,
- J: 21,
- K: 2,
- L: 4,
- M: 18,
- N: 20,
- O: 11,
- P: 3,
- Q: 6,
- R: 8,
- S: 12,
- T: 14,
- U: 16,
- V: 10,
- W: 22,
- X: 25,
- Y: 24,
- Z: 23,
- 0: 1,
- 1: 0
- };
- for (var _i6 = 0; _i6 < chars.length - 1; _i6 += 2) {
- var _char_to_int = 0;
- if (chars[_i6] in odd_convert) {
- _char_to_int = odd_convert[chars[_i6]];
- } else {
- var multiplier = parseInt(chars[_i6], 10);
- _char_to_int = 2 * multiplier + 1;
- if (multiplier > 4) {
- _char_to_int += 2;
- }
- }
- checksum += _char_to_int;
- }
- if (String.fromCharCode(65 + checksum % 26) !== chars[15]) {
- return false;
- }
- return true;
- }
- /*
- * lv-LV validation function
- * (Personas kods (PK), persons only)
- * Check validity of birth date and calculate check (last) digit
- * Support only for old format numbers (not starting with '32', issued before 2017/07/01)
- * Material not in DG TAXUD document sourced from:
- * `https://boot.ritakafija.lv/forums/index.php?/topic/88314-personas-koda-algoritms-%C4%8Deksumma/`
- */
- function lvLvCheck(tin) {
- tin = tin.replace(/\W/, ''); // Extract date from TIN
- var day = tin.slice(0, 2);
- if (day !== '32') {
- // No date/checksum check if new format
- var month = tin.slice(2, 4);
- if (month !== '00') {
- // No date check if unknown month
- var full_year = tin.slice(4, 6);
- switch (tin[6]) {
- case '0':
- full_year = "18".concat(full_year);
- break;
- case '1':
- full_year = "19".concat(full_year);
- break;
- default:
- full_year = "20".concat(full_year);
- break;
- } // Check date validity
- var date = "".concat(full_year, "/").concat(tin.slice(2, 4), "/").concat(day);
- if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
- return false;
- }
- } // Calculate check digit
- var checksum = 1101;
- var multip_lookup = [1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
- for (var i = 0; i < tin.length - 1; i++) {
- checksum -= parseInt(tin[i], 10) * multip_lookup[i];
- }
- return parseInt(tin[10], 10) === checksum % 11;
- }
- return true;
- }
- /*
- * mt-MT validation function
- * (Identity Card Number or Unique Taxpayer Reference, persons/entities)
- * Verify Identity Card Number structure (no other tests found)
- */
- function mtMtCheck(tin) {
- if (tin.length !== 9) {
- // No tests for UTR
- var chars = tin.toUpperCase().split(''); // Fill with zeros if smaller than proper
- while (chars.length < 8) {
- chars.unshift(0);
- } // Validate format according to last character
- switch (tin[7]) {
- case 'A':
- case 'P':
- if (parseInt(chars[6], 10) === 0) {
- return false;
- }
- break;
- default:
- {
- var first_part = parseInt(chars.join('').slice(0, 5), 10);
- if (first_part > 32000) {
- return false;
- }
- var second_part = parseInt(chars.join('').slice(5, 7), 10);
- if (first_part === second_part) {
- return false;
- }
- }
- }
- }
- return true;
- }
- /*
- * nl-NL validation function
- * (Burgerservicenummer (BSN) or Rechtspersonen Samenwerkingsverbanden Informatie Nummer (RSIN),
- * persons/entities respectively)
- * Verify TIN validity by calculating check (last) digit (variant of MOD 11)
- */
- function nlNlCheck(tin) {
- return algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 8).map(function (a) {
- return parseInt(a, 10);
- }), 9) % 11 === parseInt(tin[8], 10);
- }
- /*
- * pl-PL validation function
- * (Powszechny Elektroniczny System Ewidencji Ludności (PESEL)
- * or Numer identyfikacji podatkowej (NIP), persons/entities)
- * Verify TIN validity by validating birth date (PESEL) and calculating check (last) digit
- */
- function plPlCheck(tin) {
- // NIP
- if (tin.length === 10) {
- // Calculate last digit by multiplying with lookup
- var lookup = [6, 5, 7, 2, 3, 4, 5, 6, 7];
- var _checksum = 0;
- for (var i = 0; i < lookup.length; i++) {
- _checksum += parseInt(tin[i], 10) * lookup[i];
- }
- _checksum %= 11;
- if (_checksum === 10) {
- return false;
- }
- return _checksum === parseInt(tin[9], 10);
- } // PESEL
- // Extract full year using month
- var full_year = tin.slice(0, 2);
- var month = parseInt(tin.slice(2, 4), 10);
- if (month > 80) {
- full_year = "18".concat(full_year);
- month -= 80;
- } else if (month > 60) {
- full_year = "22".concat(full_year);
- month -= 60;
- } else if (month > 40) {
- full_year = "21".concat(full_year);
- month -= 40;
- } else if (month > 20) {
- full_year = "20".concat(full_year);
- month -= 20;
- } else {
- full_year = "19".concat(full_year);
- } // Add leading zero to month if needed
- if (month < 10) {
- month = "0".concat(month);
- } // Check date validity
- var date = "".concat(full_year, "/").concat(month, "/").concat(tin.slice(4, 6));
- if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
- return false;
- } // Calculate last digit by mulitplying with odd one-digit numbers except 5
- var checksum = 0;
- var multiplier = 1;
- for (var _i7 = 0; _i7 < tin.length - 1; _i7++) {
- checksum += parseInt(tin[_i7], 10) * multiplier % 10;
- multiplier += 2;
- if (multiplier > 10) {
- multiplier = 1;
- } else if (multiplier === 5) {
- multiplier += 2;
- }
- }
- checksum = 10 - checksum % 10;
- return checksum === parseInt(tin[10], 10);
- }
- /*
- * pt-BR validation function
- * (Cadastro de Pessoas Físicas (CPF, persons)
- * Cadastro Nacional de Pessoas Jurídicas (CNPJ, entities)
- * Both inputs will be validated
- */
- function ptBrCheck(tin) {
- if (tin.length === 11) {
- var _sum;
- var remainder;
- _sum = 0;
- if ( // Reject known invalid CPFs
- tin === '11111111111' || tin === '22222222222' || tin === '33333333333' || tin === '44444444444' || tin === '55555555555' || tin === '66666666666' || tin === '77777777777' || tin === '88888888888' || tin === '99999999999' || tin === '00000000000') return false;
- for (var i = 1; i <= 9; i++) {
- _sum += parseInt(tin.substring(i - 1, i), 10) * (11 - i);
- }
- remainder = _sum * 10 % 11;
- if (remainder === 10) remainder = 0;
- if (remainder !== parseInt(tin.substring(9, 10), 10)) return false;
- _sum = 0;
- for (var _i8 = 1; _i8 <= 10; _i8++) {
- _sum += parseInt(tin.substring(_i8 - 1, _i8), 10) * (12 - _i8);
- }
- remainder = _sum * 10 % 11;
- if (remainder === 10) remainder = 0;
- if (remainder !== parseInt(tin.substring(10, 11), 10)) return false;
- return true;
- }
- if ( // Reject know invalid CNPJs
- tin === '00000000000000' || tin === '11111111111111' || tin === '22222222222222' || tin === '33333333333333' || tin === '44444444444444' || tin === '55555555555555' || tin === '66666666666666' || tin === '77777777777777' || tin === '88888888888888' || tin === '99999999999999') {
- return false;
- }
- var length = tin.length - 2;
- var identifiers = tin.substring(0, length);
- var verificators = tin.substring(length);
- var sum = 0;
- var pos = length - 7;
- for (var _i9 = length; _i9 >= 1; _i9--) {
- sum += identifiers.charAt(length - _i9) * pos;
- pos -= 1;
- if (pos < 2) {
- pos = 9;
- }
- }
- var result = sum % 11 < 2 ? 0 : 11 - sum % 11;
- if (result !== parseInt(verificators.charAt(0), 10)) {
- return false;
- }
- length += 1;
- identifiers = tin.substring(0, length);
- sum = 0;
- pos = length - 7;
- for (var _i10 = length; _i10 >= 1; _i10--) {
- sum += identifiers.charAt(length - _i10) * pos;
- pos -= 1;
- if (pos < 2) {
- pos = 9;
- }
- }
- result = sum % 11 < 2 ? 0 : 11 - sum % 11;
- if (result !== parseInt(verificators.charAt(1), 10)) {
- return false;
- }
- return true;
- }
- /*
- * pt-PT validation function
- * (Número de identificação fiscal (NIF), persons/entities)
- * Verify TIN validity by calculating check (last) digit (variant of MOD 11)
- */
- function ptPtCheck(tin) {
- var checksum = 11 - algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 8).map(function (a) {
- return parseInt(a, 10);
- }), 9) % 11;
- if (checksum > 9) {
- return parseInt(tin[8], 10) === 0;
- }
- return checksum === parseInt(tin[8], 10);
- }
- /*
- * ro-RO validation function
- * (Cod Numeric Personal (CNP) or Cod de înregistrare fiscală (CIF),
- * persons only)
- * Verify CNP validity by calculating check (last) digit (test not found for CIF)
- * Material not in DG TAXUD document sourced from:
- * `https://en.wikipedia.org/wiki/National_identification_number#Romania`
- */
- function roRoCheck(tin) {
- if (tin.slice(0, 4) !== '9000') {
- // No test found for this format
- // Extract full year using century digit if possible
- var full_year = tin.slice(1, 3);
- switch (tin[0]) {
- case '1':
- case '2':
- full_year = "19".concat(full_year);
- break;
- case '3':
- case '4':
- full_year = "18".concat(full_year);
- break;
- case '5':
- case '6':
- full_year = "20".concat(full_year);
- break;
- default:
- } // Check date validity
- var date = "".concat(full_year, "/").concat(tin.slice(3, 5), "/").concat(tin.slice(5, 7));
- if (date.length === 8) {
- if (!(0, _isDate.default)(date, 'YY/MM/DD')) {
- return false;
- }
- } else if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
- return false;
- } // Calculate check digit
- var digits = tin.split('').map(function (a) {
- return parseInt(a, 10);
- });
- var multipliers = [2, 7, 9, 1, 4, 6, 3, 5, 8, 2, 7, 9];
- var checksum = 0;
- for (var i = 0; i < multipliers.length; i++) {
- checksum += digits[i] * multipliers[i];
- }
- if (checksum % 11 === 10) {
- return digits[12] === 1;
- }
- return digits[12] === checksum % 11;
- }
- return true;
- }
- /*
- * sk-SK validation function
- * (Rodné číslo (RČ) or bezvýznamové identifikačné číslo (BIČ), persons only)
- * Checks validity of pre-1954 birth numbers (rodné číslo) only
- * Due to the introduction of the pseudo-random BIČ it is not possible to test
- * post-1954 birth numbers without knowing whether they are BIČ or RČ beforehand
- */
- function skSkCheck(tin) {
- if (tin.length === 9) {
- tin = tin.replace(/\W/, '');
- if (tin.slice(6) === '000') {
- return false;
- } // Three-zero serial not assigned before 1954
- // Extract full year from TIN length
- var full_year = parseInt(tin.slice(0, 2), 10);
- if (full_year > 53) {
- return false;
- }
- if (full_year < 10) {
- full_year = "190".concat(full_year);
- } else {
- full_year = "19".concat(full_year);
- } // Extract month from TIN and normalize
- var month = parseInt(tin.slice(2, 4), 10);
- if (month > 50) {
- month -= 50;
- }
- if (month < 10) {
- month = "0".concat(month);
- } // Check date validity
- var date = "".concat(full_year, "/").concat(month, "/").concat(tin.slice(4, 6));
- if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
- return false;
- }
- }
- return true;
- }
- /*
- * sl-SI validation function
- * (Davčna številka, persons/entities)
- * Verify TIN validity by calculating check (last) digit (variant of MOD 11)
- */
- function slSiCheck(tin) {
- var checksum = 11 - algorithms.reverseMultiplyAndSum(tin.split('').slice(0, 7).map(function (a) {
- return parseInt(a, 10);
- }), 8) % 11;
- if (checksum === 10) {
- return parseInt(tin[7], 10) === 0;
- }
- return checksum === parseInt(tin[7], 10);
- }
- /*
- * sv-SE validation function
- * (Personnummer or samordningsnummer, persons only)
- * Checks validity of birth date and calls luhnCheck() to validate check (last) digit
- */
- function svSeCheck(tin) {
- // Make copy of TIN and normalize to two-digit year form
- var tin_copy = tin.slice(0);
- if (tin.length > 11) {
- tin_copy = tin_copy.slice(2);
- } // Extract date of birth
- var full_year = '';
- var month = tin_copy.slice(2, 4);
- var day = parseInt(tin_copy.slice(4, 6), 10);
- if (tin.length > 11) {
- full_year = tin.slice(0, 4);
- } else {
- full_year = tin.slice(0, 2);
- if (tin.length === 11 && day < 60) {
- // Extract full year from centenarian symbol
- // Should work just fine until year 10000 or so
- var current_year = new Date().getFullYear().toString();
- var current_century = parseInt(current_year.slice(0, 2), 10);
- current_year = parseInt(current_year, 10);
- if (tin[6] === '-') {
- if (parseInt("".concat(current_century).concat(full_year), 10) > current_year) {
- full_year = "".concat(current_century - 1).concat(full_year);
- } else {
- full_year = "".concat(current_century).concat(full_year);
- }
- } else {
- full_year = "".concat(current_century - 1).concat(full_year);
- if (current_year - parseInt(full_year, 10) < 100) {
- return false;
- }
- }
- }
- } // Normalize day and check date validity
- if (day > 60) {
- day -= 60;
- }
- if (day < 10) {
- day = "0".concat(day);
- }
- var date = "".concat(full_year, "/").concat(month, "/").concat(day);
- if (date.length === 8) {
- if (!(0, _isDate.default)(date, 'YY/MM/DD')) {
- return false;
- }
- } else if (!(0, _isDate.default)(date, 'YYYY/MM/DD')) {
- return false;
- }
- return algorithms.luhnCheck(tin.replace(/\W/, ''));
- } // Locale lookup objects
- /*
- * Tax id regex formats for various locales
- *
- * Where not explicitly specified in DG-TAXUD document both
- * uppercase and lowercase letters are acceptable.
- */
- var taxIdFormat = {
- 'bg-BG': /^\d{10}$/,
- 'cs-CZ': /^\d{6}\/{0,1}\d{3,4}$/,
- 'de-AT': /^\d{9}$/,
- 'de-DE': /^[1-9]\d{10}$/,
- 'dk-DK': /^\d{6}-{0,1}\d{4}$/,
- 'el-CY': /^[09]\d{7}[A-Z]$/,
- 'el-GR': /^([0-4]|[7-9])\d{8}$/,
- 'en-GB': /^\d{10}$|^(?!GB|NK|TN|ZZ)(?![DFIQUV])[A-Z](?![DFIQUVO])[A-Z]\d{6}[ABCD ]$/i,
- 'en-IE': /^\d{7}[A-W][A-IW]{0,1}$/i,
- 'en-US': /^\d{2}[- ]{0,1}\d{7}$/,
- 'es-ES': /^(\d{0,8}|[XYZKLM]\d{7})[A-HJ-NP-TV-Z]$/i,
- 'et-EE': /^[1-6]\d{6}(00[1-9]|0[1-9][0-9]|[1-6][0-9]{2}|70[0-9]|710)\d$/,
- 'fi-FI': /^\d{6}[-+A]\d{3}[0-9A-FHJ-NPR-Y]$/i,
- 'fr-BE': /^\d{11}$/,
- 'fr-FR': /^[0-3]\d{12}$|^[0-3]\d\s\d{2}(\s\d{3}){3}$/,
- // Conforms both to official spec and provided example
- 'fr-LU': /^\d{13}$/,
- 'hr-HR': /^\d{11}$/,
- 'hu-HU': /^8\d{9}$/,
- 'it-IT': /^[A-Z]{6}[L-NP-V0-9]{2}[A-EHLMPRST][L-NP-V0-9]{2}[A-ILMZ][L-NP-V0-9]{3}[A-Z]$/i,
- 'lv-LV': /^\d{6}-{0,1}\d{5}$/,
- // Conforms both to DG TAXUD spec and original research
- 'mt-MT': /^\d{3,7}[APMGLHBZ]$|^([1-8])\1\d{7}$/i,
- 'nl-NL': /^\d{9}$/,
- 'pl-PL': /^\d{10,11}$/,
- 'pt-BR': /(?:^\d{11}$)|(?:^\d{14}$)/,
- 'pt-PT': /^\d{9}$/,
- 'ro-RO': /^\d{13}$/,
- 'sk-SK': /^\d{6}\/{0,1}\d{3,4}$/,
- 'sl-SI': /^[1-9]\d{7}$/,
- 'sv-SE': /^(\d{6}[-+]{0,1}\d{4}|(18|19|20)\d{6}[-+]{0,1}\d{4})$/
- }; // taxIdFormat locale aliases
- taxIdFormat['lb-LU'] = taxIdFormat['fr-LU'];
- taxIdFormat['lt-LT'] = taxIdFormat['et-EE'];
- taxIdFormat['nl-BE'] = taxIdFormat['fr-BE']; // Algorithmic tax id check functions for various locales
- var taxIdCheck = {
- 'bg-BG': bgBgCheck,
- 'cs-CZ': csCzCheck,
- 'de-AT': deAtCheck,
- 'de-DE': deDeCheck,
- 'dk-DK': dkDkCheck,
- 'el-CY': elCyCheck,
- 'el-GR': elGrCheck,
- 'en-IE': enIeCheck,
- 'en-US': enUsCheck,
- 'es-ES': esEsCheck,
- 'et-EE': etEeCheck,
- 'fi-FI': fiFiCheck,
- 'fr-BE': frBeCheck,
- 'fr-FR': frFrCheck,
- 'fr-LU': frLuCheck,
- 'hr-HR': hrHrCheck,
- 'hu-HU': huHuCheck,
- 'it-IT': itItCheck,
- 'lv-LV': lvLvCheck,
- 'mt-MT': mtMtCheck,
- 'nl-NL': nlNlCheck,
- 'pl-PL': plPlCheck,
- 'pt-BR': ptBrCheck,
- 'pt-PT': ptPtCheck,
- 'ro-RO': roRoCheck,
- 'sk-SK': skSkCheck,
- 'sl-SI': slSiCheck,
- 'sv-SE': svSeCheck
- }; // taxIdCheck locale aliases
- taxIdCheck['lb-LU'] = taxIdCheck['fr-LU'];
- taxIdCheck['lt-LT'] = taxIdCheck['et-EE'];
- taxIdCheck['nl-BE'] = taxIdCheck['fr-BE']; // Regexes for locales where characters should be omitted before checking format
- var allsymbols = /[-\\\/!@#$%\^&\*\(\)\+\=\[\]]+/g;
- var sanitizeRegexes = {
- 'de-AT': allsymbols,
- 'de-DE': /[\/\\]/g,
- 'fr-BE': allsymbols
- }; // sanitizeRegexes locale aliases
- sanitizeRegexes['nl-BE'] = sanitizeRegexes['fr-BE'];
- /*
- * Validator function
- * Return true if the passed string is a valid tax identification number
- * for the specified locale.
- * Throw an error exception if the locale is not supported.
- */
- function isTaxID(str) {
- var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US';
- (0, _assertString.default)(str); // Copy TIN to avoid replacement if sanitized
- var strcopy = str.slice(0);
- if (locale in taxIdFormat) {
- if (locale in sanitizeRegexes) {
- strcopy = strcopy.replace(sanitizeRegexes[locale], '');
- }
- if (!taxIdFormat[locale].test(strcopy)) {
- return false;
- }
- if (locale in taxIdCheck) {
- return taxIdCheck[locale](strcopy);
- } // Fallthrough; not all locales have algorithmic checks
- return true;
- }
- throw new Error("Invalid locale '".concat(locale, "'"));
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./isDate":61,"./util/algorithms":134,"./util/assertString":135}],117:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isURL;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _isFQDN = _interopRequireDefault(require("./isFQDN"));
- var _isIP = _interopRequireDefault(require("./isIP"));
- var _merge = _interopRequireDefault(require("./util/merge"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: 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; }
- /*
- options for isURL method
- require_protocol - if set as true isURL will return false if protocol is not present in the URL
- require_valid_protocol - isURL will check if the URL's protocol is present in the protocols option
- protocols - valid protocols can be modified with this option
- require_host - if set as false isURL will not check if host is present in the URL
- require_port - if set as true isURL will check if port is present in the URL
- allow_protocol_relative_urls - if set as true protocol relative URLs will be allowed
- validate_length - if set as false isURL will skip string length validation (IE maximum is 2083)
- */
- var default_url_options = {
- protocols: ['http', 'https', 'ftp'],
- require_tld: true,
- require_protocol: false,
- require_host: true,
- require_port: false,
- require_valid_protocol: true,
- allow_underscores: false,
- allow_trailing_dot: false,
- allow_protocol_relative_urls: false,
- allow_fragments: true,
- allow_query_components: true,
- validate_length: true
- };
- var wrapped_ipv6 = /^\[([^\]]+)\](?::([0-9]+))?$/;
- function isRegExp(obj) {
- return Object.prototype.toString.call(obj) === '[object RegExp]';
- }
- function checkHost(host, matches) {
- for (var i = 0; i < matches.length; i++) {
- var match = matches[i];
- if (host === match || isRegExp(match) && match.test(host)) {
- return true;
- }
- }
- return false;
- }
- function isURL(url, options) {
- (0, _assertString.default)(url);
- if (!url || /[\s<>]/.test(url)) {
- return false;
- }
- if (url.indexOf('mailto:') === 0) {
- return false;
- }
- options = (0, _merge.default)(options, default_url_options);
- if (options.validate_length && url.length >= 2083) {
- return false;
- }
- if (!options.allow_fragments && url.includes('#')) {
- return false;
- }
- if (!options.allow_query_components && (url.includes('?') || url.includes('&'))) {
- return false;
- }
- var protocol, auth, host, hostname, port, port_str, split, ipv6;
- split = url.split('#');
- url = split.shift();
- split = url.split('?');
- url = split.shift();
- split = url.split('://');
- if (split.length > 1) {
- protocol = split.shift().toLowerCase();
- if (options.require_valid_protocol && options.protocols.indexOf(protocol) === -1) {
- return false;
- }
- } else if (options.require_protocol) {
- return false;
- } else if (url.substr(0, 2) === '//') {
- if (!options.allow_protocol_relative_urls) {
- return false;
- }
- split[0] = url.substr(2);
- }
- url = split.join('://');
- if (url === '') {
- return false;
- }
- split = url.split('/');
- url = split.shift();
- if (url === '' && !options.require_host) {
- return true;
- }
- split = url.split('@');
- if (split.length > 1) {
- if (options.disallow_auth) {
- return false;
- }
- if (split[0] === '') {
- return false;
- }
- auth = split.shift();
- if (auth.indexOf(':') >= 0 && auth.split(':').length > 2) {
- return false;
- }
- var _auth$split = auth.split(':'),
- _auth$split2 = _slicedToArray(_auth$split, 2),
- user = _auth$split2[0],
- password = _auth$split2[1];
- if (user === '' && password === '') {
- return false;
- }
- }
- hostname = split.join('@');
- port_str = null;
- ipv6 = null;
- var ipv6_match = hostname.match(wrapped_ipv6);
- if (ipv6_match) {
- host = '';
- ipv6 = ipv6_match[1];
- port_str = ipv6_match[2] || null;
- } else {
- split = hostname.split(':');
- host = split.shift();
- if (split.length) {
- port_str = split.join(':');
- }
- }
- if (port_str !== null && port_str.length > 0) {
- port = parseInt(port_str, 10);
- if (!/^[0-9]+$/.test(port_str) || port <= 0 || port > 65535) {
- return false;
- }
- } else if (options.require_port) {
- return false;
- }
- if (options.host_whitelist) {
- return checkHost(host, options.host_whitelist);
- }
- if (!(0, _isIP.default)(host) && !(0, _isFQDN.default)(host, options) && (!ipv6 || !(0, _isIP.default)(ipv6, 6))) {
- return false;
- }
- host = host || ipv6;
- if (options.host_blacklist && checkHost(host, options.host_blacklist)) {
- return false;
- }
- return true;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./isFQDN":68,"./isIP":78,"./util/assertString":135,"./util/merge":137}],118:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isUUID;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var uuid = {
- 1: /^[0-9A-F]{8}-[0-9A-F]{4}-1[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,
- 2: /^[0-9A-F]{8}-[0-9A-F]{4}-2[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,
- 3: /^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,
- 4: /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,
- 5: /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,
- all: /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i
- };
- function isUUID(str, version) {
- (0, _assertString.default)(str);
- var pattern = uuid[![undefined, null].includes(version) ? version : 'all'];
- return !!pattern && pattern.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],119:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isUppercase;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function isUppercase(str) {
- (0, _assertString.default)(str);
- return str === str.toUpperCase();
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],120:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isVAT;
- exports.vatMatchers = void 0;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var vatMatchers = {
- GB: /^GB((\d{3} \d{4} ([0-8][0-9]|9[0-6]))|(\d{9} \d{3})|(((GD[0-4])|(HA[5-9]))[0-9]{2}))$/,
- IT: /^(IT)?[0-9]{11}$/,
- NL: /^(NL)?[0-9]{9}B[0-9]{2}$/
- };
- exports.vatMatchers = vatMatchers;
- function isVAT(str, countryCode) {
- (0, _assertString.default)(str);
- (0, _assertString.default)(countryCode);
- if (countryCode in vatMatchers) {
- return vatMatchers[countryCode].test(str);
- }
- throw new Error("Invalid country code: '".concat(countryCode, "'"));
- }
- },{"./util/assertString":135}],121:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isVariableWidth;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _isFullWidth = require("./isFullWidth");
- var _isHalfWidth = require("./isHalfWidth");
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function isVariableWidth(str) {
- (0, _assertString.default)(str);
- return _isFullWidth.fullWidth.test(str) && _isHalfWidth.halfWidth.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./isFullWidth":70,"./isHalfWidth":72,"./util/assertString":135}],122:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isWhitelisted;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function isWhitelisted(str, chars) {
- (0, _assertString.default)(str);
- for (var i = str.length - 1; i >= 0; i--) {
- if (chars.indexOf(str[i]) === -1) {
- return false;
- }
- }
- return true;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],123:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = ltrim;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function ltrim(str, chars) {
- (0, _assertString.default)(str); // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping
- var pattern = chars ? new RegExp("^[".concat(chars.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), "]+"), 'g') : /^\s+/g;
- return str.replace(pattern, '');
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],124:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = matches;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function matches(str, pattern, modifiers) {
- (0, _assertString.default)(str);
- if (Object.prototype.toString.call(pattern) !== '[object RegExp]') {
- pattern = new RegExp(pattern, modifiers);
- }
- return pattern.test(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],125:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = normalizeEmail;
- var _merge = _interopRequireDefault(require("./util/merge"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var default_normalize_email_options = {
- // The following options apply to all email addresses
- // Lowercases the local part of the email address.
- // Please note this may violate RFC 5321 as per http://stackoverflow.com/a/9808332/192024).
- // The domain is always lowercased, as per RFC 1035
- all_lowercase: true,
- // The following conversions are specific to GMail
- // Lowercases the local part of the GMail address (known to be case-insensitive)
- gmail_lowercase: true,
- // Removes dots from the local part of the email address, as that's ignored by GMail
- gmail_remove_dots: true,
- // Removes the subaddress (e.g. "+foo") from the email address
- gmail_remove_subaddress: true,
- // Conversts the googlemail.com domain to gmail.com
- gmail_convert_googlemaildotcom: true,
- // The following conversions are specific to Outlook.com / Windows Live / Hotmail
- // Lowercases the local part of the Outlook.com address (known to be case-insensitive)
- outlookdotcom_lowercase: true,
- // Removes the subaddress (e.g. "+foo") from the email address
- outlookdotcom_remove_subaddress: true,
- // The following conversions are specific to Yahoo
- // Lowercases the local part of the Yahoo address (known to be case-insensitive)
- yahoo_lowercase: true,
- // Removes the subaddress (e.g. "-foo") from the email address
- yahoo_remove_subaddress: true,
- // The following conversions are specific to Yandex
- // Lowercases the local part of the Yandex address (known to be case-insensitive)
- yandex_lowercase: true,
- // The following conversions are specific to iCloud
- // Lowercases the local part of the iCloud address (known to be case-insensitive)
- icloud_lowercase: true,
- // Removes the subaddress (e.g. "+foo") from the email address
- icloud_remove_subaddress: true
- }; // List of domains used by iCloud
- var icloud_domains = ['icloud.com', 'me.com']; // List of domains used by Outlook.com and its predecessors
- // This list is likely incomplete.
- // Partial reference:
- // https://blogs.office.com/2013/04/17/outlook-com-gets-two-step-verification-sign-in-by-alias-and-new-international-domains/
- var outlookdotcom_domains = ['hotmail.at', 'hotmail.be', 'hotmail.ca', 'hotmail.cl', 'hotmail.co.il', 'hotmail.co.nz', 'hotmail.co.th', 'hotmail.co.uk', 'hotmail.com', 'hotmail.com.ar', 'hotmail.com.au', 'hotmail.com.br', 'hotmail.com.gr', 'hotmail.com.mx', 'hotmail.com.pe', 'hotmail.com.tr', 'hotmail.com.vn', 'hotmail.cz', 'hotmail.de', 'hotmail.dk', 'hotmail.es', 'hotmail.fr', 'hotmail.hu', 'hotmail.id', 'hotmail.ie', 'hotmail.in', 'hotmail.it', 'hotmail.jp', 'hotmail.kr', 'hotmail.lv', 'hotmail.my', 'hotmail.ph', 'hotmail.pt', 'hotmail.sa', 'hotmail.sg', 'hotmail.sk', 'live.be', 'live.co.uk', 'live.com', 'live.com.ar', 'live.com.mx', 'live.de', 'live.es', 'live.eu', 'live.fr', 'live.it', 'live.nl', 'msn.com', 'outlook.at', 'outlook.be', 'outlook.cl', 'outlook.co.il', 'outlook.co.nz', 'outlook.co.th', 'outlook.com', 'outlook.com.ar', 'outlook.com.au', 'outlook.com.br', 'outlook.com.gr', 'outlook.com.pe', 'outlook.com.tr', 'outlook.com.vn', 'outlook.cz', 'outlook.de', 'outlook.dk', 'outlook.es', 'outlook.fr', 'outlook.hu', 'outlook.id', 'outlook.ie', 'outlook.in', 'outlook.it', 'outlook.jp', 'outlook.kr', 'outlook.lv', 'outlook.my', 'outlook.ph', 'outlook.pt', 'outlook.sa', 'outlook.sg', 'outlook.sk', 'passport.com']; // List of domains used by Yahoo Mail
- // This list is likely incomplete
- var yahoo_domains = ['rocketmail.com', 'yahoo.ca', 'yahoo.co.uk', 'yahoo.com', 'yahoo.de', 'yahoo.fr', 'yahoo.in', 'yahoo.it', 'ymail.com']; // List of domains used by yandex.ru
- var yandex_domains = ['yandex.ru', 'yandex.ua', 'yandex.kz', 'yandex.com', 'yandex.by', 'ya.ru']; // replace single dots, but not multiple consecutive dots
- function dotsReplacer(match) {
- if (match.length > 1) {
- return match;
- }
- return '';
- }
- function normalizeEmail(email, options) {
- options = (0, _merge.default)(options, default_normalize_email_options);
- var raw_parts = email.split('@');
- var domain = raw_parts.pop();
- var user = raw_parts.join('@');
- var parts = [user, domain]; // The domain is always lowercased, as it's case-insensitive per RFC 1035
- parts[1] = parts[1].toLowerCase();
- if (parts[1] === 'gmail.com' || parts[1] === 'googlemail.com') {
- // Address is GMail
- if (options.gmail_remove_subaddress) {
- parts[0] = parts[0].split('+')[0];
- }
- if (options.gmail_remove_dots) {
- // this does not replace consecutive dots like example..email@gmail.com
- parts[0] = parts[0].replace(/\.+/g, dotsReplacer);
- }
- if (!parts[0].length) {
- return false;
- }
- if (options.all_lowercase || options.gmail_lowercase) {
- parts[0] = parts[0].toLowerCase();
- }
- parts[1] = options.gmail_convert_googlemaildotcom ? 'gmail.com' : parts[1];
- } else if (icloud_domains.indexOf(parts[1]) >= 0) {
- // Address is iCloud
- if (options.icloud_remove_subaddress) {
- parts[0] = parts[0].split('+')[0];
- }
- if (!parts[0].length) {
- return false;
- }
- if (options.all_lowercase || options.icloud_lowercase) {
- parts[0] = parts[0].toLowerCase();
- }
- } else if (outlookdotcom_domains.indexOf(parts[1]) >= 0) {
- // Address is Outlook.com
- if (options.outlookdotcom_remove_subaddress) {
- parts[0] = parts[0].split('+')[0];
- }
- if (!parts[0].length) {
- return false;
- }
- if (options.all_lowercase || options.outlookdotcom_lowercase) {
- parts[0] = parts[0].toLowerCase();
- }
- } else if (yahoo_domains.indexOf(parts[1]) >= 0) {
- // Address is Yahoo
- if (options.yahoo_remove_subaddress) {
- var components = parts[0].split('-');
- parts[0] = components.length > 1 ? components.slice(0, -1).join('-') : components[0];
- }
- if (!parts[0].length) {
- return false;
- }
- if (options.all_lowercase || options.yahoo_lowercase) {
- parts[0] = parts[0].toLowerCase();
- }
- } else if (yandex_domains.indexOf(parts[1]) >= 0) {
- if (options.all_lowercase || options.yandex_lowercase) {
- parts[0] = parts[0].toLowerCase();
- }
- parts[1] = 'yandex.ru'; // all yandex domains are equal, 1st preferred
- } else if (options.all_lowercase) {
- // Any other address
- parts[0] = parts[0].toLowerCase();
- }
- return parts.join('@');
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/merge":137}],126:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = rtrim;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function rtrim(str, chars) {
- (0, _assertString.default)(str);
- if (chars) {
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping
- var pattern = new RegExp("[".concat(chars.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), "]+$"), 'g');
- return str.replace(pattern, '');
- } // Use a faster and more safe than regex trim method https://blog.stevenlevithan.com/archives/faster-trim-javascript
- var strIndex = str.length - 1;
- while (/\s/.test(str.charAt(strIndex))) {
- strIndex -= 1;
- }
- return str.slice(0, strIndex + 1);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],127:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = stripLow;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- var _blacklist = _interopRequireDefault(require("./blacklist"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function stripLow(str, keep_new_lines) {
- (0, _assertString.default)(str);
- var chars = keep_new_lines ? '\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F' : '\\x00-\\x1F\\x7F';
- return (0, _blacklist.default)(str, chars);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./blacklist":42,"./util/assertString":135}],128:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = toBoolean;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function toBoolean(str, strict) {
- (0, _assertString.default)(str);
- if (strict) {
- return str === '1' || /^true$/i.test(str);
- }
- return str !== '0' && !/^false$/i.test(str) && str !== '';
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],129:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = toDate;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function toDate(date) {
- (0, _assertString.default)(date);
- date = Date.parse(date);
- return !isNaN(date) ? new Date(date) : null;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],130:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = toFloat;
- var _isFloat = _interopRequireDefault(require("./isFloat"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function toFloat(str) {
- if (!(0, _isFloat.default)(str)) return NaN;
- return parseFloat(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./isFloat":69}],131:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = toInt;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function toInt(str, radix) {
- (0, _assertString.default)(str);
- return parseInt(str, radix || 10);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],132:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = trim;
- var _rtrim = _interopRequireDefault(require("./rtrim"));
- var _ltrim = _interopRequireDefault(require("./ltrim"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function trim(str, chars) {
- return (0, _rtrim.default)((0, _ltrim.default)(str, chars), chars);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./ltrim":123,"./rtrim":126}],133:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = unescape;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function unescape(str) {
- (0, _assertString.default)(str);
- return str.replace(/"/g, '"').replace(/'/g, "'").replace(/</g, '<').replace(/>/g, '>').replace(///g, '/').replace(/\/g, '\\').replace(/`/g, '`').replace(/&/g, '&'); // & replacement has to be the last one to prevent
- // bugs with intermediate strings containing escape sequences
- // See: https://github.com/validatorjs/validator.js/issues/1827
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],134:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.iso7064Check = iso7064Check;
- exports.luhnCheck = luhnCheck;
- exports.reverseMultiplyAndSum = reverseMultiplyAndSum;
- exports.verhoeffCheck = verhoeffCheck;
- /**
- * Algorithmic validation functions
- * May be used as is or implemented in the workflow of other validators.
- */
- /*
- * ISO 7064 validation function
- * Called with a string of numbers (incl. check digit)
- * to validate according to ISO 7064 (MOD 11, 10).
- */
- function iso7064Check(str) {
- var checkvalue = 10;
- for (var i = 0; i < str.length - 1; i++) {
- checkvalue = (parseInt(str[i], 10) + checkvalue) % 10 === 0 ? 10 * 2 % 11 : (parseInt(str[i], 10) + checkvalue) % 10 * 2 % 11;
- }
- checkvalue = checkvalue === 1 ? 0 : 11 - checkvalue;
- return checkvalue === parseInt(str[10], 10);
- }
- /*
- * Luhn (mod 10) validation function
- * Called with a string of numbers (incl. check digit)
- * to validate according to the Luhn algorithm.
- */
- function luhnCheck(str) {
- var checksum = 0;
- var second = false;
- for (var i = str.length - 1; i >= 0; i--) {
- if (second) {
- var product = parseInt(str[i], 10) * 2;
- if (product > 9) {
- // sum digits of product and add to checksum
- checksum += product.toString().split('').map(function (a) {
- return parseInt(a, 10);
- }).reduce(function (a, b) {
- return a + b;
- }, 0);
- } else {
- checksum += product;
- }
- } else {
- checksum += parseInt(str[i], 10);
- }
- second = !second;
- }
- return checksum % 10 === 0;
- }
- /*
- * Reverse TIN multiplication and summation helper function
- * Called with an array of single-digit integers and a base multiplier
- * to calculate the sum of the digits multiplied in reverse.
- * Normally used in variations of MOD 11 algorithmic checks.
- */
- function reverseMultiplyAndSum(digits, base) {
- var total = 0;
- for (var i = 0; i < digits.length; i++) {
- total += digits[i] * (base - i);
- }
- return total;
- }
- /*
- * Verhoeff validation helper function
- * Called with a string of numbers
- * to validate according to the Verhoeff algorithm.
- */
- function verhoeffCheck(str) {
- var d_table = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 0, 6, 7, 8, 9, 5], [2, 3, 4, 0, 1, 7, 8, 9, 5, 6], [3, 4, 0, 1, 2, 8, 9, 5, 6, 7], [4, 0, 1, 2, 3, 9, 5, 6, 7, 8], [5, 9, 8, 7, 6, 0, 4, 3, 2, 1], [6, 5, 9, 8, 7, 1, 0, 4, 3, 2], [7, 6, 5, 9, 8, 2, 1, 0, 4, 3], [8, 7, 6, 5, 9, 3, 2, 1, 0, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]];
- var p_table = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 5, 7, 6, 2, 8, 3, 0, 9, 4], [5, 8, 0, 3, 7, 9, 6, 1, 4, 2], [8, 9, 1, 6, 0, 4, 3, 5, 2, 7], [9, 4, 5, 3, 1, 2, 6, 8, 7, 0], [4, 2, 8, 6, 5, 7, 3, 9, 0, 1], [2, 7, 9, 3, 8, 0, 6, 4, 1, 5], [7, 0, 4, 6, 9, 1, 3, 2, 5, 8]]; // Copy (to prevent replacement) and reverse
- var str_copy = str.split('').reverse().join('');
- var checksum = 0;
- for (var i = 0; i < str_copy.length; i++) {
- checksum = d_table[checksum][p_table[i % 8][parseInt(str_copy[i], 10)]];
- }
- return checksum === 0;
- }
- },{}],135:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = assertString;
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return 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 assertString(input) {
- var isString = typeof input === 'string' || input instanceof String;
- if (!isString) {
- var invalidType = _typeof(input);
- if (input === null) invalidType = 'null';else if (invalidType === 'object') invalidType = input.constructor.name;
- throw new TypeError("Expected a string but received a ".concat(invalidType));
- }
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{}],136:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var includes = function includes(arr, val) {
- return arr.some(function (arrVal) {
- return val === arrVal;
- });
- };
- var _default = includes;
- exports.default = _default;
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{}],137:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = merge;
- function merge() {
- var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- var defaults = arguments.length > 1 ? arguments[1] : undefined;
- for (var key in defaults) {
- if (typeof obj[key] === 'undefined') {
- obj[key] = defaults[key];
- }
- }
- return obj;
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{}],138:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = multilineRegexp;
- /**
- * Build RegExp object from an array
- * of multiple/multi-line regexp parts
- *
- * @param {string[]} parts
- * @param {string} flags
- * @return {object} - RegExp object
- */
- function multilineRegexp(parts, flags) {
- var regexpAsStringLiteral = parts.join('');
- return new RegExp(regexpAsStringLiteral, flags);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{}],139:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = toString;
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return 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 toString(input) {
- if (_typeof(input) === 'object' && input !== null) {
- if (typeof input.toString === 'function') {
- input = input.toString();
- } else {
- input = '[object Object]';
- }
- } else if (input === null || typeof input === 'undefined' || isNaN(input) && !input.length) {
- input = '';
- }
- return String(input);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{}],140:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = whitelist;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function whitelist(str, chars) {
- (0, _assertString.default)(str);
- return str.replace(new RegExp("[^".concat(chars, "]+"), 'g'), '');
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
- },{"./util/assertString":135}],141:[function(require,module,exports){
- module.exports = extend
- var hasOwnProperty = Object.prototype.hasOwnProperty;
- function extend() {
- var target = {}
- for (var i = 0; i < arguments.length; i++) {
- var source = arguments[i]
- for (var key in source) {
- if (hasOwnProperty.call(source, key)) {
- target[key] = source[key]
- }
- }
- }
- return target
- }
- },{}],142:[function(require,module,exports){
- "use strict";
- module.exports = {
- INVALID_TYPE: "Expected type {0} but found type {1}",
- INVALID_FORMAT: "Object didn't pass validation for format {0}: {1}",
- ENUM_MISMATCH: "No enum match for: {0}",
- ENUM_CASE_MISMATCH: "Enum does not match case for: {0}",
- ANY_OF_MISSING: "Data does not match any schemas from 'anyOf'",
- ONE_OF_MISSING: "Data does not match any schemas from 'oneOf'",
- ONE_OF_MULTIPLE: "Data is valid against more than one schema from 'oneOf'",
- NOT_PASSED: "Data matches schema from 'not'",
- // Array errors
- ARRAY_LENGTH_SHORT: "Array is too short ({0}), minimum {1}",
- ARRAY_LENGTH_LONG: "Array is too long ({0}), maximum {1}",
- ARRAY_UNIQUE: "Array items are not unique (indexes {0} and {1})",
- ARRAY_ADDITIONAL_ITEMS: "Additional items not allowed",
- // Numeric errors
- MULTIPLE_OF: "Value {0} is not a multiple of {1}",
- MINIMUM: "Value {0} is less than minimum {1}",
- MINIMUM_EXCLUSIVE: "Value {0} is equal or less than exclusive minimum {1}",
- MAXIMUM: "Value {0} is greater than maximum {1}",
- MAXIMUM_EXCLUSIVE: "Value {0} is equal or greater than exclusive maximum {1}",
- // Object errors
- OBJECT_PROPERTIES_MINIMUM: "Too few properties defined ({0}), minimum {1}",
- OBJECT_PROPERTIES_MAXIMUM: "Too many properties defined ({0}), maximum {1}",
- OBJECT_MISSING_REQUIRED_PROPERTY: "Missing required property: {0}",
- OBJECT_ADDITIONAL_PROPERTIES: "Additional properties not allowed: {0}",
- OBJECT_DEPENDENCY_KEY: "Dependency failed - key must exist: {0} (due to key: {1})",
- // String errors
- MIN_LENGTH: "String is too short ({0} chars), minimum {1}",
- MAX_LENGTH: "String is too long ({0} chars), maximum {1}",
- PATTERN: "String does not match pattern {0}: {1}",
- // Schema validation errors
- KEYWORD_TYPE_EXPECTED: "Keyword '{0}' is expected to be of type '{1}'",
- KEYWORD_UNDEFINED_STRICT: "Keyword '{0}' must be defined in strict mode",
- KEYWORD_UNEXPECTED: "Keyword '{0}' is not expected to appear in the schema",
- KEYWORD_MUST_BE: "Keyword '{0}' must be {1}",
- KEYWORD_DEPENDENCY: "Keyword '{0}' requires keyword '{1}'",
- KEYWORD_PATTERN: "Keyword '{0}' is not a valid RegExp pattern: {1}",
- KEYWORD_VALUE_TYPE: "Each element of keyword '{0}' array must be a '{1}'",
- UNKNOWN_FORMAT: "There is no validation function for format '{0}'",
- CUSTOM_MODE_FORCE_PROPERTIES: "{0} must define at least one property if present",
- // Remote errors
- REF_UNRESOLVED: "Reference has not been resolved during compilation: {0}",
- UNRESOLVABLE_REFERENCE: "Reference could not be resolved: {0}",
- SCHEMA_NOT_REACHABLE: "Validator was not able to read schema with uri: {0}",
- SCHEMA_TYPE_EXPECTED: "Schema is expected to be of type 'object'",
- SCHEMA_NOT_AN_OBJECT: "Schema is not an object: {0}",
- ASYNC_TIMEOUT: "{0} asynchronous task(s) have timed out after {1} ms",
- PARENT_SCHEMA_VALIDATION_FAILED: "Schema failed to validate against its parent schema, see inner errors for details.",
- REMOTE_NOT_VALID: "Remote reference didn't compile successfully: {0}"
- };
- },{}],143:[function(require,module,exports){
- /*jshint maxlen: false*/
- var validator = require("validator");
- var FormatValidators = {
- "date": function (date) {
- if (typeof date !== "string") {
- return true;
- }
- // full-date from http://tools.ietf.org/html/rfc3339#section-5.6
- var matches = /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/.exec(date);
- if (matches === null) {
- return false;
- }
- // var year = matches[1];
- // var month = matches[2];
- // var day = matches[3];
- if (matches[2] < "01" || matches[2] > "12" || matches[3] < "01" || matches[3] > "31") {
- return false;
- }
- return true;
- },
- "date-time": function (dateTime) {
- if (typeof dateTime !== "string") {
- return true;
- }
- // date-time from http://tools.ietf.org/html/rfc3339#section-5.6
- var s = dateTime.toLowerCase().split("t");
- if (!FormatValidators.date(s[0])) {
- return false;
- }
- var matches = /^([0-9]{2}):([0-9]{2}):([0-9]{2})(.[0-9]+)?(z|([+-][0-9]{2}:[0-9]{2}))$/.exec(s[1]);
- if (matches === null) {
- return false;
- }
- // var hour = matches[1];
- // var minute = matches[2];
- // var second = matches[3];
- // var fraction = matches[4];
- // var timezone = matches[5];
- if (matches[1] > "23" || matches[2] > "59" || matches[3] > "59") {
- return false;
- }
- return true;
- },
- "email": function (email) {
- if (typeof email !== "string") {
- return true;
- }
- return validator.isEmail(email, { "require_tld": true });
- },
- "hostname": function (hostname) {
- if (typeof hostname !== "string") {
- return true;
- }
- /*
- http://json-schema.org/latest/json-schema-validation.html#anchor114
- A string instance is valid against this attribute if it is a valid
- representation for an Internet host name, as defined by RFC 1034, section 3.1 [RFC1034].
- http://tools.ietf.org/html/rfc1034#section-3.5
- <digit> ::= any one of the ten digits 0 through 9
- var digit = /[0-9]/;
- <letter> ::= any one of the 52 alphabetic characters A through Z in upper case and a through z in lower case
- var letter = /[a-zA-Z]/;
- <let-dig> ::= <letter> | <digit>
- var letDig = /[0-9a-zA-Z]/;
- <let-dig-hyp> ::= <let-dig> | "-"
- var letDigHyp = /[-0-9a-zA-Z]/;
- <ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
- var ldhStr = /[-0-9a-zA-Z]+/;
- <label> ::= <letter> [ [ <ldh-str> ] <let-dig> ]
- var label = /[a-zA-Z](([-0-9a-zA-Z]+)?[0-9a-zA-Z])?/;
- <subdomain> ::= <label> | <subdomain> "." <label>
- var subdomain = /^[a-zA-Z](([-0-9a-zA-Z]+)?[0-9a-zA-Z])?(\.[a-zA-Z](([-0-9a-zA-Z]+)?[0-9a-zA-Z])?)*$/;
- <domain> ::= <subdomain> | " "
- var domain = null;
- */
- var valid = /^[a-zA-Z](([-0-9a-zA-Z]+)?[0-9a-zA-Z])?(\.[a-zA-Z](([-0-9a-zA-Z]+)?[0-9a-zA-Z])?)*$/.test(hostname);
- if (valid) {
- // the sum of all label octets and label lengths is limited to 255.
- if (hostname.length > 255) { return false; }
- // Each node has a label, which is zero to 63 octets in length
- var labels = hostname.split(".");
- for (var i = 0; i < labels.length; i++) { if (labels[i].length > 63) { return false; } }
- }
- return valid;
- },
- "host-name": function (hostname) {
- return FormatValidators.hostname.call(this, hostname);
- },
- "ipv4": function (ipv4) {
- if (typeof ipv4 !== "string") { return true; }
- return validator.isIP(ipv4, 4);
- },
- "ipv6": function (ipv6) {
- if (typeof ipv6 !== "string") { return true; }
- return validator.isIP(ipv6, 6);
- },
- "regex": function (str) {
- try {
- RegExp(str);
- return true;
- } catch (e) {
- return false;
- }
- },
- "uri": function (uri) {
- if (this.options.strictUris) {
- return FormatValidators["strict-uri"].apply(this, arguments);
- }
- // https://github.com/zaggino/z-schema/issues/18
- // RegExp from http://tools.ietf.org/html/rfc3986#appendix-B
- return typeof uri !== "string" || RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?").test(uri);
- },
- "strict-uri": function (uri) {
- return typeof uri !== "string" || validator.isURL(uri);
- }
- };
- module.exports = FormatValidators;
- },{"validator":40}],144:[function(require,module,exports){
- "use strict";
- var FormatValidators = require("./FormatValidators"),
- Report = require("./Report"),
- Utils = require("./Utils");
- var shouldSkipValidate = function (options, errors) {
- return options &&
- Array.isArray(options.includeErrors) &&
- options.includeErrors.length > 0 &&
- !errors.some(function (err) { return options.includeErrors.includes(err);});
- };
- var JsonValidators = {
- multipleOf: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.1.1.2
- if (shouldSkipValidate(this.validateOptions, ["MULTIPLE_OF"])) {
- return;
- }
- if (typeof json !== "number") {
- return;
- }
- var stringMultipleOf = String(schema.multipleOf);
- var scale = Math.pow(10, stringMultipleOf.length - stringMultipleOf.indexOf(".") - 1);
- if (Utils.whatIs((json * scale) / (schema.multipleOf * scale)) !== "integer") {
- report.addError("MULTIPLE_OF", [json, schema.multipleOf], null, schema);
- }
- },
- maximum: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.1.2.2
- if (shouldSkipValidate(this.validateOptions, ["MAXIMUM", "MAXIMUM_EXCLUSIVE"])) {
- return;
- }
- if (typeof json !== "number") {
- return;
- }
- if (schema.exclusiveMaximum !== true) {
- if (json > schema.maximum) {
- report.addError("MAXIMUM", [json, schema.maximum], null, schema);
- }
- } else {
- if (json >= schema.maximum) {
- report.addError("MAXIMUM_EXCLUSIVE", [json, schema.maximum], null, schema);
- }
- }
- },
- exclusiveMaximum: function () {
- // covered in maximum
- },
- minimum: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.1.3.2
- if (shouldSkipValidate(this.validateOptions, ["MINIMUM", "MINIMUM_EXCLUSIVE"])) {
- return;
- }
- if (typeof json !== "number") {
- return;
- }
- if (schema.exclusiveMinimum !== true) {
- if (json < schema.minimum) {
- report.addError("MINIMUM", [json, schema.minimum], null, schema);
- }
- } else {
- if (json <= schema.minimum) {
- report.addError("MINIMUM_EXCLUSIVE", [json, schema.minimum], null, schema);
- }
- }
- },
- exclusiveMinimum: function () {
- // covered in minimum
- },
- maxLength: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.2.1.2
- if (shouldSkipValidate(this.validateOptions, ["MAX_LENGTH"])) {
- return;
- }
- if (typeof json !== "string") {
- return;
- }
- if (Utils.ucs2decode(json).length > schema.maxLength) {
- report.addError("MAX_LENGTH", [json.length, schema.maxLength], null, schema);
- }
- },
- minLength: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.2.2.2
- if (shouldSkipValidate(this.validateOptions, ["MIN_LENGTH"])) {
- return;
- }
- if (typeof json !== "string") {
- return;
- }
- if (Utils.ucs2decode(json).length < schema.minLength) {
- report.addError("MIN_LENGTH", [json.length, schema.minLength], null, schema);
- }
- },
- pattern: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.2.3.2
- if (shouldSkipValidate(this.validateOptions, ["PATTERN"])) {
- return;
- }
- if (typeof json !== "string") {
- return;
- }
- if (RegExp(schema.pattern).test(json) === false) {
- report.addError("PATTERN", [schema.pattern, json], null, schema);
- }
- },
- additionalItems: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.3.1.2
- if (shouldSkipValidate(this.validateOptions, ["ARRAY_ADDITIONAL_ITEMS"])) {
- return;
- }
- if (!Array.isArray(json)) {
- return;
- }
- // if the value of "additionalItems" is boolean value false and the value of "items" is an array,
- // the json is valid if its size is less than, or equal to, the size of "items".
- if (schema.additionalItems === false && Array.isArray(schema.items)) {
- if (json.length > schema.items.length) {
- report.addError("ARRAY_ADDITIONAL_ITEMS", null, null, schema);
- }
- }
- },
- items: function () { /*report, schema, json*/
- // covered in additionalItems
- },
- maxItems: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.3.2.2
- if (shouldSkipValidate(this.validateOptions, ["ARRAY_LENGTH_LONG"])) {
- return;
- }
- if (!Array.isArray(json)) {
- return;
- }
- if (json.length > schema.maxItems) {
- report.addError("ARRAY_LENGTH_LONG", [json.length, schema.maxItems], null, schema);
- }
- },
- minItems: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.3.3.2
- if (shouldSkipValidate(this.validateOptions, ["ARRAY_LENGTH_SHORT"])) {
- return;
- }
- if (!Array.isArray(json)) {
- return;
- }
- if (json.length < schema.minItems) {
- report.addError("ARRAY_LENGTH_SHORT", [json.length, schema.minItems], null, schema);
- }
- },
- uniqueItems: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.3.4.2
- if (shouldSkipValidate(this.validateOptions, ["ARRAY_UNIQUE"])) {
- return;
- }
- if (!Array.isArray(json)) {
- return;
- }
- if (schema.uniqueItems === true) {
- var matches = [];
- if (Utils.isUniqueArray(json, matches) === false) {
- report.addError("ARRAY_UNIQUE", matches, null, schema);
- }
- }
- },
- maxProperties: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.4.1.2
- if (shouldSkipValidate(this.validateOptions, ["OBJECT_PROPERTIES_MAXIMUM"])) {
- return;
- }
- if (Utils.whatIs(json) !== "object") {
- return;
- }
- var keysCount = Object.keys(json).length;
- if (keysCount > schema.maxProperties) {
- report.addError("OBJECT_PROPERTIES_MAXIMUM", [keysCount, schema.maxProperties], null, schema);
- }
- },
- minProperties: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.4.2.2
- if (shouldSkipValidate(this.validateOptions, ["OBJECT_PROPERTIES_MINIMUM"])) {
- return;
- }
- if (Utils.whatIs(json) !== "object") {
- return;
- }
- var keysCount = Object.keys(json).length;
- if (keysCount < schema.minProperties) {
- report.addError("OBJECT_PROPERTIES_MINIMUM", [keysCount, schema.minProperties], null, schema);
- }
- },
- required: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.4.3.2
- if (shouldSkipValidate(this.validateOptions, ["OBJECT_MISSING_REQUIRED_PROPERTY"])) {
- return;
- }
- if (Utils.whatIs(json) !== "object") {
- return;
- }
- var idx = schema.required.length;
- while (idx--) {
- var requiredPropertyName = schema.required[idx];
- if (json[requiredPropertyName] === undefined) {
- report.addError("OBJECT_MISSING_REQUIRED_PROPERTY", [requiredPropertyName], null, schema);
- }
- }
- },
- additionalProperties: function (report, schema, json) {
- // covered in properties and patternProperties
- if (schema.properties === undefined && schema.patternProperties === undefined) {
- return JsonValidators.properties.call(this, report, schema, json);
- }
- },
- patternProperties: function (report, schema, json) {
- // covered in properties
- if (schema.properties === undefined) {
- return JsonValidators.properties.call(this, report, schema, json);
- }
- },
- properties: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.4.4.2
- if (shouldSkipValidate(this.validateOptions, ["OBJECT_ADDITIONAL_PROPERTIES"])) {
- return;
- }
- if (Utils.whatIs(json) !== "object") {
- return;
- }
- var properties = schema.properties !== undefined ? schema.properties : {};
- var patternProperties = schema.patternProperties !== undefined ? schema.patternProperties : {};
- if (schema.additionalProperties === false) {
- // The property set of the json to validate.
- var s = Object.keys(json);
- // The property set from "properties".
- var p = Object.keys(properties);
- // The property set from "patternProperties".
- var pp = Object.keys(patternProperties);
- // remove from "s" all elements of "p", if any;
- s = Utils.difference(s, p);
- // for each regex in "pp", remove all elements of "s" which this regex matches.
- var idx = pp.length;
- while (idx--) {
- var regExp = RegExp(pp[idx]),
- idx2 = s.length;
- while (idx2--) {
- if (regExp.test(s[idx2]) === true) {
- s.splice(idx2, 1);
- }
- }
- }
- // Validation of the json succeeds if, after these two steps, set "s" is empty.
- if (s.length > 0) {
- // assumeAdditional can be an array of allowed properties
- var idx3 = this.options.assumeAdditional.length;
- if (idx3) {
- while (idx3--) {
- var io = s.indexOf(this.options.assumeAdditional[idx3]);
- if (io !== -1) {
- s.splice(io, 1);
- }
- }
- }
- var idx4 = s.length;
- if (idx4) {
- while (idx4--) {
- report.addError("OBJECT_ADDITIONAL_PROPERTIES", [s[idx4]], null, schema);
- }
- }
- }
- }
- },
- dependencies: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.4.5.2
- if (shouldSkipValidate(this.validateOptions, ["OBJECT_DEPENDENCY_KEY"])) {
- return;
- }
- if (Utils.whatIs(json) !== "object") {
- return;
- }
- var keys = Object.keys(schema.dependencies),
- idx = keys.length;
- while (idx--) {
- // iterate all dependencies
- var dependencyName = keys[idx];
- if (json[dependencyName]) {
- var dependencyDefinition = schema.dependencies[dependencyName];
- if (Utils.whatIs(dependencyDefinition) === "object") {
- // if dependency is a schema, validate against this schema
- exports.validate.call(this, report, dependencyDefinition, json);
- } else { // Array
- // if dependency is an array, object needs to have all properties in this array
- var idx2 = dependencyDefinition.length;
- while (idx2--) {
- var requiredPropertyName = dependencyDefinition[idx2];
- if (json[requiredPropertyName] === undefined) {
- report.addError("OBJECT_DEPENDENCY_KEY", [requiredPropertyName, dependencyName], null, schema);
- }
- }
- }
- }
- }
- },
- enum: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.5.1.2
- if (shouldSkipValidate(this.validateOptions, ["ENUM_CASE_MISMATCH", "ENUM_MISMATCH"])) {
- return;
- }
- var match = false,
- caseInsensitiveMatch = false,
- idx = schema.enum.length;
- while (idx--) {
- if (Utils.areEqual(json, schema.enum[idx])) {
- match = true;
- break;
- } else if (Utils.areEqual(json, schema.enum[idx]), { caseInsensitiveComparison: true }) {
- caseInsensitiveMatch = true;
- }
- }
- if (match === false) {
- var error = caseInsensitiveMatch && this.options.enumCaseInsensitiveComparison ? "ENUM_CASE_MISMATCH" : "ENUM_MISMATCH";
- report.addError(error, [json], null, schema);
- }
- },
- type: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.5.2.2
- if (shouldSkipValidate(this.validateOptions, ["INVALID_TYPE"])) {
- return;
- }
- var jsonType = Utils.whatIs(json);
- if (typeof schema.type === "string") {
- if (jsonType !== schema.type && (jsonType !== "integer" || schema.type !== "number")) {
- report.addError("INVALID_TYPE", [schema.type, jsonType], null, schema);
- }
- } else {
- if (schema.type.indexOf(jsonType) === -1 && (jsonType !== "integer" || schema.type.indexOf("number") === -1)) {
- report.addError("INVALID_TYPE", [schema.type, jsonType], null, schema);
- }
- }
- },
- allOf: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.5.3.2
- var idx = schema.allOf.length;
- while (idx--) {
- var validateResult = exports.validate.call(this, report, schema.allOf[idx], json);
- if (this.options.breakOnFirstError && validateResult === false) {
- break;
- }
- }
- },
- anyOf: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.5.4.2
- var subReports = [],
- passed = false,
- idx = schema.anyOf.length;
- while (idx-- && passed === false) {
- var subReport = new Report(report);
- subReports.push(subReport);
- passed = exports.validate.call(this, subReport, schema.anyOf[idx], json);
- }
- if (passed === false) {
- report.addError("ANY_OF_MISSING", undefined, subReports, schema);
- }
- },
- oneOf: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.5.5.2
- var passes = 0,
- subReports = [],
- idx = schema.oneOf.length;
- while (idx--) {
- var subReport = new Report(report, { maxErrors: 1 });
- subReports.push(subReport);
- if (exports.validate.call(this, subReport, schema.oneOf[idx], json) === true) {
- passes++;
- }
- }
- if (passes === 0) {
- report.addError("ONE_OF_MISSING", undefined, subReports, schema);
- } else if (passes > 1) {
- report.addError("ONE_OF_MULTIPLE", null, null, schema);
- }
- },
- not: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.5.6.2
- var subReport = new Report(report);
- if (exports.validate.call(this, subReport, schema.not, json) === true) {
- report.addError("NOT_PASSED", null, null, schema);
- }
- },
- definitions: function () { /*report, schema, json*/
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.5.7.2
- // nothing to do here
- },
- format: function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.7.2
- var formatValidatorFn = FormatValidators[schema.format];
- if (typeof formatValidatorFn === "function") {
- if (shouldSkipValidate(this.validateOptions, ["INVALID_FORMAT"])) {
- return;
- }
- if (formatValidatorFn.length === 2) {
- // async - need to clone the path here, because it will change by the time async function reports back
- var pathBeforeAsync = Utils.clone(report.path);
- report.addAsyncTask(formatValidatorFn, [json], function (result) {
- if (result !== true) {
- var backup = report.path;
- report.path = pathBeforeAsync;
- report.addError("INVALID_FORMAT", [schema.format, json], null, schema);
- report.path = backup;
- }
- });
- } else {
- // sync
- if (formatValidatorFn.call(this, json) !== true) {
- report.addError("INVALID_FORMAT", [schema.format, json], null, schema);
- }
- }
- } else if (this.options.ignoreUnknownFormats !== true) {
- report.addError("UNKNOWN_FORMAT", [schema.format], null, schema);
- }
- }
- };
- var recurseArray = function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.8.2
- var idx = json.length;
- // If "items" is an array, this situation, the schema depends on the index:
- // if the index is less than, or equal to, the size of "items",
- // the child instance must be valid against the corresponding schema in the "items" array;
- // otherwise, it must be valid against the schema defined by "additionalItems".
- if (Array.isArray(schema.items)) {
- while (idx--) {
- // equal to doesn't make sense here
- if (idx < schema.items.length) {
- report.path.push(idx);
- exports.validate.call(this, report, schema.items[idx], json[idx]);
- report.path.pop();
- } else {
- // might be boolean, so check that it's an object
- if (typeof schema.additionalItems === "object") {
- report.path.push(idx);
- exports.validate.call(this, report, schema.additionalItems, json[idx]);
- report.path.pop();
- }
- }
- }
- } else if (typeof schema.items === "object") {
- // If items is a schema, then the child instance must be valid against this schema,
- // regardless of its index, and regardless of the value of "additionalItems".
- while (idx--) {
- report.path.push(idx);
- exports.validate.call(this, report, schema.items, json[idx]);
- report.path.pop();
- }
- }
- };
- var recurseObject = function (report, schema, json) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.8.3
- // If "additionalProperties" is absent, it is considered present with an empty schema as a value.
- // In addition, boolean value true is considered equivalent to an empty schema.
- var additionalProperties = schema.additionalProperties;
- if (additionalProperties === true || additionalProperties === undefined) {
- additionalProperties = {};
- }
- // p - The property set from "properties".
- var p = schema.properties ? Object.keys(schema.properties) : [];
- // pp - The property set from "patternProperties". Elements of this set will be called regexes for convenience.
- var pp = schema.patternProperties ? Object.keys(schema.patternProperties) : [];
- // m - The property name of the child.
- var keys = Object.keys(json),
- idx = keys.length;
- while (idx--) {
- var m = keys[idx],
- propertyValue = json[m];
- // s - The set of schemas for the child instance.
- var s = [];
- // 1. If set "p" contains value "m", then the corresponding schema in "properties" is added to "s".
- if (p.indexOf(m) !== -1) {
- s.push(schema.properties[m]);
- }
- // 2. For each regex in "pp", if it matches "m" successfully, the corresponding schema in "patternProperties" is added to "s".
- var idx2 = pp.length;
- while (idx2--) {
- var regexString = pp[idx2];
- if (RegExp(regexString).test(m) === true) {
- s.push(schema.patternProperties[regexString]);
- }
- }
- // 3. The schema defined by "additionalProperties" is added to "s" if and only if, at this stage, "s" is empty.
- if (s.length === 0 && additionalProperties !== false) {
- s.push(additionalProperties);
- }
- // we are passing tests even without this assert because this is covered by properties check
- // if s is empty in this stage, no additionalProperties are allowed
- // report.expect(s.length !== 0, 'E001', m);
- // Instance property value must pass all schemas from s
- idx2 = s.length;
- while (idx2--) {
- report.path.push(m);
- exports.validate.call(this, report, s[idx2], propertyValue);
- report.path.pop();
- }
- }
- };
- exports.JsonValidators = JsonValidators;
- /**
- *
- * @param {Report} report
- * @param {*} schema
- * @param {*} json
- */
- exports.validate = function (report, schema, json) {
- report.commonErrorMessage = "JSON_OBJECT_VALIDATION_FAILED";
- // check if schema is an object
- var to = Utils.whatIs(schema);
- if (to !== "object") {
- report.addError("SCHEMA_NOT_AN_OBJECT", [to], null, schema);
- return false;
- }
- // check if schema is empty, everything is valid against empty schema
- var keys = Object.keys(schema);
- if (keys.length === 0) {
- return true;
- }
- // this method can be called recursively, so we need to remember our root
- var isRoot = false;
- if (!report.rootSchema) {
- report.rootSchema = schema;
- isRoot = true;
- }
- // follow schema.$ref keys
- if (schema.$ref !== undefined) {
- // avoid infinite loop with maxRefs
- var maxRefs = 99;
- while (schema.$ref && maxRefs > 0) {
- if (!schema.__$refResolved) {
- report.addError("REF_UNRESOLVED", [schema.$ref], null, schema);
- break;
- } else if (schema.__$refResolved === schema) {
- break;
- } else {
- schema = schema.__$refResolved;
- keys = Object.keys(schema);
- }
- maxRefs--;
- }
- if (maxRefs === 0) {
- throw new Error("Circular dependency by $ref references!");
- }
- }
- // type checking first
- var jsonType = Utils.whatIs(json);
- if (schema.type) {
- keys.splice(keys.indexOf("type"), 1);
- JsonValidators.type.call(this, report, schema, json);
- if (report.errors.length && this.options.breakOnFirstError) {
- return false;
- }
- }
- // now iterate all the keys in schema and execute validation methods
- var idx = keys.length;
- while (idx--) {
- if (JsonValidators[keys[idx]]) {
- JsonValidators[keys[idx]].call(this, report, schema, json);
- if (report.errors.length && this.options.breakOnFirstError) { break; }
- }
- }
- if (report.errors.length === 0 || this.options.breakOnFirstError === false) {
- if (jsonType === "array") {
- recurseArray.call(this, report, schema, json);
- } else if (jsonType === "object") {
- recurseObject.call(this, report, schema, json);
- }
- }
- if (typeof this.options.customValidator === "function") {
- this.options.customValidator.call(this, report, schema, json);
- }
- // we don't need the root pointer anymore
- if (isRoot) {
- report.rootSchema = undefined;
- }
- // return valid just to be able to break at some code points
- return report.errors.length === 0;
- };
- },{"./FormatValidators":143,"./Report":146,"./Utils":150}],145:[function(require,module,exports){
- // Number.isFinite polyfill
- // http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isfinite
- if (typeof Number.isFinite !== "function") {
- Number.isFinite = function isFinite(value) {
- // 1. If Type(number) is not Number, return false.
- if (typeof value !== "number") {
- return false;
- }
- // 2. If number is NaN, +∞, or −∞, return false.
- if (value !== value || value === Infinity || value === -Infinity) {
- return false;
- }
- // 3. Otherwise, return true.
- return true;
- };
- }
- },{}],146:[function(require,module,exports){
- (function (process){(function (){
- "use strict";
- var get = require("lodash.get");
- var Errors = require("./Errors");
- var Utils = require("./Utils");
- /**
- * @class
- *
- * @param {Report|object} parentOrOptions
- * @param {object} [reportOptions]
- */
- function Report(parentOrOptions, reportOptions) {
- this.parentReport = parentOrOptions instanceof Report ?
- parentOrOptions :
- undefined;
- this.options = parentOrOptions instanceof Report ?
- parentOrOptions.options :
- parentOrOptions || {};
- this.reportOptions = reportOptions || {};
- this.errors = [];
- /**
- * @type {string[]}
- */
- this.path = [];
- this.asyncTasks = [];
- this.rootSchema = undefined;
- this.commonErrorMessage = undefined;
- this.json = undefined;
- }
- /**
- * @returns {boolean}
- */
- Report.prototype.isValid = function () {
- if (this.asyncTasks.length > 0) {
- throw new Error("Async tasks pending, can't answer isValid");
- }
- return this.errors.length === 0;
- };
- /**
- *
- * @param {*} fn
- * @param {*} args
- * @param {*} asyncTaskResultProcessFn
- */
- Report.prototype.addAsyncTask = function (fn, args, asyncTaskResultProcessFn) {
- this.asyncTasks.push([fn, args, asyncTaskResultProcessFn]);
- };
- Report.prototype.getAncestor = function (id) {
- if (!this.parentReport) {
- return undefined;
- }
- if (this.parentReport.getSchemaId() === id) {
- return this.parentReport;
- }
- return this.parentReport.getAncestor(id);
- };
- /**
- *
- * @param {*} timeout
- * @param {function(*, *)} callback
- *
- * @returns {void}
- */
- Report.prototype.processAsyncTasks = function (timeout, callback) {
- var validationTimeout = timeout || 2000,
- tasksCount = this.asyncTasks.length,
- idx = tasksCount,
- timedOut = false,
- self = this;
- function finish() {
- process.nextTick(function () {
- var valid = self.errors.length === 0,
- err = valid ? null : self.errors;
- callback(err, valid);
- });
- }
- function respond(asyncTaskResultProcessFn) {
- return function (asyncTaskResult) {
- if (timedOut) { return; }
- asyncTaskResultProcessFn(asyncTaskResult);
- if (--tasksCount === 0) {
- finish();
- }
- };
- }
- // finish if tasks are completed or there are any errors and breaking on first error was requested
- if (tasksCount === 0 || (this.errors.length > 0 && this.options.breakOnFirstError)) {
- finish();
- return;
- }
- while (idx--) {
- var task = this.asyncTasks[idx];
- task[0].apply(null, task[1].concat(respond(task[2])));
- }
- setTimeout(function () {
- if (tasksCount > 0) {
- timedOut = true;
- self.addError("ASYNC_TIMEOUT", [tasksCount, validationTimeout]);
- callback(self.errors, false);
- }
- }, validationTimeout);
- };
- /**
- *
- * @param {*} returnPathAsString
- *
- * @return {string[]|string}
- */
- Report.prototype.getPath = function (returnPathAsString) {
- /**
- * @type {string[]|string}
- */
- var path = [];
- if (this.parentReport) {
- path = path.concat(this.parentReport.path);
- }
- path = path.concat(this.path);
- if (returnPathAsString !== true) {
- // Sanitize the path segments (http://tools.ietf.org/html/rfc6901#section-4)
- path = "#/" + path.map(function (segment) {
- segment = segment.toString();
- if (Utils.isAbsoluteUri(segment)) {
- return "uri(" + segment + ")";
- }
- return segment.replace(/\~/g, "~0").replace(/\//g, "~1");
- }).join("/");
- }
- return path;
- };
- Report.prototype.getSchemaId = function () {
- if (!this.rootSchema) {
- return null;
- }
- // get the error path as an array
- var path = [];
- if (this.parentReport) {
- path = path.concat(this.parentReport.path);
- }
- path = path.concat(this.path);
- // try to find id in the error path
- while (path.length > 0) {
- var obj = get(this.rootSchema, path);
- if (obj && obj.id) { return obj.id; }
- path.pop();
- }
- // return id of the root
- return this.rootSchema.id;
- };
- /**
- *
- * @param {*} errorCode
- * @param {*} params
- *
- * @return {boolean}
- */
- Report.prototype.hasError = function (errorCode, params) {
- var idx = this.errors.length;
- while (idx--) {
- if (this.errors[idx].code === errorCode) {
- // assume match
- var match = true;
- // check the params too
- var idx2 = this.errors[idx].params.length;
- while (idx2--) {
- if (this.errors[idx].params[idx2] !== params[idx2]) {
- match = false;
- }
- }
- // if match, return true
- if (match) { return match; }
- }
- }
- return false;
- };
- /**
- *
- * @param {*} errorCode
- * @param {*} params
- * @param {Report[]|Report} [subReports]
- * @param {*} [schema]
- *
- * @return {void}
- */
- Report.prototype.addError = function (errorCode, params, subReports, schema) {
- if (!errorCode) { throw new Error("No errorCode passed into addError()"); }
- this.addCustomError(errorCode, Errors[errorCode], params, subReports, schema);
- };
- Report.prototype.getJson = function () {
- var self = this;
- while (self.json === undefined) {
- self = self.parentReport;
- if (self === undefined) {
- return undefined;
- }
- }
- return self.json;
- };
- /**
- *
- * @param {*} errorCode
- * @param {*} errorMessage
- * @param {*[]} params
- * @param {Report[]|Report} subReports
- * @param {*} schema
- *
- * @returns {void}
- */
- Report.prototype.addCustomError = function (errorCode, errorMessage, params, subReports, schema) {
- if (this.errors.length >= this.reportOptions.maxErrors) {
- return;
- }
- if (!errorMessage) { throw new Error("No errorMessage known for code " + errorCode); }
- params = params || [];
- var idx = params.length;
- while (idx--) {
- var whatIs = Utils.whatIs(params[idx]);
- var param = (whatIs === "object" || whatIs === "null") ? JSON.stringify(params[idx]) : params[idx];
- errorMessage = errorMessage.replace("{" + idx + "}", param);
- }
- var err = {
- code: errorCode,
- params: params,
- message: errorMessage,
- path: this.getPath(this.options.reportPathAsArray),
- schemaId: this.getSchemaId()
- };
- err[Utils.schemaSymbol] = schema;
- err[Utils.jsonSymbol] = this.getJson();
- if (schema && typeof schema === "string") {
- err.description = schema;
- } else if (schema && typeof schema === "object") {
- if (schema.title) {
- err.title = schema.title;
- }
- if (schema.description) {
- err.description = schema.description;
- }
- }
- if (subReports != null) {
- if (!Array.isArray(subReports)) {
- subReports = [subReports];
- }
- err.inner = [];
- idx = subReports.length;
- while (idx--) {
- var subReport = subReports[idx],
- idx2 = subReport.errors.length;
- while (idx2--) {
- err.inner.push(subReport.errors[idx2]);
- }
- }
- if (err.inner.length === 0) {
- err.inner = undefined;
- }
- }
- this.errors.push(err);
- };
- module.exports = Report;
- }).call(this)}).call(this,require('_process'))
- },{"./Errors":142,"./Utils":150,"_process":11,"lodash.get":9}],147:[function(require,module,exports){
- "use strict";
- var isequal = require("lodash.isequal");
- var Report = require("./Report");
- var SchemaCompilation = require("./SchemaCompilation");
- var SchemaValidation = require("./SchemaValidation");
- var Utils = require("./Utils");
- function decodeJSONPointer(str) {
- // http://tools.ietf.org/html/draft-ietf-appsawg-json-pointer-07#section-3
- return decodeURIComponent(str).replace(/~[0-1]/g, function (x) {
- return x === "~1" ? "/" : "~";
- });
- }
- function getRemotePath(uri) {
- var io = uri.indexOf("#");
- return io === -1 ? uri : uri.slice(0, io);
- }
- function getQueryPath(uri) {
- var io = uri.indexOf("#");
- var res = io === -1 ? undefined : uri.slice(io + 1);
- // WARN: do not slice slash, #/ means take root and go down from it
- // if (res && res[0] === "/") { res = res.slice(1); }
- return res;
- }
- function findId(schema, id) {
- // process only arrays and objects
- if (typeof schema !== "object" || schema === null) {
- return;
- }
- // no id means root so return itself
- if (!id) {
- return schema;
- }
- if (schema.id) {
- if (schema.id === id || schema.id[0] === "#" && schema.id.substring(1) === id) {
- return schema;
- }
- }
- var idx, result;
- if (Array.isArray(schema)) {
- idx = schema.length;
- while (idx--) {
- result = findId(schema[idx], id);
- if (result) { return result; }
- }
- } else {
- var keys = Object.keys(schema);
- idx = keys.length;
- while (idx--) {
- var k = keys[idx];
- if (k.indexOf("__$") === 0) {
- continue;
- }
- result = findId(schema[k], id);
- if (result) { return result; }
- }
- }
- }
- /**
- *
- * @param {*} uri
- * @param {*} schema
- *
- * @returns {void}
- */
- exports.cacheSchemaByUri = function (uri, schema) {
- var remotePath = getRemotePath(uri);
- if (remotePath) {
- this.cache[remotePath] = schema;
- }
- };
- /**
- *
- * @param {*} uri
- *
- * @returns {void}
- */
- exports.removeFromCacheByUri = function (uri) {
- var remotePath = getRemotePath(uri);
- if (remotePath) {
- delete this.cache[remotePath];
- }
- };
- /**
- *
- * @param {*} uri
- *
- * @returns {boolean}
- */
- exports.checkCacheForUri = function (uri) {
- var remotePath = getRemotePath(uri);
- return remotePath ? this.cache[remotePath] != null : false;
- };
- exports.getSchema = function (report, schema) {
- if (typeof schema === "object") {
- schema = exports.getSchemaByReference.call(this, report, schema);
- }
- if (typeof schema === "string") {
- schema = exports.getSchemaByUri.call(this, report, schema);
- }
- return schema;
- };
- exports.getSchemaByReference = function (report, key) {
- var i = this.referenceCache.length;
- while (i--) {
- if (isequal(this.referenceCache[i][0], key)) {
- return this.referenceCache[i][1];
- }
- }
- // not found
- var schema = Utils.cloneDeep(key);
- this.referenceCache.push([key, schema]);
- return schema;
- };
- exports.getSchemaByUri = function (report, uri, root) {
- var remotePath = getRemotePath(uri),
- queryPath = getQueryPath(uri),
- result = remotePath ? this.cache[remotePath] : root;
- if (result && remotePath) {
- // we need to avoid compiling schemas in a recursive loop
- var compileRemote = result !== root;
- // now we need to compile and validate resolved schema (in case it's not already)
- if (compileRemote) {
- report.path.push(remotePath);
- var remoteReport;
- var anscestorReport = report.getAncestor(result.id);
- if (anscestorReport) {
- remoteReport = anscestorReport;
- } else {
- remoteReport = new Report(report);
- if (SchemaCompilation.compileSchema.call(this, remoteReport, result)) {
- var savedOptions = this.options;
- try {
- // If custom validationOptions were provided to setRemoteReference(),
- // use them instead of the default options
- this.options = result.__$validationOptions || this.options;
- SchemaValidation.validateSchema.call(this, remoteReport, result);
- } finally {
- this.options = savedOptions;
- }
- }
- }
- var remoteReportIsValid = remoteReport.isValid();
- if (!remoteReportIsValid) {
- report.addError("REMOTE_NOT_VALID", [uri], remoteReport);
- }
- report.path.pop();
- if (!remoteReportIsValid) {
- return undefined;
- }
- }
- }
- if (result && queryPath) {
- var parts = queryPath.split("/");
- for (var idx = 0, lim = parts.length; result && idx < lim; idx++) {
- var key = decodeJSONPointer(parts[idx]);
- if (idx === 0) { // it's an id
- result = findId(result, key);
- } else { // it's a path behind id
- result = result[key];
- }
- }
- }
- return result;
- };
- exports.getRemotePath = getRemotePath;
- },{"./Report":146,"./SchemaCompilation":148,"./SchemaValidation":149,"./Utils":150,"lodash.isequal":10}],148:[function(require,module,exports){
- "use strict";
- var Report = require("./Report");
- var SchemaCache = require("./SchemaCache");
- var Utils = require("./Utils");
- function mergeReference(scope, ref) {
- if (Utils.isAbsoluteUri(ref)) {
- return ref;
- }
- var joinedScope = scope.join(""),
- isScopeAbsolute = Utils.isAbsoluteUri(joinedScope),
- isScopeRelative = Utils.isRelativeUri(joinedScope),
- isRefRelative = Utils.isRelativeUri(ref),
- toRemove;
- if (isScopeAbsolute && isRefRelative) {
- toRemove = joinedScope.match(/\/[^\/]*$/);
- if (toRemove) {
- joinedScope = joinedScope.slice(0, toRemove.index + 1);
- }
- } else if (isScopeRelative && isRefRelative) {
- joinedScope = "";
- } else {
- toRemove = joinedScope.match(/[^#/]+$/);
- if (toRemove) {
- joinedScope = joinedScope.slice(0, toRemove.index);
- }
- }
- var res = joinedScope + ref;
- res = res.replace(/##/, "#");
- return res;
- }
- function collectReferences(obj, results, scope, path) {
- results = results || [];
- scope = scope || [];
- path = path || [];
- if (typeof obj !== "object" || obj === null) {
- return results;
- }
- if (typeof obj.id === "string") {
- scope.push(obj.id);
- }
- if (typeof obj.$ref === "string" && typeof obj.__$refResolved === "undefined") {
- results.push({
- ref: mergeReference(scope, obj.$ref),
- key: "$ref",
- obj: obj,
- path: path.slice(0)
- });
- }
- if (typeof obj.$schema === "string" && typeof obj.__$schemaResolved === "undefined") {
- results.push({
- ref: mergeReference(scope, obj.$schema),
- key: "$schema",
- obj: obj,
- path: path.slice(0)
- });
- }
- var idx;
- if (Array.isArray(obj)) {
- idx = obj.length;
- while (idx--) {
- path.push(idx.toString());
- collectReferences(obj[idx], results, scope, path);
- path.pop();
- }
- } else {
- var keys = Object.keys(obj);
- idx = keys.length;
- while (idx--) {
- // do not recurse through resolved references and other z-schema props
- if (keys[idx].indexOf("__$") === 0) { continue; }
- path.push(keys[idx]);
- collectReferences(obj[keys[idx]], results, scope, path);
- path.pop();
- }
- }
- if (typeof obj.id === "string") {
- scope.pop();
- }
- return results;
- }
- var compileArrayOfSchemasLoop = function (mainReport, arr) {
- var idx = arr.length,
- compiledCount = 0;
- while (idx--) {
- // try to compile each schema separately
- var report = new Report(mainReport);
- var isValid = exports.compileSchema.call(this, report, arr[idx]);
- if (isValid) { compiledCount++; }
- // copy errors to report
- mainReport.errors = mainReport.errors.concat(report.errors);
- }
- return compiledCount;
- };
- function findId(arr, id) {
- var idx = arr.length;
- while (idx--) {
- if (arr[idx].id === id) {
- return arr[idx];
- }
- }
- return null;
- }
- var compileArrayOfSchemas = function (report, arr) {
- var compiled = 0,
- lastLoopCompiled;
- do {
- // remove all UNRESOLVABLE_REFERENCE errors before compiling array again
- var idx = report.errors.length;
- while (idx--) {
- if (report.errors[idx].code === "UNRESOLVABLE_REFERENCE") {
- report.errors.splice(idx, 1);
- }
- }
- // remember how many were compiled in the last loop
- lastLoopCompiled = compiled;
- // count how many are compiled now
- compiled = compileArrayOfSchemasLoop.call(this, report, arr);
- // fix __$missingReferences if possible
- idx = arr.length;
- while (idx--) {
- var sch = arr[idx];
- if (sch.__$missingReferences) {
- var idx2 = sch.__$missingReferences.length;
- while (idx2--) {
- var refObj = sch.__$missingReferences[idx2];
- var response = findId(arr, refObj.ref);
- if (response) {
- // this might create circular references
- refObj.obj["__" + refObj.key + "Resolved"] = response;
- // it's resolved now so delete it
- sch.__$missingReferences.splice(idx2, 1);
- }
- }
- if (sch.__$missingReferences.length === 0) {
- delete sch.__$missingReferences;
- }
- }
- }
- // keep repeating if not all compiled and at least one more was compiled in the last loop
- } while (compiled !== arr.length && compiled !== lastLoopCompiled);
- return report.isValid();
- };
- exports.compileSchema = function (report, schema) {
- report.commonErrorMessage = "SCHEMA_COMPILATION_FAILED";
- // if schema is a string, assume it's a uri
- if (typeof schema === "string") {
- var loadedSchema = SchemaCache.getSchemaByUri.call(this, report, schema);
- if (!loadedSchema) {
- report.addError("SCHEMA_NOT_REACHABLE", [schema]);
- return false;
- }
- schema = loadedSchema;
- }
- // if schema is an array, assume it's an array of schemas
- if (Array.isArray(schema)) {
- return compileArrayOfSchemas.call(this, report, schema);
- }
- // if we have an id than it should be cached already (if this instance has compiled it)
- if (schema.__$compiled && schema.id && SchemaCache.checkCacheForUri.call(this, schema.id) === false) {
- schema.__$compiled = undefined;
- }
- // do not re-compile schemas
- if (schema.__$compiled) {
- return true;
- }
- if (schema.id && typeof schema.id === "string") {
- // add this to our schemaCache (before compilation in case we have references including id)
- SchemaCache.cacheSchemaByUri.call(this, schema.id, schema);
- }
- // this method can be called recursively, so we need to remember our root
- var isRoot = false;
- if (!report.rootSchema) {
- report.rootSchema = schema;
- isRoot = true;
- }
- // delete all __$missingReferences from previous compilation attempts
- var isValidExceptReferences = report.isValid();
- delete schema.__$missingReferences;
- // collect all references that need to be resolved - $ref and $schema
- var refs = collectReferences.call(this, schema),
- idx = refs.length;
- while (idx--) {
- // resolve all the collected references into __xxxResolved pointer
- var refObj = refs[idx];
- var response = SchemaCache.getSchemaByUri.call(this, report, refObj.ref, schema);
- // we can try to use custom schemaReader if available
- if (!response) {
- var schemaReader = this.getSchemaReader();
- if (schemaReader) {
- // it's supposed to return a valid schema
- var s = schemaReader(refObj.ref);
- if (s) {
- // it needs to have the id
- s.id = refObj.ref;
- // try to compile the schema
- var subreport = new Report(report);
- if (!exports.compileSchema.call(this, subreport, s)) {
- // copy errors to report
- report.errors = report.errors.concat(subreport.errors);
- } else {
- response = SchemaCache.getSchemaByUri.call(this, report, refObj.ref, schema);
- }
- }
- }
- }
- if (!response) {
- var hasNotValid = report.hasError("REMOTE_NOT_VALID", [refObj.ref]);
- var isAbsolute = Utils.isAbsoluteUri(refObj.ref);
- var isDownloaded = false;
- var ignoreUnresolvableRemotes = this.options.ignoreUnresolvableReferences === true;
- if (isAbsolute) {
- // we shouldn't add UNRESOLVABLE_REFERENCE for schemas we already have downloaded
- // and set through setRemoteReference method
- isDownloaded = SchemaCache.checkCacheForUri.call(this, refObj.ref);
- }
- if (hasNotValid) {
- // already has REMOTE_NOT_VALID error for this one
- } else if (ignoreUnresolvableRemotes && isAbsolute) {
- // ignoreUnresolvableRemotes is on and remote isAbsolute
- } else if (isDownloaded) {
- // remote is downloaded, so no UNRESOLVABLE_REFERENCE
- } else {
- Array.prototype.push.apply(report.path, refObj.path);
- report.addError("UNRESOLVABLE_REFERENCE", [refObj.ref]);
- report.path = report.path.slice(0, -refObj.path.length);
- // pusblish unresolved references out
- if (isValidExceptReferences) {
- schema.__$missingReferences = schema.__$missingReferences || [];
- schema.__$missingReferences.push(refObj);
- }
- }
- }
- // this might create circular references
- refObj.obj["__" + refObj.key + "Resolved"] = response;
- }
- var isValid = report.isValid();
- if (isValid) {
- schema.__$compiled = true;
- } else {
- if (schema.id && typeof schema.id === "string") {
- // remove this schema from schemaCache because it failed to compile
- SchemaCache.removeFromCacheByUri.call(this, schema.id);
- }
- }
- // we don't need the root pointer anymore
- if (isRoot) {
- report.rootSchema = undefined;
- }
- return isValid;
- };
- },{"./Report":146,"./SchemaCache":147,"./Utils":150}],149:[function(require,module,exports){
- "use strict";
- var FormatValidators = require("./FormatValidators"),
- JsonValidation = require("./JsonValidation"),
- Report = require("./Report"),
- Utils = require("./Utils");
- var SchemaValidators = {
- $ref: function (report, schema) {
- // http://tools.ietf.org/html/draft-ietf-appsawg-json-pointer-07
- // http://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03
- if (typeof schema.$ref !== "string") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["$ref", "string"]);
- }
- },
- $schema: function (report, schema) {
- // http://json-schema.org/latest/json-schema-core.html#rfc.section.6
- if (typeof schema.$schema !== "string") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["$schema", "string"]);
- }
- },
- multipleOf: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.1.1.1
- if (typeof schema.multipleOf !== "number") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["multipleOf", "number"]);
- } else if (schema.multipleOf <= 0) {
- report.addError("KEYWORD_MUST_BE", ["multipleOf", "strictly greater than 0"]);
- }
- },
- maximum: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.1.2.1
- if (typeof schema.maximum !== "number") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["maximum", "number"]);
- }
- },
- exclusiveMaximum: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.1.2.1
- if (typeof schema.exclusiveMaximum !== "boolean") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["exclusiveMaximum", "boolean"]);
- } else if (schema.maximum === undefined) {
- report.addError("KEYWORD_DEPENDENCY", ["exclusiveMaximum", "maximum"]);
- }
- },
- minimum: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.1.3.1
- if (typeof schema.minimum !== "number") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["minimum", "number"]);
- }
- },
- exclusiveMinimum: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.1.3.1
- if (typeof schema.exclusiveMinimum !== "boolean") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["exclusiveMinimum", "boolean"]);
- } else if (schema.minimum === undefined) {
- report.addError("KEYWORD_DEPENDENCY", ["exclusiveMinimum", "minimum"]);
- }
- },
- maxLength: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.2.1.1
- if (Utils.whatIs(schema.maxLength) !== "integer") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["maxLength", "integer"]);
- } else if (schema.maxLength < 0) {
- report.addError("KEYWORD_MUST_BE", ["maxLength", "greater than, or equal to 0"]);
- }
- },
- minLength: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.2.2.1
- if (Utils.whatIs(schema.minLength) !== "integer") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["minLength", "integer"]);
- } else if (schema.minLength < 0) {
- report.addError("KEYWORD_MUST_BE", ["minLength", "greater than, or equal to 0"]);
- }
- },
- pattern: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.2.3.1
- if (typeof schema.pattern !== "string") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["pattern", "string"]);
- } else {
- try {
- RegExp(schema.pattern);
- } catch (e) {
- report.addError("KEYWORD_PATTERN", ["pattern", schema.pattern]);
- }
- }
- },
- additionalItems: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.3.1.1
- var type = Utils.whatIs(schema.additionalItems);
- if (type !== "boolean" && type !== "object") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["additionalItems", ["boolean", "object"]]);
- } else if (type === "object") {
- report.path.push("additionalItems");
- exports.validateSchema.call(this, report, schema.additionalItems);
- report.path.pop();
- }
- },
- items: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.3.1.1
- var type = Utils.whatIs(schema.items);
- if (type === "object") {
- report.path.push("items");
- exports.validateSchema.call(this, report, schema.items);
- report.path.pop();
- } else if (type === "array") {
- var idx = schema.items.length;
- while (idx--) {
- report.path.push("items");
- report.path.push(idx.toString());
- exports.validateSchema.call(this, report, schema.items[idx]);
- report.path.pop();
- report.path.pop();
- }
- } else {
- report.addError("KEYWORD_TYPE_EXPECTED", ["items", ["array", "object"]]);
- }
- // custom - strict mode
- if (this.options.forceAdditional === true && schema.additionalItems === undefined && Array.isArray(schema.items)) {
- report.addError("KEYWORD_UNDEFINED_STRICT", ["additionalItems"]);
- }
- // custome - assume defined false mode
- if (this.options.assumeAdditional && schema.additionalItems === undefined && Array.isArray(schema.items)) {
- schema.additionalItems = false;
- }
- },
- maxItems: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.3.2.1
- if (typeof schema.maxItems !== "number") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["maxItems", "integer"]);
- } else if (schema.maxItems < 0) {
- report.addError("KEYWORD_MUST_BE", ["maxItems", "greater than, or equal to 0"]);
- }
- },
- minItems: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.3.3.1
- if (Utils.whatIs(schema.minItems) !== "integer") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["minItems", "integer"]);
- } else if (schema.minItems < 0) {
- report.addError("KEYWORD_MUST_BE", ["minItems", "greater than, or equal to 0"]);
- }
- },
- uniqueItems: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.3.4.1
- if (typeof schema.uniqueItems !== "boolean") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["uniqueItems", "boolean"]);
- }
- },
- maxProperties: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.4.1.1
- if (Utils.whatIs(schema.maxProperties) !== "integer") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["maxProperties", "integer"]);
- } else if (schema.maxProperties < 0) {
- report.addError("KEYWORD_MUST_BE", ["maxProperties", "greater than, or equal to 0"]);
- }
- },
- minProperties: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.4.2.1
- if (Utils.whatIs(schema.minProperties) !== "integer") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["minProperties", "integer"]);
- } else if (schema.minProperties < 0) {
- report.addError("KEYWORD_MUST_BE", ["minProperties", "greater than, or equal to 0"]);
- }
- },
- required: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.4.3.1
- if (Utils.whatIs(schema.required) !== "array") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["required", "array"]);
- } else if (schema.required.length === 0) {
- report.addError("KEYWORD_MUST_BE", ["required", "an array with at least one element"]);
- } else {
- var idx = schema.required.length;
- while (idx--) {
- if (typeof schema.required[idx] !== "string") {
- report.addError("KEYWORD_VALUE_TYPE", ["required", "string"]);
- }
- }
- if (Utils.isUniqueArray(schema.required) === false) {
- report.addError("KEYWORD_MUST_BE", ["required", "an array with unique items"]);
- }
- }
- },
- additionalProperties: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.4.4.1
- var type = Utils.whatIs(schema.additionalProperties);
- if (type !== "boolean" && type !== "object") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["additionalProperties", ["boolean", "object"]]);
- } else if (type === "object") {
- report.path.push("additionalProperties");
- exports.validateSchema.call(this, report, schema.additionalProperties);
- report.path.pop();
- }
- },
- properties: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.4.4.1
- if (Utils.whatIs(schema.properties) !== "object") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["properties", "object"]);
- return;
- }
- var keys = Object.keys(schema.properties),
- idx = keys.length;
- while (idx--) {
- var key = keys[idx],
- val = schema.properties[key];
- report.path.push("properties");
- report.path.push(key);
- exports.validateSchema.call(this, report, val);
- report.path.pop();
- report.path.pop();
- }
- // custom - strict mode
- if (this.options.forceAdditional === true && schema.additionalProperties === undefined) {
- report.addError("KEYWORD_UNDEFINED_STRICT", ["additionalProperties"]);
- }
- // custome - assume defined false mode
- if (this.options.assumeAdditional && schema.additionalProperties === undefined) {
- schema.additionalProperties = false;
- }
- // custom - forceProperties
- if (this.options.forceProperties === true && keys.length === 0) {
- report.addError("CUSTOM_MODE_FORCE_PROPERTIES", ["properties"]);
- }
- },
- patternProperties: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.4.4.1
- if (Utils.whatIs(schema.patternProperties) !== "object") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["patternProperties", "object"]);
- return;
- }
- var keys = Object.keys(schema.patternProperties),
- idx = keys.length;
- while (idx--) {
- var key = keys[idx],
- val = schema.patternProperties[key];
- try {
- RegExp(key);
- } catch (e) {
- report.addError("KEYWORD_PATTERN", ["patternProperties", key]);
- }
- report.path.push("patternProperties");
- report.path.push(key.toString());
- exports.validateSchema.call(this, report, val);
- report.path.pop();
- report.path.pop();
- }
- // custom - forceProperties
- if (this.options.forceProperties === true && keys.length === 0) {
- report.addError("CUSTOM_MODE_FORCE_PROPERTIES", ["patternProperties"]);
- }
- },
- dependencies: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.4.5.1
- if (Utils.whatIs(schema.dependencies) !== "object") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["dependencies", "object"]);
- } else {
- var keys = Object.keys(schema.dependencies),
- idx = keys.length;
- while (idx--) {
- var schemaKey = keys[idx],
- schemaDependency = schema.dependencies[schemaKey],
- type = Utils.whatIs(schemaDependency);
- if (type === "object") {
- report.path.push("dependencies");
- report.path.push(schemaKey);
- exports.validateSchema.call(this, report, schemaDependency);
- report.path.pop();
- report.path.pop();
- } else if (type === "array") {
- var idx2 = schemaDependency.length;
- if (idx2 === 0) {
- report.addError("KEYWORD_MUST_BE", ["dependencies", "not empty array"]);
- }
- while (idx2--) {
- if (typeof schemaDependency[idx2] !== "string") {
- report.addError("KEYWORD_VALUE_TYPE", ["dependensices", "string"]);
- }
- }
- if (Utils.isUniqueArray(schemaDependency) === false) {
- report.addError("KEYWORD_MUST_BE", ["dependencies", "an array with unique items"]);
- }
- } else {
- report.addError("KEYWORD_VALUE_TYPE", ["dependencies", "object or array"]);
- }
- }
- }
- },
- enum: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.5.1.1
- if (Array.isArray(schema.enum) === false) {
- report.addError("KEYWORD_TYPE_EXPECTED", ["enum", "array"]);
- } else if (schema.enum.length === 0) {
- report.addError("KEYWORD_MUST_BE", ["enum", "an array with at least one element"]);
- } else if (Utils.isUniqueArray(schema.enum) === false) {
- report.addError("KEYWORD_MUST_BE", ["enum", "an array with unique elements"]);
- }
- },
- type: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.5.2.1
- var primitiveTypes = ["array", "boolean", "integer", "number", "null", "object", "string"],
- primitiveTypeStr = primitiveTypes.join(","),
- isArray = Array.isArray(schema.type);
- if (isArray) {
- var idx = schema.type.length;
- while (idx--) {
- if (primitiveTypes.indexOf(schema.type[idx]) === -1) {
- report.addError("KEYWORD_TYPE_EXPECTED", ["type", primitiveTypeStr]);
- }
- }
- if (Utils.isUniqueArray(schema.type) === false) {
- report.addError("KEYWORD_MUST_BE", ["type", "an object with unique properties"]);
- }
- } else if (typeof schema.type === "string") {
- if (primitiveTypes.indexOf(schema.type) === -1) {
- report.addError("KEYWORD_TYPE_EXPECTED", ["type", primitiveTypeStr]);
- }
- } else {
- report.addError("KEYWORD_TYPE_EXPECTED", ["type", ["string", "array"]]);
- }
- if (this.options.noEmptyStrings === true) {
- if (schema.type === "string" || isArray && schema.type.indexOf("string") !== -1) {
- if (schema.minLength === undefined &&
- schema.enum === undefined &&
- schema.format === undefined) {
- schema.minLength = 1;
- }
- }
- }
- if (this.options.noEmptyArrays === true) {
- if (schema.type === "array" || isArray && schema.type.indexOf("array") !== -1) {
- if (schema.minItems === undefined) {
- schema.minItems = 1;
- }
- }
- }
- if (this.options.forceProperties === true) {
- if (schema.type === "object" || isArray && schema.type.indexOf("object") !== -1) {
- if (schema.properties === undefined && schema.patternProperties === undefined) {
- report.addError("KEYWORD_UNDEFINED_STRICT", ["properties"]);
- }
- }
- }
- if (this.options.forceItems === true) {
- if (schema.type === "array" || isArray && schema.type.indexOf("array") !== -1) {
- if (schema.items === undefined) {
- report.addError("KEYWORD_UNDEFINED_STRICT", ["items"]);
- }
- }
- }
- if (this.options.forceMinItems === true) {
- if (schema.type === "array" || isArray && schema.type.indexOf("array") !== -1) {
- if (schema.minItems === undefined) {
- report.addError("KEYWORD_UNDEFINED_STRICT", ["minItems"]);
- }
- }
- }
- if (this.options.forceMaxItems === true) {
- if (schema.type === "array" || isArray && schema.type.indexOf("array") !== -1) {
- if (schema.maxItems === undefined) {
- report.addError("KEYWORD_UNDEFINED_STRICT", ["maxItems"]);
- }
- }
- }
- if (this.options.forceMinLength === true) {
- if (schema.type === "string" || isArray && schema.type.indexOf("string") !== -1) {
- if (schema.minLength === undefined &&
- schema.format === undefined &&
- schema.enum === undefined &&
- schema.pattern === undefined) {
- report.addError("KEYWORD_UNDEFINED_STRICT", ["minLength"]);
- }
- }
- }
- if (this.options.forceMaxLength === true) {
- if (schema.type === "string" || isArray && schema.type.indexOf("string") !== -1) {
- if (schema.maxLength === undefined &&
- schema.format === undefined &&
- schema.enum === undefined &&
- schema.pattern === undefined) {
- report.addError("KEYWORD_UNDEFINED_STRICT", ["maxLength"]);
- }
- }
- }
- },
- allOf: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.5.3.1
- if (Array.isArray(schema.allOf) === false) {
- report.addError("KEYWORD_TYPE_EXPECTED", ["allOf", "array"]);
- } else if (schema.allOf.length === 0) {
- report.addError("KEYWORD_MUST_BE", ["allOf", "an array with at least one element"]);
- } else {
- var idx = schema.allOf.length;
- while (idx--) {
- report.path.push("allOf");
- report.path.push(idx.toString());
- exports.validateSchema.call(this, report, schema.allOf[idx]);
- report.path.pop();
- report.path.pop();
- }
- }
- },
- anyOf: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.5.4.1
- if (Array.isArray(schema.anyOf) === false) {
- report.addError("KEYWORD_TYPE_EXPECTED", ["anyOf", "array"]);
- } else if (schema.anyOf.length === 0) {
- report.addError("KEYWORD_MUST_BE", ["anyOf", "an array with at least one element"]);
- } else {
- var idx = schema.anyOf.length;
- while (idx--) {
- report.path.push("anyOf");
- report.path.push(idx.toString());
- exports.validateSchema.call(this, report, schema.anyOf[idx]);
- report.path.pop();
- report.path.pop();
- }
- }
- },
- oneOf: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.5.5.1
- if (Array.isArray(schema.oneOf) === false) {
- report.addError("KEYWORD_TYPE_EXPECTED", ["oneOf", "array"]);
- } else if (schema.oneOf.length === 0) {
- report.addError("KEYWORD_MUST_BE", ["oneOf", "an array with at least one element"]);
- } else {
- var idx = schema.oneOf.length;
- while (idx--) {
- report.path.push("oneOf");
- report.path.push(idx.toString());
- exports.validateSchema.call(this, report, schema.oneOf[idx]);
- report.path.pop();
- report.path.pop();
- }
- }
- },
- not: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.5.6.1
- if (Utils.whatIs(schema.not) !== "object") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["not", "object"]);
- } else {
- report.path.push("not");
- exports.validateSchema.call(this, report, schema.not);
- report.path.pop();
- }
- },
- definitions: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.5.7.1
- if (Utils.whatIs(schema.definitions) !== "object") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["definitions", "object"]);
- } else {
- var keys = Object.keys(schema.definitions),
- idx = keys.length;
- while (idx--) {
- var key = keys[idx],
- val = schema.definitions[key];
- report.path.push("definitions");
- report.path.push(key);
- exports.validateSchema.call(this, report, val);
- report.path.pop();
- report.path.pop();
- }
- }
- },
- format: function (report, schema) {
- if (typeof schema.format !== "string") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["format", "string"]);
- } else {
- if (FormatValidators[schema.format] === undefined && this.options.ignoreUnknownFormats !== true) {
- report.addError("UNKNOWN_FORMAT", [schema.format]);
- }
- }
- },
- id: function (report, schema) {
- // http://json-schema.org/latest/json-schema-core.html#rfc.section.7.2
- if (typeof schema.id !== "string") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["id", "string"]);
- }
- },
- title: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.1
- if (typeof schema.title !== "string") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["title", "string"]);
- }
- },
- description: function (report, schema) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.1
- if (typeof schema.description !== "string") {
- report.addError("KEYWORD_TYPE_EXPECTED", ["description", "string"]);
- }
- },
- "default": function (/* report, schema */) {
- // http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.2
- // There are no restrictions placed on the value of this keyword.
- }
- };
- /**
- *
- * @param {Report} report
- * @param {*[]} arr
- *
- * @returns {boolean}
- */
- var validateArrayOfSchemas = function (report, arr) {
- var idx = arr.length;
- while (idx--) {
- exports.validateSchema.call(this, report, arr[idx]);
- }
- return report.isValid();
- };
- /**
- *
- * @param {Report} report
- * @param {*} schema
- */
- exports.validateSchema = function (report, schema) {
- report.commonErrorMessage = "SCHEMA_VALIDATION_FAILED";
- // if schema is an array, assume it's an array of schemas
- if (Array.isArray(schema)) {
- return validateArrayOfSchemas.call(this, report, schema);
- }
- // do not revalidate schema that has already been validated once
- if (schema.__$validated) {
- return true;
- }
- // if $schema is present, this schema should validate against that $schema
- var hasParentSchema = schema.$schema && schema.id !== schema.$schema;
- if (hasParentSchema) {
- if (schema.__$schemaResolved && schema.__$schemaResolved !== schema) {
- var subReport = new Report(report);
- var valid = JsonValidation.validate.call(this, subReport, schema.__$schemaResolved, schema);
- if (valid === false) {
- report.addError("PARENT_SCHEMA_VALIDATION_FAILED", null, subReport);
- }
- } else {
- if (this.options.ignoreUnresolvableReferences !== true) {
- report.addError("REF_UNRESOLVED", [schema.$schema]);
- }
- }
- }
- if (this.options.noTypeless === true) {
- // issue #36 - inherit type to anyOf, oneOf, allOf if noTypeless is defined
- if (schema.type !== undefined) {
- var schemas = [];
- if (Array.isArray(schema.anyOf)) { schemas = schemas.concat(schema.anyOf); }
- if (Array.isArray(schema.oneOf)) { schemas = schemas.concat(schema.oneOf); }
- if (Array.isArray(schema.allOf)) { schemas = schemas.concat(schema.allOf); }
- schemas.forEach(function (sch) {
- if (!sch.type) { sch.type = schema.type; }
- });
- }
- // end issue #36
- if (schema.enum === undefined &&
- schema.type === undefined &&
- schema.anyOf === undefined &&
- schema.oneOf === undefined &&
- schema.not === undefined &&
- schema.$ref === undefined) {
- report.addError("KEYWORD_UNDEFINED_STRICT", ["type"]);
- }
- }
- var keys = Object.keys(schema),
- idx = keys.length;
- while (idx--) {
- var key = keys[idx];
- if (key.indexOf("__") === 0) { continue; }
- if (SchemaValidators[key] !== undefined) {
- SchemaValidators[key].call(this, report, schema);
- } else if (!hasParentSchema) {
- if (this.options.noExtraKeywords === true) {
- report.addError("KEYWORD_UNEXPECTED", [key]);
- }
- }
- }
- if (this.options.pedanticCheck === true) {
- if (schema.enum) {
- // break recursion
- var tmpSchema = Utils.clone(schema);
- delete tmpSchema.enum;
- delete tmpSchema.default;
- report.path.push("enum");
- idx = schema.enum.length;
- while (idx--) {
- report.path.push(idx.toString());
- JsonValidation.validate.call(this, report, tmpSchema, schema.enum[idx]);
- report.path.pop();
- }
- report.path.pop();
- }
- if (schema.default) {
- report.path.push("default");
- JsonValidation.validate.call(this, report, schema, schema.default);
- report.path.pop();
- }
- }
- var isValid = report.isValid();
- if (isValid) {
- schema.__$validated = true;
- }
- return isValid;
- };
- },{"./FormatValidators":143,"./JsonValidation":144,"./Report":146,"./Utils":150}],150:[function(require,module,exports){
- "use strict";
- exports.jsonSymbol = Symbol.for("z-schema/json");
- exports.schemaSymbol = Symbol.for("z-schema/schema");
- /**
- * @param {object} obj
- *
- * @returns {string[]}
- */
- var sortedKeys = exports.sortedKeys = function (obj) {
- return Object.keys(obj).sort();
- };
- /**
- *
- * @param {string} uri
- *
- * @returns {boolean}
- */
- exports.isAbsoluteUri = function (uri) {
- return /^https?:\/\//.test(uri);
- };
- /**
- *
- * @param {string} uri
- *
- * @returns {boolean}
- */
- exports.isRelativeUri = function (uri) {
- // relative URIs that end with a hash sign, issue #56
- return /.+#/.test(uri);
- };
- exports.whatIs = function (what) {
- var to = typeof what;
- if (to === "object") {
- if (what === null) {
- return "null";
- }
- if (Array.isArray(what)) {
- return "array";
- }
- return "object"; // typeof what === 'object' && what === Object(what) && !Array.isArray(what);
- }
- if (to === "number") {
- if (Number.isFinite(what)) {
- if (what % 1 === 0) {
- return "integer";
- } else {
- return "number";
- }
- }
- if (Number.isNaN(what)) {
- return "not-a-number";
- }
- return "unknown-number";
- }
- return to; // undefined, boolean, string, function
- };
- /**
- *
- * @param {*} json1
- * @param {*} json2
- * @param {*} [options]
- *
- * @returns {boolean}
- */
- exports.areEqual = function areEqual(json1, json2, options) {
- options = options || {};
- var caseInsensitiveComparison = options.caseInsensitiveComparison || false;
- // http://json-schema.org/latest/json-schema-core.html#rfc.section.3.6
- // Two JSON values are said to be equal if and only if:
- // both are nulls; or
- // both are booleans, and have the same value; or
- // both are strings, and have the same value; or
- // both are numbers, and have the same mathematical value; or
- if (json1 === json2) {
- return true;
- }
- if (
- caseInsensitiveComparison === true &&
- typeof json1 === "string" && typeof json2 === "string" &&
- json1.toUpperCase() === json2.toUpperCase()) {
- return true;
- }
- var i, len;
- // both are arrays, and:
- if (Array.isArray(json1) && Array.isArray(json2)) {
- // have the same number of items; and
- if (json1.length !== json2.length) {
- return false;
- }
- // items at the same index are equal according to this definition; or
- len = json1.length;
- for (i = 0; i < len; i++) {
- if (!areEqual(json1[i], json2[i], { caseInsensitiveComparison: caseInsensitiveComparison })) {
- return false;
- }
- }
- return true;
- }
- // both are objects, and:
- if (exports.whatIs(json1) === "object" && exports.whatIs(json2) === "object") {
- // have the same set of property names; and
- var keys1 = sortedKeys(json1);
- var keys2 = sortedKeys(json2);
- if (!areEqual(keys1, keys2, { caseInsensitiveComparison: caseInsensitiveComparison })) {
- return false;
- }
- // values for a same property name are equal according to this definition.
- len = keys1.length;
- for (i = 0; i < len; i++) {
- if (!areEqual(json1[keys1[i]], json2[keys1[i]], { caseInsensitiveComparison: caseInsensitiveComparison })) {
- return false;
- }
- }
- return true;
- }
- return false;
- };
- /**
- *
- * @param {*[]} arr
- * @param {number[]} [indexes]
- *
- * @returns {boolean}
- */
- exports.isUniqueArray = function (arr, indexes) {
- var i, j, l = arr.length;
- for (i = 0; i < l; i++) {
- for (j = i + 1; j < l; j++) {
- if (exports.areEqual(arr[i], arr[j])) {
- if (indexes) { indexes.push(i, j); }
- return false;
- }
- }
- }
- return true;
- };
- /**
- *
- * @param {*} bigSet
- * @param {*} subSet
- *
- * @returns {*[]}
- */
- exports.difference = function (bigSet, subSet) {
- var arr = [],
- idx = bigSet.length;
- while (idx--) {
- if (subSet.indexOf(bigSet[idx]) === -1) {
- arr.push(bigSet[idx]);
- }
- }
- return arr;
- };
- // NOT a deep version of clone
- exports.clone = function (src) {
- if (typeof src === "undefined") { return void 0; }
- if (typeof src !== "object" || src === null) { return src; }
- var res, idx;
- if (Array.isArray(src)) {
- res = [];
- idx = src.length;
- while (idx--) {
- res[idx] = src[idx];
- }
- } else {
- res = {};
- var keys = Object.keys(src);
- idx = keys.length;
- while (idx--) {
- var key = keys[idx];
- res[key] = src[key];
- }
- }
- return res;
- };
- exports.cloneDeep = function (src) {
- var vidx = 0, visited = new Map(), cloned = [];
- function cloneDeep(src) {
- if (typeof src !== "object" || src === null) { return src; }
- var res, idx, cidx;
- cidx = visited.get(src);
- if (cidx !== undefined) { return cloned[cidx]; }
- visited.set(src, vidx++);
- if (Array.isArray(src)) {
- res = [];
- cloned.push(res);
- idx = src.length;
- while (idx--) {
- res[idx] = cloneDeep(src[idx]);
- }
- } else {
- res = {};
- cloned.push(res);
- var keys = Object.keys(src);
- idx = keys.length;
- while (idx--) {
- var key = keys[idx];
- res[key] = cloneDeep(src[key]);
- }
- }
- return res;
- }
- return cloneDeep(src);
- };
- /*
- following function comes from punycode.js library
- see: https://github.com/bestiejs/punycode.js
- */
- /*jshint -W016*/
- /**
- * Creates an array containing the numeric code points of each Unicode
- * character in the string. While JavaScript uses UCS-2 internally,
- * this function will convert a pair of surrogate halves (each of which
- * UCS-2 exposes as separate characters) into a single code point,
- * matching UTF-16.
- * @see `punycode.ucs2.encode`
- * @see <https://mathiasbynens.be/notes/javascript-encoding>
- * @memberOf punycode.ucs2
- * @name decode
- * @param {String} string The Unicode input string (UCS-2).
- * @returns {Array} The new array of code points.
- */
- exports.ucs2decode = function (string) {
- var output = [],
- counter = 0,
- length = string.length,
- value,
- extra;
- while (counter < length) {
- value = string.charCodeAt(counter++);
- if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
- // high surrogate, and there is a next character
- extra = string.charCodeAt(counter++);
- if ((extra & 0xFC00) == 0xDC00) { // low surrogate
- output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
- } else {
- // unmatched surrogate; only append this code unit, in case the next
- // code unit is the high surrogate of a surrogate pair
- output.push(value);
- counter--;
- }
- } else {
- output.push(value);
- }
- }
- return output;
- };
- /*jshint +W016*/
- },{}],151:[function(require,module,exports){
- (function (process){(function (){
- "use strict";
- require("./Polyfills");
- var get = require("lodash.get");
- var Report = require("./Report");
- var FormatValidators = require("./FormatValidators");
- var JsonValidation = require("./JsonValidation");
- var SchemaCache = require("./SchemaCache");
- var SchemaCompilation = require("./SchemaCompilation");
- var SchemaValidation = require("./SchemaValidation");
- var Utils = require("./Utils");
- var Draft4Schema = require("./schemas/schema.json");
- var Draft4HyperSchema = require("./schemas/hyper-schema.json");
- /**
- * default options
- */
- var defaultOptions = {
- // default timeout for all async tasks
- asyncTimeout: 2000,
- // force additionalProperties and additionalItems to be defined on "object" and "array" types
- forceAdditional: false,
- // assume additionalProperties and additionalItems are defined as "false" where appropriate
- assumeAdditional: false,
- // do case insensitive comparison for enums
- enumCaseInsensitiveComparison: false,
- // force items to be defined on "array" types
- forceItems: false,
- // force minItems to be defined on "array" types
- forceMinItems: false,
- // force maxItems to be defined on "array" types
- forceMaxItems: false,
- // force minLength to be defined on "string" types
- forceMinLength: false,
- // force maxLength to be defined on "string" types
- forceMaxLength: false,
- // force properties or patternProperties to be defined on "object" types
- forceProperties: false,
- // ignore references that cannot be resolved (remote schemas) // TODO: make sure this is only for remote schemas, not local ones
- ignoreUnresolvableReferences: false,
- // disallow usage of keywords that this validator can't handle
- noExtraKeywords: false,
- // disallow usage of schema's without "type" defined
- noTypeless: false,
- // disallow zero length strings in validated objects
- noEmptyStrings: false,
- // disallow zero length arrays in validated objects
- noEmptyArrays: false,
- // forces "uri" format to be in fully rfc3986 compliant
- strictUris: false,
- // turn on some of the above
- strictMode: false,
- // report error paths as an array of path segments to get to the offending node
- reportPathAsArray: false,
- // stop validation as soon as an error is found
- breakOnFirstError: false,
- // check if schema follows best practices and common sense
- pedanticCheck: false,
- // ignore unknown formats (do not report them as an error)
- ignoreUnknownFormats: false,
- // function to be called on every schema
- customValidator: null
- };
- function normalizeOptions(options) {
- var normalized;
- // options
- if (typeof options === "object") {
- var keys = Object.keys(options),
- idx = keys.length,
- key;
- // check that the options are correctly configured
- while (idx--) {
- key = keys[idx];
- if (defaultOptions[key] === undefined) {
- throw new Error("Unexpected option passed to constructor: " + key);
- }
- }
- // copy the default options into passed options
- keys = Object.keys(defaultOptions);
- idx = keys.length;
- while (idx--) {
- key = keys[idx];
- if (options[key] === undefined) {
- options[key] = Utils.clone(defaultOptions[key]);
- }
- }
- normalized = options;
- } else {
- normalized = Utils.clone(defaultOptions);
- }
- if (normalized.strictMode === true) {
- normalized.forceAdditional = true;
- normalized.forceItems = true;
- normalized.forceMaxLength = true;
- normalized.forceProperties = true;
- normalized.noExtraKeywords = true;
- normalized.noTypeless = true;
- normalized.noEmptyStrings = true;
- normalized.noEmptyArrays = true;
- }
- return normalized;
- }
- /**
- * @class
- *
- * @param {*} [options]
- */
- function ZSchema(options) {
- this.cache = {};
- this.referenceCache = [];
- this.validateOptions = {};
- this.options = normalizeOptions(options);
- // Disable strict validation for the built-in schemas
- var metaschemaOptions = normalizeOptions({ });
- this.setRemoteReference("http://json-schema.org/draft-04/schema", Draft4Schema, metaschemaOptions);
- this.setRemoteReference("http://json-schema.org/draft-04/hyper-schema", Draft4HyperSchema, metaschemaOptions);
- }
- /**
- * instance methods
- *
- * @param {*} schema
- *
- * @returns {boolean}
- */
- ZSchema.prototype.compileSchema = function (schema) {
- var report = new Report(this.options);
- schema = SchemaCache.getSchema.call(this, report, schema);
- SchemaCompilation.compileSchema.call(this, report, schema);
- this.lastReport = report;
- return report.isValid();
- };
- /**
- *
- * @param {*} schema
- *
- * @returns {boolean}
- */
- ZSchema.prototype.validateSchema = function (schema) {
- if (Array.isArray(schema) && schema.length === 0) {
- throw new Error(".validateSchema was called with an empty array");
- }
- var report = new Report(this.options);
- schema = SchemaCache.getSchema.call(this, report, schema);
- var compiled = SchemaCompilation.compileSchema.call(this, report, schema);
- if (compiled) { SchemaValidation.validateSchema.call(this, report, schema); }
- this.lastReport = report;
- return report.isValid();
- };
- /**
- *
- * @param {*} json
- * @param {*} schema
- * @param {*} [options]
- * @param {function(*, *)} [callback]
- *
- * @returns {boolean}
- */
- ZSchema.prototype.validate = function (json, schema, options, callback) {
- if (Utils.whatIs(options) === "function") {
- callback = options;
- options = {};
- }
- if (!options) { options = {}; }
- this.validateOptions = options;
- var whatIs = Utils.whatIs(schema);
- if (whatIs !== "string" && whatIs !== "object") {
- var e = new Error("Invalid .validate call - schema must be a string or object but " + whatIs + " was passed!");
- if (callback) {
- process.nextTick(function () {
- callback(e, false);
- });
- return;
- }
- throw e;
- }
- var foundError = false;
- var report = new Report(this.options);
- report.json = json;
- if (typeof schema === "string") {
- var schemaName = schema;
- schema = SchemaCache.getSchema.call(this, report, schemaName);
- if (!schema) {
- throw new Error("Schema with id '" + schemaName + "' wasn't found in the validator cache!");
- }
- } else {
- schema = SchemaCache.getSchema.call(this, report, schema);
- }
- var compiled = false;
- if (!foundError) {
- compiled = SchemaCompilation.compileSchema.call(this, report, schema);
- }
- if (!compiled) {
- this.lastReport = report;
- foundError = true;
- }
- var validated = false;
- if (!foundError) {
- validated = SchemaValidation.validateSchema.call(this, report, schema);
- }
- if (!validated) {
- this.lastReport = report;
- foundError = true;
- }
- if (options.schemaPath) {
- report.rootSchema = schema;
- schema = get(schema, options.schemaPath);
- if (!schema) {
- throw new Error("Schema path '" + options.schemaPath + "' wasn't found in the schema!");
- }
- }
- if (!foundError) {
- JsonValidation.validate.call(this, report, schema, json);
- }
- if (callback) {
- report.processAsyncTasks(this.options.asyncTimeout, callback);
- return;
- } else if (report.asyncTasks.length > 0) {
- throw new Error("This validation has async tasks and cannot be done in sync mode, please provide callback argument.");
- }
- // assign lastReport so errors are retrievable in sync mode
- this.lastReport = report;
- return report.isValid();
- };
- ZSchema.prototype.getLastError = function () {
- if (this.lastReport.errors.length === 0) {
- return null;
- }
- var e = new Error();
- e.name = "z-schema validation error";
- e.message = this.lastReport.commonErrorMessage;
- e.details = this.lastReport.errors;
- return e;
- };
- ZSchema.prototype.getLastErrors = function () {
- return this.lastReport && this.lastReport.errors.length > 0 ? this.lastReport.errors : null;
- };
- ZSchema.prototype.getMissingReferences = function (arr) {
- arr = arr || this.lastReport.errors;
- var res = [],
- idx = arr.length;
- while (idx--) {
- var error = arr[idx];
- if (error.code === "UNRESOLVABLE_REFERENCE") {
- var reference = error.params[0];
- if (res.indexOf(reference) === -1) {
- res.push(reference);
- }
- }
- if (error.inner) {
- res = res.concat(this.getMissingReferences(error.inner));
- }
- }
- return res;
- };
- ZSchema.prototype.getMissingRemoteReferences = function () {
- var missingReferences = this.getMissingReferences(),
- missingRemoteReferences = [],
- idx = missingReferences.length;
- while (idx--) {
- var remoteReference = SchemaCache.getRemotePath(missingReferences[idx]);
- if (remoteReference && missingRemoteReferences.indexOf(remoteReference) === -1) {
- missingRemoteReferences.push(remoteReference);
- }
- }
- return missingRemoteReferences;
- };
- ZSchema.prototype.setRemoteReference = function (uri, schema, validationOptions) {
- if (typeof schema === "string") {
- schema = JSON.parse(schema);
- } else {
- schema = Utils.cloneDeep(schema);
- }
- if (validationOptions) {
- schema.__$validationOptions = normalizeOptions(validationOptions);
- }
- SchemaCache.cacheSchemaByUri.call(this, uri, schema);
- };
- ZSchema.prototype.getResolvedSchema = function (schema) {
- var report = new Report(this.options);
- schema = SchemaCache.getSchema.call(this, report, schema);
- // clone before making any modifications
- schema = Utils.cloneDeep(schema);
- var visited = [];
- // clean-up the schema and resolve references
- var cleanup = function (schema) {
- var key,
- typeOf = Utils.whatIs(schema);
- if (typeOf !== "object" && typeOf !== "array") {
- return;
- }
- if (schema.___$visited) {
- return;
- }
- schema.___$visited = true;
- visited.push(schema);
- if (schema.$ref && schema.__$refResolved) {
- var from = schema.__$refResolved;
- var to = schema;
- delete schema.$ref;
- delete schema.__$refResolved;
- for (key in from) {
- if (from.hasOwnProperty(key)) {
- to[key] = from[key];
- }
- }
- }
- for (key in schema) {
- if (schema.hasOwnProperty(key)) {
- if (key.indexOf("__$") === 0) {
- delete schema[key];
- } else {
- cleanup(schema[key]);
- }
- }
- }
- };
- cleanup(schema);
- visited.forEach(function (s) {
- delete s.___$visited;
- });
- this.lastReport = report;
- if (report.isValid()) {
- return schema;
- } else {
- throw this.getLastError();
- }
- };
- /**
- *
- * @param {*} schemaReader
- *
- * @returns {void}
- */
- ZSchema.prototype.setSchemaReader = function (schemaReader) {
- return ZSchema.setSchemaReader(schemaReader);
- };
- ZSchema.prototype.getSchemaReader = function () {
- return ZSchema.schemaReader;
- };
- ZSchema.schemaReader = undefined;
- /*
- static methods
- */
- ZSchema.setSchemaReader = function (schemaReader) {
- ZSchema.schemaReader = schemaReader;
- };
- ZSchema.registerFormat = function (formatName, validatorFunction) {
- FormatValidators[formatName] = validatorFunction;
- };
- ZSchema.unregisterFormat = function (formatName) {
- delete FormatValidators[formatName];
- };
- ZSchema.getRegisteredFormats = function () {
- return Object.keys(FormatValidators);
- };
- ZSchema.getDefaultOptions = function () {
- return Utils.cloneDeep(defaultOptions);
- };
- ZSchema.schemaSymbol = Utils.schemaSymbol;
- ZSchema.jsonSymbol = Utils.jsonSymbol;
- module.exports = ZSchema;
- }).call(this)}).call(this,require('_process'))
- },{"./FormatValidators":143,"./JsonValidation":144,"./Polyfills":145,"./Report":146,"./SchemaCache":147,"./SchemaCompilation":148,"./SchemaValidation":149,"./Utils":150,"./schemas/hyper-schema.json":152,"./schemas/schema.json":153,"_process":11,"lodash.get":9}],152:[function(require,module,exports){
- module.exports={
- "$schema": "http://json-schema.org/draft-04/hyper-schema#",
- "id": "http://json-schema.org/draft-04/hyper-schema#",
- "title": "JSON Hyper-Schema",
- "allOf": [
- {
- "$ref": "http://json-schema.org/draft-04/schema#"
- }
- ],
- "properties": {
- "additionalItems": {
- "anyOf": [
- {
- "type": "boolean"
- },
- {
- "$ref": "#"
- }
- ]
- },
- "additionalProperties": {
- "anyOf": [
- {
- "type": "boolean"
- },
- {
- "$ref": "#"
- }
- ]
- },
- "dependencies": {
- "additionalProperties": {
- "anyOf": [
- {
- "$ref": "#"
- },
- {
- "type": "array"
- }
- ]
- }
- },
- "items": {
- "anyOf": [
- {
- "$ref": "#"
- },
- {
- "$ref": "#/definitions/schemaArray"
- }
- ]
- },
- "definitions": {
- "additionalProperties": {
- "$ref": "#"
- }
- },
- "patternProperties": {
- "additionalProperties": {
- "$ref": "#"
- }
- },
- "properties": {
- "additionalProperties": {
- "$ref": "#"
- }
- },
- "allOf": {
- "$ref": "#/definitions/schemaArray"
- },
- "anyOf": {
- "$ref": "#/definitions/schemaArray"
- },
- "oneOf": {
- "$ref": "#/definitions/schemaArray"
- },
- "not": {
- "$ref": "#"
- },
- "links": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/linkDescription"
- }
- },
- "fragmentResolution": {
- "type": "string"
- },
- "media": {
- "type": "object",
- "properties": {
- "type": {
- "description": "A media type, as described in RFC 2046",
- "type": "string"
- },
- "binaryEncoding": {
- "description": "A content encoding scheme, as described in RFC 2045",
- "type": "string"
- }
- }
- },
- "pathStart": {
- "description": "Instances' URIs must start with this value for this schema to apply to them",
- "type": "string",
- "format": "uri"
- }
- },
- "definitions": {
- "schemaArray": {
- "type": "array",
- "items": {
- "$ref": "#"
- }
- },
- "linkDescription": {
- "title": "Link Description Object",
- "type": "object",
- "required": [ "href", "rel" ],
- "properties": {
- "href": {
- "description": "a URI template, as defined by RFC 6570, with the addition of the $, ( and ) characters for pre-processing",
- "type": "string"
- },
- "rel": {
- "description": "relation to the target resource of the link",
- "type": "string"
- },
- "title": {
- "description": "a title for the link",
- "type": "string"
- },
- "targetSchema": {
- "description": "JSON Schema describing the link target",
- "$ref": "#"
- },
- "mediaType": {
- "description": "media type (as defined by RFC 2046) describing the link target",
- "type": "string"
- },
- "method": {
- "description": "method for requesting the target of the link (e.g. for HTTP this might be \"GET\" or \"DELETE\")",
- "type": "string"
- },
- "encType": {
- "description": "The media type in which to submit data along with the request",
- "type": "string",
- "default": "application/json"
- },
- "schema": {
- "description": "Schema describing the data to submit along with the request",
- "$ref": "#"
- }
- }
- }
- }
- }
- },{}],153:[function(require,module,exports){
- module.exports={
- "id": "http://json-schema.org/draft-04/schema#",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "description": "Core schema meta-schema",
- "definitions": {
- "schemaArray": {
- "type": "array",
- "minItems": 1,
- "items": { "$ref": "#" }
- },
- "positiveInteger": {
- "type": "integer",
- "minimum": 0
- },
- "positiveIntegerDefault0": {
- "allOf": [ { "$ref": "#/definitions/positiveInteger" }, { "default": 0 } ]
- },
- "simpleTypes": {
- "enum": [ "array", "boolean", "integer", "null", "number", "object", "string" ]
- },
- "stringArray": {
- "type": "array",
- "items": { "type": "string" },
- "minItems": 1,
- "uniqueItems": true
- }
- },
- "type": "object",
- "properties": {
- "id": {
- "type": "string",
- "format": "uri"
- },
- "$schema": {
- "type": "string",
- "format": "uri"
- },
- "title": {
- "type": "string"
- },
- "description": {
- "type": "string"
- },
- "default": {},
- "multipleOf": {
- "type": "number",
- "minimum": 0,
- "exclusiveMinimum": true
- },
- "maximum": {
- "type": "number"
- },
- "exclusiveMaximum": {
- "type": "boolean",
- "default": false
- },
- "minimum": {
- "type": "number"
- },
- "exclusiveMinimum": {
- "type": "boolean",
- "default": false
- },
- "maxLength": { "$ref": "#/definitions/positiveInteger" },
- "minLength": { "$ref": "#/definitions/positiveIntegerDefault0" },
- "pattern": {
- "type": "string",
- "format": "regex"
- },
- "additionalItems": {
- "anyOf": [
- { "type": "boolean" },
- { "$ref": "#" }
- ],
- "default": {}
- },
- "items": {
- "anyOf": [
- { "$ref": "#" },
- { "$ref": "#/definitions/schemaArray" }
- ],
- "default": {}
- },
- "maxItems": { "$ref": "#/definitions/positiveInteger" },
- "minItems": { "$ref": "#/definitions/positiveIntegerDefault0" },
- "uniqueItems": {
- "type": "boolean",
- "default": false
- },
- "maxProperties": { "$ref": "#/definitions/positiveInteger" },
- "minProperties": { "$ref": "#/definitions/positiveIntegerDefault0" },
- "required": { "$ref": "#/definitions/stringArray" },
- "additionalProperties": {
- "anyOf": [
- { "type": "boolean" },
- { "$ref": "#" }
- ],
- "default": {}
- },
- "definitions": {
- "type": "object",
- "additionalProperties": { "$ref": "#" },
- "default": {}
- },
- "properties": {
- "type": "object",
- "additionalProperties": { "$ref": "#" },
- "default": {}
- },
- "patternProperties": {
- "type": "object",
- "additionalProperties": { "$ref": "#" },
- "default": {}
- },
- "dependencies": {
- "type": "object",
- "additionalProperties": {
- "anyOf": [
- { "$ref": "#" },
- { "$ref": "#/definitions/stringArray" }
- ]
- }
- },
- "enum": {
- "type": "array",
- "minItems": 1,
- "uniqueItems": true
- },
- "type": {
- "anyOf": [
- { "$ref": "#/definitions/simpleTypes" },
- {
- "type": "array",
- "items": { "$ref": "#/definitions/simpleTypes" },
- "minItems": 1,
- "uniqueItems": true
- }
- ]
- },
- "format": { "type": "string" },
- "allOf": { "$ref": "#/definitions/schemaArray" },
- "anyOf": { "$ref": "#/definitions/schemaArray" },
- "oneOf": { "$ref": "#/definitions/schemaArray" },
- "not": { "$ref": "#" }
- },
- "dependencies": {
- "exclusiveMaximum": [ "maximum" ],
- "exclusiveMinimum": [ "minimum" ]
- },
- "default": {}
- }
- },{}],154:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "assumeAdditional - Assume additional properties/items in schemas are defined to false",
- options: {
- assumeAdditional: true
- },
- tests: [
- {
- schema: {
- "type": "object",
- "properties": {
- "hello": {
- "type": "string"
- }
- }
- },
- data: {
- hello: "world"
- },
- description: "should pass validation when only defined properties are used",
- valid: true
- },
- {
- schema: {
- "type": "object",
- "properties": {
- "hello": {
- "type": "string"
- }
- }
- },
- data: {
- hello: "world",
- good: "morning"
- },
- description: "should fail validation when other than defined properties are used",
- valid: false
- },
- {
- schema: {
- "type": "object",
- "properties": {
- "hello": {
- "type": "string"
- }
- }
- },
- data: {
- hello: "world",
- good: "morning",
- night: "night"
- },
- description: "should fail validation with multiple errors when several other than defined properties are used",
- valid: false,
- after: function(errs) {
- expect(errs.length).toBe(2);
- expect(errs[0].message).toBe('Additional properties not allowed: good');
- expect(errs[1].message).toBe('Additional properties not allowed: night');
- }
- },
- {
- schema: {
- "type": "array",
- "items": [
- { "type": "string" },
- { "type": "string" },
- { "type": "string" }
- ]
- },
- data: [
- "aaa",
- "bbb",
- "ccc"
- ],
- description: "should pass validation when only allowed items are used",
- valid: true
- },
- {
- schema: {
- "type": "array",
- "items": [
- { "type": "string" },
- { "type": "string" },
- { "type": "string" }
- ]
- },
- data: [
- "aaa",
- "bbb",
- "ccc",
- null
- ],
- description: "should fail validation when other than allowed items are used",
- valid: false
- }
- ]
- };
- },{}],155:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "registerFormat - Custom formats support",
- setup: function (validator, Class) {
- Class.registerFormat("xstring", function (str) {
- return str === "xxx";
- });
- Class.registerFormat("emptystring", function (str) {
- return typeof str === "string" && str.length === 0 && str === "";
- });
- Class.registerFormat("fillHello", function (obj) {
- obj.hello = "world";
- return true;
- });
- },
- schema: {
- "type": "string",
- "format": "xstring"
- },
- tests: [
- {
- description: "should pass custom format validation",
- data: "xxx",
- valid: true
- },
- {
- description: "should fail custom format validation",
- data: "xxxx",
- valid: false
- },
- {
- description: "should fail when using unknown format",
- data: "xxx",
- schema: {
- "type": "string",
- "format": "xstring2"
- },
- valid: false
- },
- {
- description: "should pass validating empty string",
- data: "",
- schema: {
- "type": "string",
- "format": "emptystring"
- },
- valid: true
- },
- {
- description: "should be able to modify object using format",
- data: {},
- schema: {
- "type": "object",
- "format": "fillHello"
- },
- valid: true,
- after: function (err, valid, obj) {
- expect(obj.hello).toBe("world");
- }
- }
- ]
- };
- },{}],156:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "registerFormat - Custom formats async support",
- async: true,
- options: {
- asyncTimeout: 500
- },
- setup: function (validator, Class) {
- Class.registerFormat("xstring", function (str, callback) {
- setTimeout(function () {
- callback(str === "xxx");
- }, 1);
- });
- Class.registerFormat("shouldTimeout", function (str, callback) {
- return typeof callback === "function";
- });
- },
- schema: {
- "type": "string",
- "format": "xstring"
- },
- tests: [
- {
- description: "should pass custom format async validation",
- data: "xxx",
- valid: true
- },
- {
- description: "should fail custom format async validation",
- data: "xxxx",
- valid: false
- },
- {
- description: "should timeout if callback is not called in default limit",
- data: "xxx",
- schema: {
- "type": "string",
- "format": "shouldTimeout"
- },
- valid: false,
- after: function (err, valid) {
- expect(valid).toBe(false);
- expect(err.length).toBe(1);
- expect(err[0].code).toBe("ASYNC_TIMEOUT");
- }
- },
- {
- description: "should execute callback even if no async format is found",
- data: "xxx",
- schema: {
- "type": "string"
- },
- valid: true
- }
- ]
- };
- },{}],157:[function(require,module,exports){
- "use strict";
- //Implement new 'shouldFail' keyword
- function customValidatorFn(report, schema, json) {
- if (schema.shouldFail === true) {
- report.addCustomError("SHOULD_FAIL", "Forced fail", [], null, schema.description);
- }
- }
- module.exports = {
- description: "customValidator - Function to be called on every schema",
- options: {
- customValidator: customValidatorFn
- },
- schema: {
- "type": "object",
- "properties": {
- "a": {
- "type": "integer"
- },
- "b": {
- shouldFail: false
- }
- },
- "additionalProperties": {
- shouldFail: true
- }
- },
- tests: [
- {
- description: "should pass custom validation",
- data: {
- a: 0,
- b: null
- },
- valid: true
- },
- {
- description: "should fail on standard error",
- data: {
- a: "incorrect type",
- b: null
- },
- valid: false,
- after: function (err) {
- expect(err[0].code).toBe("INVALID_TYPE");
- }
- },
- {
- description: "should fail on custom error",
- data: {
- c: null
- },
- valid: false,
- after: function (err) {
- expect(err[0].code).toBe("SHOULD_FAIL");
- expect(err[0].message).toBe("Forced fail");
- }
- }
- ]
- };
- },{}],158:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "reportPathAsArray - Report error paths as an array of path segments",
- options: {
- reportPathAsArray: true
- },
- tests: [
- {
- description: "should fail validation and report error paths as an array of path segments",
- schema: {
- "type": "object",
- "properties": {
- "name": {
- "type": "invalid"
- }
- }
- },
- valid: false,
- validateSchemaOnly: true,
- after: function (err) {
- expect(err[0].path).toEqual(["properties", "name"]);
- }
- }
- ]
- };
- },{}],159:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Report error paths as a JSON Pointer string",
- tests: [
- {
- description: "should fail validation and report error paths a JSON Pointer string",
- schema: {
- "type": "object",
- "properties": {
- "~name/age": {
- "type": "invalid"
- }
- }
- },
- valid: false,
- validateSchemaOnly: true,
- after: function (err) {
- expect(err[0].path).toEqual("#/properties/~0name~1age");
- }
- }
- ]
- };
- },{}],160:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Report error paths with integer array indices",
- options: {
- reportPathAsArray: true
- },
- tests: [
- {
- description: "should fail validation and error path should contain integer array index",
- schema: {
- "type": "object",
- "properties": {
- "list": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- }
- },
- data: {
- "list": [
- 123
- ]
- },
- valid: false,
- validateSchemaOnly: false,
- after: function (err) {
- expect(err[0].path).toEqual(["list", 0]);
- }
- }
- ]
- };
- },{}],161:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "forceAdditional - Force additional properties/items in schemas",
- options: {
- forceAdditional: true
- },
- validateSchemaOnly: true,
- tests: [
- {
- schema: {
- "type": "object",
- "properties": {
- "hello": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- description: "should pass schema validation when additionalProperties are defined on objects",
- valid: true
- },
- {
- schema: {
- "type": "object",
- "properties": {
- "hello": {
- "type": "string"
- }
- }
- },
- description: "should fail schema validation when additionalProperties are not defined on objects",
- valid: false
- },
- {
- schema: {
- "type": "array",
- "items": [
- {
- "type": "string"
- }
- ],
- "additionalItems": false
- },
- description: "should pass schema validation when additionalItems are defined on arrays",
- valid: true
- },
- {
- schema: {
- "type": "array",
- "items": [
- {
- "type": "string"
- }
- ]
- },
- description: "should fail schema validation when additionalItems are not defined on arrays",
- valid: false
- },
- {
- schema: {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- description: "should pass schema validation without additionalItems because they doesn't matter when items is a schema",
- valid: true
- }
- ]
- };
- },{}],162:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "forceItems - Force items to be defined on arrays",
- options: {
- forceItems: true
- },
- validateSchemaOnly: true,
- tests: [
- {
- schema: {
- "type": "array",
- "items": {}
- },
- description: "should pass schema validation because items are defined",
- valid: true
- },
- {
- schema: {
- "type": "array"
- },
- description: "should fail schema validation because items are not defined",
- valid: false
- }
- ]
- };
- },{}],163:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "forceMaxItems - Force maxItems to be defined on arrays",
- options: {
- forceMaxItems: true
- },
- validateSchemaOnly: true,
- tests: [
- {
- schema: {
- "type": "array",
- "maxItems": 20
- },
- description: "should pass schema validation because maxItems is defined",
- valid: true
- },
- {
- schema: {
- "type": "array"
- },
- description: "should fail schema validation because maxItems is not defined",
- valid: false
- }
- ]
- };
- },{}],164:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "forceMaxLength - Force maxLength to be defined on strings",
- options: {
- forceMaxLength: true
- },
- validateSchemaOnly: true,
- tests: [
- {
- schema: {
- "type": "string",
- "maxLength": 20
- },
- description: "should pass schema validation because maxLength is defined",
- valid: true
- },
- {
- schema: {
- "type": "string"
- },
- description: "should fail schema validation because maxLength is not defined",
- valid: false
- }
- ]
- };
- },{}],165:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "forceMinItems - Force minItems to be defined on arrays",
- options: {
- forceMinItems: true
- },
- validateSchemaOnly: true,
- tests: [
- {
- schema: {
- "type": "array",
- "minItems": 20
- },
- description: "should pass schema validation because minItems is defined",
- valid: true
- },
- {
- schema: {
- "type": "array"
- },
- description: "should fail schema validation because minItems is not defined",
- valid: false
- }
- ]
- };
- },{}],166:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "forceMinLength - Force minLength to be defined on strings",
- options: {
- forceMinLength: true
- },
- validateSchemaOnly: true,
- tests: [
- {
- schema: {
- "type": "string",
- "minLength": 20
- },
- description: "should pass schema validation because minLength is defined",
- valid: true
- },
- {
- schema: {
- "type": "string"
- },
- description: "should fail schema validation because minLength is not defined",
- valid: false
- }
- ]
- };
- },{}],167:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "forceProperties - Force properties to be defined on objects",
- options: {
- forceProperties: true
- },
- validateSchemaOnly: true,
- tests: [
- {
- schema: {
- "type": "object",
- "properties": {
- "test": {}
- }
- },
- description: "should pass schema validation because properties are defined",
- valid: true
- },
- {
- schema: {
- "type": "object",
- "patternProperties": {
- "te(s|t)": {}
- }
- },
- description: "should pass schema validation because patternProperties are defined",
- valid: true
- },
- {
- schema: {
- "type": "object"
- },
- description: "should fail schema validation because properties are not defined",
- valid: false
- },
- {
- schema: {
- "type": "object",
- "properties": {}
- },
- description: "should fail schema validation because properties are present but doesn't define any properties",
- valid: false
- },
- {
- schema: {
- "type": "object",
- "patternProperties": {}
- },
- description: "should fail schema validation because patternProperties are present but doesn't define any properties",
- valid: false
- }
- ]
- };
- },{}],168:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "ignoreUnresolvableReferences - Ignore remote references in schemas",
- options: {
- ignoreUnresolvableReferences: true
- },
- validateSchemaOnly: true,
- tests: [
- {
- schema: {
- "$schema": "http://doesnt-exists.org/draft-04/schema",
- },
- description: "should pass schema validation because link is to http schema",
- valid: true
- },
- {
- schema: {
- "definitions": {
- "a": {"type": "integer"},
- "b": {"$ref": "#/definitions/a"},
- "c": {"$ref": "#/definitions/b"}
- },
- "$ref": "#/definitions/c"
- },
- description: "should pass schema validation because definitions are resolvable",
- valid: true
- },
- {
- schema: {
- "definitions": {
- "a": {"type": "integer"},
- "b": {"$ref": "#/definitions/aaa"},
- "c": {"$ref": "#/definitions/b"}
- },
- "$ref": "#/definitions/c"
- },
- description: "should fail schema validation because definitions are not resolvable",
- valid: false
- }
- ]
- };
- },{}],169:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "includeErrors - Validate only against specified errors",
- options: {
- breakOnFirstError: false,
- assumeAdditional: true
- },
- tests: [
- {
- schema: {
- "type": "object",
- "properties": {
- "hello": {
- "type": "number"
- }
- }
- },
- data: {
- hello: "world"
- },
- validateOptions: {
- includeErrors: ["INVALID_TYPE"]
- },
- description: "should fail validation when the specified error is present",
- valid: false
- },
- {
- schema: {
- "type": "object",
- "properties": {
- "hello": {
- "type": "number"
- }
- }
- },
- data: {
- hello: "world"
- },
- validateOptions: {
- includeErrors: ["OBJECT_ADDITIONAL_PROPERTIES"]
- },
- description: "should pass validation when the specified error is not present",
- valid: true
- },
- {
- schema: {
- "type": "object",
- "properties": {
- "hello": {
- "type": "number"
- }
- }
- },
- data: {
- hello: "world",
- extra: "extra"
- },
- validateOptions: {
- includeErrors: ["INVALID_TYPE"]
- },
- description: "should fail validation when the specified error is present only for that error",
- valid: false,
- after: function(errs) {
- expect(errs.length).toBe(1);
- expect(errs[0].code).toBe("INVALID_TYPE");
- }
- },
- {
- schema: {
- "type": "object",
- "properties": {
- "hello": {
- "type": "number"
- }
- }
- },
- data: {
- hello: "world",
- extra: "extra"
- },
- description: "should fail validation for all errors when no `includeErrors` array is provided.",
- valid: false,
- after: function(errs) {
- expect(errs.length).toBe(2);
- }
- },
- {
- schema: {
- "type": "object",
- "properties": {
- "hello": {
- "type": "number"
- }
- }
- },
- data: {
- hello: "world",
- extra: "extra"
- },
- validateOptions: {
- includeErrors: []
- },
- description: "should fail validation for all errors when empty array is provided.",
- valid: false,
- after: function(errs) {
- expect(errs.length).toBe(2);
- }
- }
- ]
- };
- },{}],170:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "InvalidId - check if schema with invalid id can be processed",
- validateSchemaOnly: true,
- tests: [
- {
- schema: {
- "id": {}
- },
- description: "should fail schema validation because id has incorrect value",
- valid: false
- }
- ]
- };
- },{}],171:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #101 - Cannot read property '__$compiled' of undefined",
- async: true,
- options: {
- asyncTimeout: 500
- },
- schema: null,
- tests: [
- {
- description: "should fail with correct error",
- data: null,
- valid: false,
- after: function (err) {
- expect(err.message).toBe("Invalid .validate call - schema must be a string or object but null was passed!");
- }
- }
- ]
- };
- },{}],172:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #102 - circular references",
- tests: [
- {
- description: "should pass without an error",
- schema: {},
- data: {},
- valid: true,
- after: function (err, valid, data, validator) {
- var resolvedSchema = validator.getResolvedSchema("http://json-schema.org/draft-04/schema#");
- }
- }
- ]
- };
- },{}],173:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #103 - Validate async fails silently",
- options: {
- asyncTimeout: 500
- },
- schema: {
- required: ["recType", "luValue"],
- properties: {
- luValue: {
- type: "string"
- },
- useAsIs: {
- type: "integer"
- },
- valueText: {
- type: "string"
- },
- sequence: {
- type: "integer",
- minimum: 0
- },
- description: {
- type: "string"
- },
- valueInt: {
- type: "integer"
- },
- recType: {
- type: "string",
- enum: []
- },
- recProps: {
- type: "object",
- properties: {},
- additionalProperties: false
- },
- control: {
- "$ref": "control"
- }
- },
- additionalProperties: false,
- type: "object",
- title: "lookup schema for bankCodeType"
- },
- tests: [
- {
- async: false,
- description: "should fail with correct error - sync",
- validateSchemaOnly: true,
- valid: false,
- after: function (errs) {
- expect(errs.length).toBe(1);
- }
- },
- {
- async: true,
- description: "should fail with correct error - async",
- validateSchemaOnly: true,
- valid: false,
- after: function (errs) {
- expect(errs.length).toBe(1);
- }
- }
- ]
- };
- },{}],174:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #106 - validateSchema method returns true if you pass an empty array",
- tests: [
- {
- description: "should fail with an error",
- schema: [],
- validateSchemaOnly: true,
- failWithException: true
- }
- ]
- };
- },{}],175:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #107 - add Support for Controlling Remote Schema Reading",
- setup: function (validator, ZSchema) {
- ZSchema.setSchemaReader(function (uri) {
- return {
- type: "string"
- };
- });
- },
- tests: [
- {
- description: "should pass validation",
- schema: {
- "$ref": "schema-1"
- },
- data: "i'm a string",
- valid: true
- }
- ]
- };
- },{}],176:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #12 - validation should fail when missing a reference",
- tests: [
- {
- description: "should pass validation",
- schema: {
- "id": "http://my.site/myschema#",
- "$ref": "#/definitions/schema2",
- "definitions": {
- "schema1": {
- "id": "schema1",
- "type": "integer"
- },
- "schema2": {
- "type": "array",
- "items": {
- "$ref": "schema1"
- }
- }
- }
- },
- data: [1, 2, 3],
- valid: true
- },
- {
- description: "should fail validation",
- schema: {
- "id": "http://my.site/myschema#",
- "$ref": "#/definitions/schema2",
- "definitions": {
- "schema1": {
- "id": "schema1",
- "type": "integer"
- },
- "schema2": {
- "type": "array",
- "items": {
- "$ref": "schema1"
- }
- }
- }
- },
- data: ["1", null, 3],
- valid: false
- },
- {
- description: "should fail compilation with unresolvable reference",
- schema: {
- id: "schemaA",
- type: "object",
- properties: {
- a: {
- type: "integer"
- },
- b: {
- type: "string"
- },
- c: {
- $ref: "schemaB"
- }
- },
- required: ["a"]
- },
- validateSchemaOnly: true,
- valid: false,
- after: function (err) {
- expect(err[0].code).toBe("UNRESOLVABLE_REFERENCE");
- }
- }
- ]
- };
- },{}],177:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #121 - ignoreUnknownFormats",
- options: {
- ignoreUnknownFormats: true
- },
- tests: [
- {
- description: "should not fail when ignoring unknown formats",
- schema: {
- type: "string",
- format: "unknown"
- },
- valid: true,
- validateSchemaOnly: true
- }
- ]
- };
- },{}],178:[function(require,module,exports){
- "use strict";
- var REF_NAME = "int.json";
- module.exports = {
- description: "Issue #126 - do not add UNRESOLVABLE_REFERENCE error when set through setRemoteReference",
- tests: [
- {
- description: "should fail compilation with unresolvable reference",
- setup: function (validator) {
- validator.setRemoteReference(REF_NAME, {
- "$schema": "http://json-schema.org/draft-04/schema#",
- "id": REF_NAME,
- "type": "object",
- "required": [
- "number"
- ],
- "properties": {
- "number": {
- "$ref": "data-types.json#/definitions/number"
- }
- }
- });
- },
- schema: {
- "$schema": "http://json-schema.org/draft-04/schema#",
- "id": "ints.json",
- "type": "array",
- "items": {
- "$ref": REF_NAME
- }
- },
- validateSchemaOnly: true,
- valid: false,
- after: function (err, valid, data, validator) {
- err.forEach(function (e) {
- if (e.params.indexOf(REF_NAME) !== -1) {
- expect(e.code).not.toBe("UNRESOLVABLE_REFERENCE");
- }
- });
- expect(validator.getMissingRemoteReferences().length).toBe(1);
- }
- }
- ]
- };
- },{}],179:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #13 - compile multiple schemas tied together with an id",
- tests: [
- {
- description: "mainSchema should fail compilation on its own",
- schema: {
- id: "mainSchema",
- type: "object",
- properties: {
- a: {"$ref": "schemaA"},
- b: {"$ref": "schemaB"},
- c: {"enum": ["C"]}
- }
- },
- validateSchemaOnly: true,
- valid: false
- },
- {
- description: "mainSchema should pass compilation if schemaA and schemaB were already compiled, order #1",
- schema: [
- {
- id: "schemaA",
- type: "integer"
- },
- {
- id: "schemaB",
- type: "string"
- },
- {
- id: "mainSchema",
- type: "object",
- properties: {
- a: {"$ref": "schemaA"},
- b: {"$ref": "schemaB"},
- c: {"enum": ["C"]}
- }
- }
- ],
- validateSchemaOnly: true,
- valid: true
- },
- {
- description: "mainSchema should pass compilation if schemaA and schemaB were already compiled, order #2",
- schema: [
- {
- id: "mainSchema",
- type: "object",
- properties: {
- a: {"$ref": "schemaA"},
- b: {"$ref": "schemaB"},
- c: {"enum": ["C"]}
- }
- },
- {
- id: "schemaA",
- type: "integer"
- },
- {
- id: "schemaB",
- type: "string"
- }
- ],
- validateSchemaOnly: true,
- valid: true
- },
- {
- description: "compilation should never end up in infinite loop #1",
- schema: [
- {
- id: "mainSchema",
- type: "object",
- properties: {
- a: {"$ref": "schemaA"},
- b: {"$ref": "schemaB"},
- c: {"enum": ["C"]}
- }
- },
- {
- id: "schemaB",
- type: "string"
- }
- ],
- validateSchemaOnly: true,
- valid: false
- },
- {
- description: "compilation should never end up in infinite loop #2",
- schema: [
- {
- id: "schemaB",
- type: "string"
- },
- {
- id: "mainSchema",
- type: "object",
- properties: {
- a: {"$ref": "schemaA"},
- b: {"$ref": "schemaB"},
- c: {"enum": ["C"]}
- }
- }
- ],
- validateSchemaOnly: true,
- valid: false
- },
- {
- description: "should validate object successfully",
- schema: [
- {
- id: "schemaA",
- type: "integer"
- },
- {
- id: "schemaB",
- type: "string"
- },
- {
- id: "mainSchema",
- type: "object",
- properties: {
- a: {"$ref": "schemaA"},
- b: {"$ref": "schemaB"},
- c: {"enum": ["C"]}
- }
- }
- ],
- schemaIndex: 2,
- data: {
- a: 1,
- b: "str",
- c: "C"
- },
- valid: true
- },
- {
- description: "should fail validating object",
- schema: [
- {
- id: "schemaA",
- type: "integer"
- },
- {
- id: "schemaB",
- type: "string"
- },
- {
- id: "mainSchema",
- type: "object",
- properties: {
- a: {"$ref": "schemaA"},
- b: {"$ref": "schemaB"},
- c: {"enum": ["C"]}
- }
- }
- ],
- schemaIndex: 2,
- data: {
- a: "str",
- b: 1,
- c: "C"
- },
- valid: false,
- after: function (err) {
- expect(err[0].code).toBe("INVALID_TYPE");
- expect(err[1].code).toBe("INVALID_TYPE");
- }
- }
- ]
- };
- },{}],180:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #130 - Improve escaping of slashes in path",
- tests: [
- {
- description: "should pass",
- schema: {
- "$schema": "http://json-schema.org/draft-04/schema#",
- "title": "Schema to test names that would otherwise conflict with the path handling",
- "type": "object",
- "properties": {
- "this/that": {
- "type": "object",
- "properties": {
- "t/h/e/ /o/t/h/e/r": {
- "type": "object",
- "properties": {
- "man": {
- "type": "string"
- }
- },
- "required": ["man"]
- }
- },
- "required": ["t/h/e/ /o/t/h/e/r"]
- }
- }
- },
- data: {
- "this/that": {
- "t/h/e/ /o/t/h/e/r": {}
- }
- },
- valid: false,
- after: function (err) {
- err.forEach(function (e) {
- expect(e.path).toBe("#/this~1that/t~1h~1e~1 ~1o~1t~1h~1e~1r");
- });
- }
- }
- ]
- };
- },{}],181:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #131 - Top-level errors obscure deeper errors",
- tests: [
- {
- description: "should pass",
- options: {
- breakOnFirstError: false
- },
- schema: {
- "title": "Nested requirements don't work",
- "type": "object",
- "properties": {
- "required": {
- "type": "string"
- },
- "nested": {
- "type": "object",
- "properties": {
- "required": {
- "type": "string"
- }
- },
- "required": ["required"]
- }
- },
- "required" : ["required"]
- },
- data: { "nested": { } },
- valid: false,
- after: function (err) {
- expect(err.length).toBe(2);
- if (err.length === 2) {
- expect(err[0].code).toBe("OBJECT_MISSING_REQUIRED_PROPERTY");
- expect(err[1].code).toBe("OBJECT_MISSING_REQUIRED_PROPERTY");
- }
- }
- }
- ]
- };
- },{}],182:[function(require,module,exports){
- "use strict";
- var schema1 = {
- "definitions": {
- "thing": {
- "$ref": "#/definitions/thing" // <--- circular reference to self
- }
- }
- };
- var schema2 = {
- "definitions": {
- "person": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- },
- "spouse": {
- "$ref": "#/definitions/person" // <--- circular reference to ancestor
- }
- }
- }
- }
- };
- var schema3 = {
- "definitions": {
- "parent": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- },
- "children": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/child" // <--- indirect circular reference
- }
- }
- }
- },
- "child": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- },
- "parents": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/parent" // <--- indirect circular reference
- }
- }
- }
- }
- }
- };
- module.exports = {
- description: "Issue #137 - circular dependencies between schemas",
- tests: [
- {
- description: "should pass validation #1",
- schema: schema1,
- validateSchemaOnly: true,
- valid: true
- },
- {
- description: "should pass validation #2",
- schema: schema2,
- validateSchemaOnly: true,
- valid: true
- },
- {
- description: "should pass validation #3",
- schema: schema3,
- validateSchemaOnly: true,
- valid: true
- }
- ]
- };
- },{}],183:[function(require,module,exports){
- module.exports = {
- description: "Issue #139 - add schema id if present to erro message via addError method",
- tests: [
- {
- description: "should fail",
- options: {
- strictMode: true
- },
- schema: {
- id: "dummy",
- type: "object",
- description: "This is a dummy schema",
- properties: {
- recType: {
- type: "string"
- },
- startDate: {
- type: ["object", "string"],
- format: "date"
- },
- endDate: {
- type: ["object", "string"],
- format: "date"
- },
- noteList: {
- type: "array",
- items: {
- $ref: "note"
- }
- },
- isBlocked: {
- type: "boolean"
- },
- roleA: {
- $ref: "dbRef"
- },
- roleB: {
- $ref: "dbRef"
- },
- recProps: {
- type: "object"
- }
- },
- additionalProperties: false,
- required: ["recType", "roleA", "roleB"]
- },
- valid: false,
- after: function (err) {
- expect(err.length).toBe(3);
- err.forEach(function (e) {
- expect(e.code).toBe("UNRESOLVABLE_REFERENCE");
- expect(e.schemaId).toBe("dummy");
- });
- }
- }
- ]
- };
- },{}],184:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #142 - assumeAdditional complains about $ref",
- tests: [
- {
- description: "should pass",
- options: {
- assumeAdditional: ["$ref"]
- },
- schema: "http://json-schema.org/draft-04/schema",
- data: { $ref: "#" },
- valid: true
- }
- ]
- };
- },{}],185:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #146 - Only the first failure in an `allOf` block is returned",
- tests: [
- {
- description: "should pass",
- options: {
- breakOnFirstError: false
- },
- schema: {
- properties: {
- password: {
- allOf: [
- { type: "string", minLength: 8 },
- { type: "string", pattern: "[A-Z]+" }
- ]
- }
- }
- },
- data: { password: "short" },
- valid: false,
- after: function (err) {
- expect(err.length).toBe(2);
- }
- }
- ]
- };
- },{}],186:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #151 - minProperties for object type doesn't work",
- tests: [
- {
- description: "should fail",
- schema: {
- "type": "object",
- "properties": {
- "props": {
- "type": "object",
- "minProperties": 1
- }
- }
- },
- data: {
- "props": {}
- },
- valid: false,
- after: function (err) {
- expect(err[0].code).toBe("OBJECT_PROPERTIES_MINIMUM");
- }
- }
- ]
- };
- },{}],187:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #16 - schemas should be validated by references in $schema property",
- tests: [
- {
- description: "should pass validation",
- schema: {
- $schema: "http://json-schema.org/draft-04/hyper-schema#",
- links: []
- },
- validateSchemaOnly: true,
- valid: true
- },
- {
- description: "should fail validation",
- schema: {
- $schema: "http://json-schema.org/draft-04/hyper-schema#",
- links: null
- },
- validateSchemaOnly: true,
- valid: false
- }
- ]
- };
- },{}],188:[function(require,module,exports){
- "use strict";
- var ref1 = "http://www.example.org/schema1/#";
- var ref2 = "http://www.example.org/schema2/#";
- var schema1 = {
- "$schema": "http://json-schema.org/draft-04/schema#",
- "id": ref1,
- "properties": {
- "prop1": {
- "$ref": ref2
- }
- }
- };
- var schema2 = {
- "$schema": "http://json-schema.org/draft-04/schema#",
- "id": ref2,
- "properties": {
- "prop1": {
- "$ref": ref1
- }
- }
- };
- module.exports = {
- description: "Issue #47 - references to draft4 subschema are not working",
- setup: function (validator) {
- validator.setRemoteReference(ref1, schema1);
- validator.setRemoteReference(ref2, schema2);
- },
- tests: [
- {
- description: "should pass validation #1",
- schema: schema1,
- data: {},
- valid: true
- }
- ]
- };
- },{}],189:[function(require,module,exports){
- "use strict";
- var testAsync = true;
- module.exports = {
- description: "Issue #209 - async validator returns wrong path",
- async: true,
- options: {
- asyncTimeout: 2000
- },
- setup: function (validator, Class) {
- if (testAsync) {
- // asynchronous validator
- Class.registerFormat("string-length", function (str, callback) {
- setTimeout(function () {
- callback(str.length > 10);
- }, 1);
- });
- } else {
- // same as above but synchronous (comment out the validator above and try with this instead)
- Class.registerFormat("string-length", function (str) {
- return str.length > 10;
- });
- }
- },
- schema: {
- description: "Some schema",
- type: "object",
- properties: {
- userId: {
- type: "string",
- format: "string-length"
- }
- },
- required: ["userId"]
- },
- tests: [
- {
- description: "Wrong path in custom format async validator",
- data: { userId: "1" },
- valid: false,
- after: function (err) {
- expect(err[0].path).toEqual("#/userId");
- }
- }
- ]
- };
- },{}],190:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #22 - recursive references",
- tests: [
- {
- description: "should pass validation",
- schema: {
- type: "object",
- additionalProperties: false,
- properties: {
- "is_and": { type: "boolean" },
- "filters": {
- type: "array",
- additionalItems: false,
- items: {
- oneOf: [
- { $ref: "#" },
- { $ref: "#/definitions/last" }
- ]
- }
- }
- },
- definitions: {
- "last": {
- type: "object",
- additionalProperties: false,
- properties: {
- "text": { type: "string" },
- "is_last": { type: "boolean" },
- "filters": { type: "array", additionalItems: false }
- }
- }
- }
- },
- data: {
- "is_and": false,
- "filters": [
- {
- "is_and": false,
- "filters": [
- {
- "is_and": true,
- "filters": [
- {
- "is_and": true,
- "filters": [
- {
- "is_and": true,
- "filters": [
- {
- "is_and": true,
- "filters": [
- {
- "text": "ABC",
- "is_last": true,
- "filters": []
- }
- ]
- }
- ]
- }
- ]
- }
- ]
- }
- ]
- }
- ]
- },
- valid: true
- }
- ]
- };
- },{}],191:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #222 - Object.keys() does not guarantee order",
- tests: [
- {
- description: "should pass",
- schema: {
- "type":"object",
- "oneOf": [
- {
- "type": "object",
- "properties": {
- "code": {
- "type": "string"
- },
- "libelle": {
- "type": "string"
- }
- },
- "enum": [
- {
- "code": "null",
- "libelle": "null"
- }
- ]
- },
- {
- "type": "object",
- "properties": {
- "code": {
- "type": "string"
- },
- "libelle": {
- "type": "string"
- }
- },
- "enum": [
- {
- "code": "0",
- "libelle": "Choice 1"
- }
- ]
- },
- {
- "type": "object",
- "properties": {
- "code": {
- "type": "string"
- },
- "libelle": {
- "type": "string"
- }
- },
- "enum": [
- {
- "code": "1",
- "libelle": "Choice 2"
- }
- ]
- },
- {
- "type": "object",
- "properties": {
- "code": {
- "type": "string"
- },
- "libelle": {
- "type": "string"
- }
- },
- "enum": [
- {
- "code": "2",
- "libelle": "Choice 3"
- }
- ]
- }
- ]
- },
- data: {
- "code": "2",
- "libelle": "Choice 3"
- },
- valid: true
- }
- ]
- };
- },{}],192:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #229 - Paths in errors are incorrect due to Issue #209 fix",
- tests: [
- {
- description: "should fail with correct error path",
- schema: {
- "allOf": [
- {
- "properties": {
- "setup": {
- "description": "Account Research Setup",
- "properties": {
- "excessiveCredit": {
- "properties": {
- "negativeBatch": {
- "type": "number",
- "minimum": 0,
- "maximum": 999999999.99,
- "title": "Negative Batch $"
- },
- "amountOfCreditsInBatch": {
- "type": "number",
- "minimum": 0,
- "maximum": 999999999.99,
- "title": "Amount of Credits in a Batch $"
- },
- "numberOfCreditsInBatch": {
- "type": "number",
- "minimum": 1,
- "maximum": 999,
- "title": "Number of Credits in a Batch"
- }
- }
- }
- }
- }
- }
- }
- ]
- },
- data: {
- "setup": {
- "excessiveCredit": {
- "amountOfCreditsInBatch": -15000.21,
- "negativeBatch": 25001,
- "numberOfCreditsInBatch": 155
- }
- }
- },
- valid: false,
- after: function (err) {
- expect(err.length).toBe(1);
- expect(err[0].code).toBe('MINIMUM');
- expect(err[0].path).toBe('#/setup/excessiveCredit/amountOfCreditsInBatch');
- }
- }
- ]
- };
- },{}],193:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #25 - hostname format behaviour",
- tests: [
- {
- description: "should pass validation",
- schema: {
- "$schema": "http://json-schema.org/draft-04/schema#",
- "type": "object",
- "properties": {
- "ipAddress": {
- "type": "string",
- "oneOf": [
- {
- "format": "hostname"
- },
- {
- "format": "ipv4"
- },
- {
- "format": "ipv6"
- }
- ]
- }
- }
- },
- data: {
- "ipAddress": "127.0.0.1"
- },
- valid: true
- }
- ]
- };
- },{}],194:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #250 - Floating point precision is lost",
- tests: [
- {
- description: "should pass the multipleOf",
- schema: {
- "properties": {
- "number": {
- "multipleOf": 0.01
- }
- }
- },
- data: {
- "number": 20.29
- },
- valid: true
- }
- ]
- };
- },{}],195:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #26 - noTypeless behaviour",
- options: {
- noTypeless: true
- },
- tests: [
- {
- description: "should pass validation",
- schema: {
- "oneOf": [
- { $ref: "#/definitions/str" },
- { $ref: "#/definitions/num" }
- ],
- "definitions": {
- "str": {
- "type": "string"
- },
- "num": {
- "type": "number"
- }
- }
- },
- data: "string",
- valid: true
- },
- {
- description: "should fail validation",
- schema: {
- "oneOf": [
- { $ref: "#/definitions/str" },
- { $ref: "#/definitions/num" }
- ],
- "definitions": {
- "str": {
- "type": "string"
- },
- "num": {
- "type": "number"
- }
- }
- },
- data: true,
- valid: false
- },
- {
- description: "should fail validation because one of the definitions doesn't have a type",
- schema: {
- "oneOf": [
- { $ref: "#/definitions/str" },
- { $ref: "#/definitions/num" }
- ],
- "definitions": {
- "str": {
- "type": "string"
- },
- "num": {
- }
- }
- },
- data: "string",
- valid: false,
- after: function (errors) {
- expect(errors[0].code).toBe("KEYWORD_UNDEFINED_STRICT");
- }
- },
- {
- description: "should pass validation because type is defined by parent",
- schema: {
- type: "object",
- properties: {
- "prop1": { type: "string" },
- "prop2": { type: "string" }
- },
- anyOf: [
- { required: ["prop1"] },
- { required: ["prop2"] }
- ]
- },
- data: {
- prop1: "str"
- },
- valid: true
- }
- ]
- };
- },{}],196:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #37 - pass schema as an uri to load from cache",
- tests: [
- {
- description: "should pass validation",
- schema: "http://json-schema.org/draft-04/schema",
- data: {
- type: "string"
- },
- valid: true
- },
- {
- description: "should pass validation",
- schema: "http://json-schema.org/draft-04/schema",
- data: {
- type: 1
- },
- valid: false
- }
- ]
- };
- },{}],197:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #40 - validator ends up in infinite loop",
- tests: [
- {
- description: "should pass validation",
- schema: {
- "$schema": "http://json-schema.org/draft-04/schema#",
- "title": "Product set",
- "is_start": "boolean",
- "hierarchy": {
- "$ref": "#/definitions/recursion"
- },
- "definitions": {
- "recursion": {
- "type": "object",
- "additionalProperties": false,
- "properties": {
- "is_and": {
- "type": "boolean"
- },
- "filters": {
- "type": "array",
- "additionalItems": false,
- "items": {
- "$ref": "#/definitions/recursion"
- }
- }
- }
- }
- }
- },
- data: {
- "is_start": true,
- "hierarchy": {
- "is_and": false,
- "filters": [
- {
- "is_and": false,
- "filters": [
- {
- "is_and": true,
- "filters": [
- {
- "is_and": true,
- "filters": [
- {
- "is_and": true,
- "filters": [
- {
- "is_and": true,
- "filters": [
- {
- "is_and": true,
- "filters": []
- }
- ]
- }
- ]
- }
- ]
- }
- ]
- }
- ]
- }
- ]
- }
- },
- valid: true
- }
- ]
- };
- },{}],198:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #41 - invalid schema",
- tests: [
- {
- description: "should fail schema validation",
- schema: {
- "$schema": "http://json-schema.org/draft-04/schema#",
- "id": "http://jsonschema.net#",
- "type": "array",
- "required": false,
- "items": {
- "id": "http://jsonschema.net/5#",
- "type": "object",
- "required": false,
- "properties": {
- "identifiers": {
- "id": "http://jsonschema.net/5/identifiers#",
- "type": "array",
- "required": false,
- "items": {
- "id": "http://jsonschema.net/5/identifiers/0#",
- "type": "object",
- "required": false,
- "properties": {
- "identifier": {
- "id": "http://jsonschema.net/5/identifiers/0/identifier#",
- "type": "string",
- "required": false
- }
- }
- }
- },
- "vital": {
- "id": "http://jsonschema.net/5/vital#",
- "type": "object",
- "required": false,
- "properties": {
- "name": {
- "id": "http://jsonschema.net/5/vital/name#",
- "type": "string",
- "required": false
- },
- "code": {
- "id": "http://jsonschema.net/5/vital/code#",
- "type": "string",
- "required": false
- },
- "code_system_name": {
- "id": "http://jsonschema.net/5/vital/code_system_name#",
- "type": "string",
- "required": false
- }
- }
- },
- "status": {
- "id": "http://jsonschema.net/5/status#",
- "type": "string",
- "required": false
- },
- "date": {
- "id": "http://jsonschema.net/5/date#",
- "type": "array",
- "required": false,
- "items": {
- "id": "http://jsonschema.net/5/date/0#",
- "type": "object",
- "required": false,
- "properties": {
- "date": {
- "id": "http://jsonschema.net/5/date/0/date#",
- "type": "string",
- "required": false
- },
- "precision": {
- "id": "http://jsonschema.net/5/date/0/precision#",
- "type": "string",
- "required": false
- }
- }
- }
- },
- "interpretations": {
- "id": "http://jsonschema.net/5/interpretations#",
- "type": "array",
- "required": false,
- "items": {
- "id": "http://jsonschema.net/5/interpretations/0#",
- "type": "string",
- "required": false
- }
- },
- "value": {
- "id": "http://jsonschema.net/5/value#",
- "type": "integer",
- "required": false
- },
- "unit": {
- "id": "http://jsonschema.net/5/unit#",
- "type": "string",
- "required": false
- }
- }
- }
- },
- validateSchemaOnly: true,
- valid: false
- }
- ]
- };
- },{}],199:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #43 - maximum call stack size exceeded error",
- tests: [
- {
- description: "should compile both schemas",
- schema: [
- {
- "id": "schemaA",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "description": "Data type fields (section 4.3.3)",
- "type": "object",
- "oneOf": [
- {
- "required": ["type"]
- },
- {
- "required": ["$ref"]
- }
- ],
- "properties": {
- "type": {
- "type": "string"
- },
- "$ref": {
- "type": "string"
- },
- "format": {
- "type": "string"
- },
- "defaultValue": {
- "not": {
- "type": ["array", "object", "null"]
- }
- },
- "enum": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "uniqueItems": true,
- "minItems": 1
- },
- "minimum": {
- "type": "string"
- },
- "maximum": {
- "type": "string"
- },
- "items": {
- "$ref": "#/definitions/itemsObject"
- },
- "uniqueItems": {
- "type": "boolean"
- }
- },
- "dependencies": {
- "format": {
- "oneOf": [
- {
- "properties": {
- "type": {
- "enum": ["integer"]
- },
- "format": {
- "enum": ["int32", "int64"]
- }
- }
- },
- {
- "properties": {
- "type": {
- "enum": ["number"]
- },
- "format": {
- "enum": ["float", "double"]
- }
- }
- },
- {
- "properties": {
- "type": {
- "enum": ["string"]
- },
- "format": {
- "enum": ["byte", "date", "date-time"]
- }
- }
- }
- ]
- }
- },
- "definitions": {
- "itemsObject": {
- "oneOf": [
- {
- "type": "object",
- "required": ["$ref"],
- "properties": {
- "$ref": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- {
- "allOf": [
- {
- "$ref": "#"
- },
- {
- "required": ["type"],
- "properties": {
- "type": {},
- "format": {}
- },
- "additionalProperties": false
- }
- ]
- }
- ]
- }
- }
- },
- {
- "id": "schemaB",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "type": "object",
- "required": ["id", "properties"],
- "properties": {
- "id": {
- "type": "string"
- },
- "description": {
- "type": "string"
- },
- "properties": {
- "type": "object",
- "additionalProperties": {
- "$ref": "#/definitions/propertyObject"
- }
- },
- "subTypes": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "uniqueItems": true
- },
- "discriminator": {
- "type": "string"
- }
- },
- "dependencies": {
- "subTypes": ["discriminator"]
- },
- "definitions": {
- "propertyObject": {
- "allOf": [
- {
- "not": {
- "$ref": "#"
- }
- },
- {
- "$ref": "schemaA"
- }
- ]
- }
- }
- }
- ],
- validateSchemaOnly: true,
- valid: true
- }
- ]
- };
- },{}],200:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #44 - unresolvable reference due to hash sign",
- tests: [
- {
- description: "should pass validation #1",
- schema: [
- {
- id: "schemaA",
- type: "string"
- },
- {
- id: "schemaB",
- properties: {
- a: {
- "$ref": "schemaA"
- }
- }
- }
- ],
- validateSchemaOnly: true,
- valid: true
- },
- {
- description: "should pass validation #2",
- schema: [
- {
- id: "schemaA",
- type: "string"
- },
- {
- id: "schemaB",
- properties: {
- a: {
- "$ref": "schemaA#"
- }
- }
- }
- ],
- validateSchemaOnly: true,
- valid: true
- }
- ]
- };
- },{}],201:[function(require,module,exports){
- "use strict";
- var resourceObject = {
- "id": "resourceObject.json",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "type": "object",
- "required": ["path"],
- "properties": {
- "path": {
- "type": "string",
- "format": "uri"
- },
- "description": {
- "type": "string"
- }
- },
- "additionalProperties": false
- };
- var infoObject = {
- "id": "infoObject.json",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "description": "info object (section 5.1.3)",
- "type": "object",
- "required": ["title", "description"],
- "properties": {
- "title": {
- "type": "string"
- },
- "description": {
- "type": "string"
- },
- "termsOfServiceUrl": {
- "type": "string",
- "format": "uri"
- },
- "contact": {
- "type": "string",
- "format": "email"
- },
- "license": {
- "type": "string"
- },
- "licenseUrl": {
- "type": "string",
- "format": "uri"
- }
- },
- "additionalProperties": false
- };
- var oauth2GrantType = {
- "id": "oauth2GrantType.json",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "type": "object",
- "minProperties": 1,
- "properties": {
- "implicit": {
- "$ref": "#/definitions/implicit"
- },
- "authorization_code": {
- "$ref": "#/definitions/authorizationCode"
- }
- },
- "definitions": {
- "implicit": {
- "type": "object",
- "required": ["loginEndpoint"],
- "properties": {
- "loginEndpoint": {
- "$ref": "#/definitions/loginEndpoint"
- },
- "tokenName": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "authorizationCode": {
- "type": "object",
- "required": ["tokenEndpoint", "tokenRequestEndpoint"],
- "properties": {
- "tokenEndpoint": {
- "$ref": "#/definitions/tokenEndpoint"
- },
- "tokenRequestEndpoint": {
- "$ref": "#/definitions/tokenRequestEndpoint"
- }
- },
- "additionalProperties": false
- },
- "loginEndpoint": {
- "type": "object",
- "required": ["url"],
- "properties": {
- "url": {
- "type": "string",
- "format": "uri"
- }
- },
- "additionalProperties": false
- },
- "tokenEndpoint": {
- "type": "object",
- "required": ["url"],
- "properties": {
- "url": {
- "type": "string",
- "format": "uri"
- },
- "tokenName": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "tokenRequestEndpoint": {
- "type": "object",
- "required": ["url"],
- "properties": {
- "url": {
- "type": "string",
- "format": "uri"
- },
- "clientIdName": {
- "type": "string"
- },
- "clientSecretName": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- }
- };
- var authorizationObject = {
- "id": "authorizationObject.json",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "type": "object",
- "additionalProperties": {
- "oneOf": [
- {
- "$ref": "#/definitions/basicAuth"
- },
- {
- "$ref": "#/definitions/apiKey"
- },
- {
- "$ref": "#/definitions/oauth2"
- }
- ]
- },
- "definitions": {
- "basicAuth": {
- "required": ["type"],
- "properties": {
- "type": {
- "enum": ["basicAuth"]
- }
- },
- "additionalProperties": false
- },
- "apiKey": {
- "required": ["type", "passAs", "keyname"],
- "properties": {
- "type": {
- "enum": ["apiKey"]
- },
- "passAs": {
- "enum": ["header", "query"]
- },
- "keyname": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "oauth2": {
- "type": "object",
- "required": ["type", "grantTypes"],
- "properties": {
- "type": {
- "enum": ["oauth2"]
- },
- "scopes": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/oauth2Scope"
- }
- },
- "grantTypes": {
- "$ref": "oauth2GrantType.json"
- }
- },
- "additionalProperties": false
- },
- "oauth2Scope": {
- "type": "object",
- "required": ["scope"],
- "properties": {
- "scope": {
- "type": "string"
- },
- "description": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- }
- };
- var resourceListing = {
- "id": "resourceListing.json",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "type": "object",
- "required": ["swaggerVersion", "apis"],
- "properties": {
- "swaggerVersion": {
- "enum": ["1.2"]
- },
- "apis": {
- "type": "array",
- "items": {
- "$ref": "resourceObject.json"
- }
- },
- "apiVersion": {
- "type": "string"
- },
- "info": {
- "$ref": "infoObject.json"
- },
- "authorizations": {
- "$ref": "authorizationObject.json"
- }
- }
- };
- var schemaCombinations = {
- "authorizationObject.json": [
- oauth2GrantType,
- authorizationObject
- ],
- "infoObject.json": [
- infoObject
- ],
- "oauth2GrantType.json": [
- oauth2GrantType
- ],
- "resourceObject.json": [
- resourceObject
- ],
- "resourceListing.json": [
- resourceObject,
- infoObject,
- oauth2GrantType,
- authorizationObject,
- resourceListing
- ]
- };
- module.exports = {
- description: "Issue #45 - recompiling schemas results in 'Reference could not be resolved'",
- tests: [
- {
- description: "should pass schema validation #1",
- schema: schemaCombinations["authorizationObject.json"],
- validateSchemaOnly: true,
- valid: true
- },
- {
- description: "should pass schema validation #2",
- schema: schemaCombinations["infoObject.json"],
- validateSchemaOnly: true,
- valid: true
- },
- {
- description: "should pass schema validation #3",
- schema: schemaCombinations["oauth2GrantType.json"],
- validateSchemaOnly: true,
- valid: true
- },
- {
- description: "should pass schema validation #4",
- schema: schemaCombinations["resourceObject.json"],
- validateSchemaOnly: true,
- valid: true
- },
- {
- description: "should pass schema validation #5",
- schema: schemaCombinations["resourceListing.json"],
- validateSchemaOnly: true,
- valid: true
- }
- ]
- };
- },{}],202:[function(require,module,exports){
- "use strict";
- var draft4 = require("./files/Issue47/draft4.json");
- var modifiedSchema = require("./files/Issue47/swagger_draft_modified.json");
- var realSchema = require("./files/Issue47/swagger_draft.json");
- var json = require("./files/Issue47/sample.json");
- module.exports = {
- description: "Issue #47 - references to draft4 subschema are not working",
- setup: function (validator) {
- validator.setRemoteReference("http://json-schema.orgx/draft-04/schema", draft4);
- },
- tests: [
- {
- description: "should pass validation #1",
- schema: modifiedSchema,
- data: json,
- valid: true
- },
- {
- description: "should pass validation #1",
- schema: realSchema,
- data: json,
- valid: true
- }
- ]
- };
- },{"./files/Issue47/draft4.json":226,"./files/Issue47/sample.json":227,"./files/Issue47/swagger_draft.json":228,"./files/Issue47/swagger_draft_modified.json":229}],203:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #48 - email validation too strict",
- schema: {
- type: "string",
- format: "email"
- },
- tests: [
- {
- description: "should pass validation #1",
- data: "zaggino@gmail.com",
- valid: true
- },
- {
- description: "should pass validation #2",
- data: "foo@bar.baz",
- valid: true
- },
- {
- description: "should fail validation #1",
- data: "foobar.baz",
- valid: false
- },
- {
- description: "should fail validation #2",
- data: "foo@bar",
- valid: false
- }
- ]
- };
- },{}],204:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #49 - pattern validations",
- tests: [
- {
- description: "should pass validation",
- schema: {
- type: "string",
- pattern: "^[0-9]{1}[0-9]{3}(\\s)?[A-Za-z]{2}$"
- },
- data: "0000 aa",
- valid: true
- }
- ]
- };
- },{}],205:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #53 - Include description (if any) in errors",
- tests: [
- {
- description: "should fail validation and return error description",
- schema: {
- type: "string",
- pattern: "^[0-9]{1}[0-9]{3}(\\s)?[A-Za-z]{2}$",
- description: "Four numbers followed by an optional space and then two letters."
- },
- data: "000 a",
- valid: false,
- after: function (err) {
- expect(err[0].description).toBe("Four numbers followed by an optional space and then two letters.");
- }
- }
- ]
- };
- },{}],206:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #56 - unresolvable reference due to hash sign",
- tests: [
- {
- description: "should pass validation #1",
- schema: [
- {
- id: "schemaA#",
- type: "string"
- },
- {
- id: "schemaB#",
- properties: {
- a: {
- "$ref": "schemaA#"
- }
- }
- }
- ],
- validateSchemaOnly: true,
- valid: true
- },
- {
- description: "should pass validation #2",
- schema: [
- {
- id: "http://virtual/schemaA#",
- type: "string"
- },
- {
- id: "http://virtual/schemaB#",
- properties: {
- a: {
- "$ref": "schemaA#"
- }
- }
- }
- ],
- validateSchemaOnly: true,
- valid: true
- },
- {
- description: "should pass validation #3",
- schema: [
- {
- id: "http://virtual/schemaA#",
- type: "string",
- "definitions": {
- "stringDefinition": {
- "type": "string"
- }
- }
- },
- {
- id: "http://virtual/schemaB#",
- properties: {
- a: {
- "$ref": "schemaA#/definitions/stringDefinition"
- }
- }
- }
- ],
- validateSchemaOnly: true,
- valid: true
- }
- ]
- };
- },{}],207:[function(require,module,exports){
- "use strict";
- var dataTypeBaseJson = {
- "id": "http://wordnik.github.io/schemas/v1.2/dataTypeBase.json#",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "description": "Data type fields (section 4.3.3)",
- "type": "object",
- "oneOf": [
- {
- "required": [
- "type"
- ]
- },
- {
- "required": [
- "$ref"
- ]
- }
- ],
- "properties": {
- "type": {
- "type": "string"
- },
- "$ref": {
- "type": "string"
- },
- "format": {
- "type": "string"
- },
- "defaultValue": {
- "not": {
- "type": [
- "array",
- "object",
- "null"
- ]
- }
- },
- "enum": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "uniqueItems": true,
- "minItems": 1
- },
- "minimum": {
- "type": "string"
- },
- "maximum": {
- "type": "string"
- },
- "items": {
- "$ref": "#/definitions/itemsObject"
- },
- "uniqueItems": {
- "type": "boolean"
- }
- },
- "dependencies": {
- "format": {
- "oneOf": [
- {
- "properties": {
- "type": {
- "enum": [
- "integer"
- ]
- },
- "format": {
- "enum": [
- "int32",
- "int64"
- ]
- }
- }
- },
- {
- "properties": {
- "type": {
- "enum": [
- "number"
- ]
- },
- "format": {
- "enum": [
- "float",
- "double"
- ]
- }
- }
- },
- {
- "properties": {
- "type": {
- "enum": [
- "string"
- ]
- },
- "format": {
- "enum": [
- "byte",
- "date",
- "date-time"
- ]
- }
- }
- }
- ]
- }
- },
- "definitions": {
- "itemsObject": {
- "oneOf": [
- {
- "type": "object",
- "required": [
- "$ref"
- ],
- "properties": {
- "$ref": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- {
- "allOf": [
- {
- "$ref": "#"
- },
- {
- "required": [
- "type"
- ],
- "properties": {
- "type": {},
- "format": {}
- },
- "additionalProperties": false
- }
- ]
- }
- ]
- }
- }
- };
- var modelsObjectJson = {
- "id": "http://wordnik.github.io/schemas/v1.2/modelsObject.json#",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "type": "object",
- "required": [
- "id",
- "properties"
- ],
- "properties": {
- "id": {
- "type": "string"
- },
- "description": {
- "type": "string"
- },
- "properties": {
- "type": "object",
- "additionalProperties": {
- "$ref": "#/definitions/propertyObject"
- }
- },
- "subTypes": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "uniqueItems": true
- },
- "discriminator": {
- "type": "string"
- }
- },
- "dependencies": {
- "subTypes": [
- "discriminator"
- ]
- },
- "definitions": {
- "propertyObject": {
- "allOf": [
- {
- "not": {
- "$ref": "#"
- }
- },
- {
- "$ref": "dataTypeBase.json#"
- }
- ]
- }
- }
- };
- var oauth2GrantTypeJson = {
- "id": "http://wordnik.github.io/schemas/v1.2/oauth2GrantType.json#",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "type": "object",
- "minProperties": 1,
- "properties": {
- "implicit": {
- "$ref": "#/definitions/implicit"
- },
- "authorization_code": {
- "$ref": "#/definitions/authorizationCode"
- }
- },
- "definitions": {
- "implicit": {
- "type": "object",
- "required": [
- "loginEndpoint"
- ],
- "properties": {
- "loginEndpoint": {
- "$ref": "#/definitions/loginEndpoint"
- },
- "tokenName": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "authorizationCode": {
- "type": "object",
- "required": [
- "tokenEndpoint",
- "tokenRequestEndpoint"
- ],
- "properties": {
- "tokenEndpoint": {
- "$ref": "#/definitions/tokenEndpoint"
- },
- "tokenRequestEndpoint": {
- "$ref": "#/definitions/tokenRequestEndpoint"
- }
- },
- "additionalProperties": false
- },
- "loginEndpoint": {
- "type": "object",
- "required": [
- "url"
- ],
- "properties": {
- "url": {
- "type": "string",
- "format": "uri"
- }
- },
- "additionalProperties": false
- },
- "tokenEndpoint": {
- "type": "object",
- "required": [
- "url"
- ],
- "properties": {
- "url": {
- "type": "string",
- "format": "uri"
- },
- "tokenName": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "tokenRequestEndpoint": {
- "type": "object",
- "required": [
- "url"
- ],
- "properties": {
- "url": {
- "type": "string",
- "format": "uri"
- },
- "clientIdName": {
- "type": "string"
- },
- "clientSecretName": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- }
- };
- var authorizationObjectJson = {
- "id": "http://wordnik.github.io/schemas/v1.2/authorizationObject.json#",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "type": "object",
- "additionalProperties": {
- "oneOf": [
- {
- "$ref": "#/definitions/basicAuth"
- },
- {
- "$ref": "#/definitions/apiKey"
- },
- {
- "$ref": "#/definitions/oauth2"
- }
- ]
- },
- "definitions": {
- "basicAuth": {
- "required": [
- "type"
- ],
- "properties": {
- "type": {
- "enum": [
- "basicAuth"
- ]
- }
- },
- "additionalProperties": false
- },
- "apiKey": {
- "required": [
- "type",
- "passAs",
- "keyname"
- ],
- "properties": {
- "type": {
- "enum": [
- "apiKey"
- ]
- },
- "passAs": {
- "enum": [
- "header",
- "query"
- ]
- },
- "keyname": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "oauth2": {
- "type": "object",
- "required": [
- "type",
- "grantTypes"
- ],
- "properties": {
- "type": {
- "enum": [
- "oauth2"
- ]
- },
- "scopes": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/oauth2Scope"
- }
- },
- "grantTypes": {
- "$ref": "oauth2GrantType.json#"
- }
- },
- "additionalProperties": false
- },
- "oauth2Scope": {
- "type": "object",
- "required": [
- "scope"
- ],
- "properties": {
- "scope": {
- "type": "string"
- },
- "description": {
- "type": "string"
- }
- },
- "additionalProperties": false
- }
- }
- };
- var parameterObjectJson = {
- "id": "http://wordnik.github.io/schemas/v1.2/parameterObject.json#",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "type": "object",
- "allOf": [
- {
- "$ref": "dataTypeBase.json#"
- },
- {
- "required": [
- "paramType",
- "name"
- ],
- "properties": {
- "paramType": {
- "enum": [
- "path",
- "query",
- "body",
- "header",
- "form"
- ]
- },
- "name": {
- "type": "string"
- },
- "description": {
- "type": "string"
- },
- "required": {
- "type": "boolean"
- },
- "allowMultiple": {
- "type": "boolean"
- }
- }
- },
- {
- "description": "type File requires special paramType and consumes",
- "oneOf": [
- {
- "properties": {
- "type": {
- "not": {
- "enum": [
- "File"
- ]
- }
- }
- }
- },
- {
- "properties": {
- "type": {
- "enum": [
- "File"
- ]
- },
- "paramType": {
- "enum": [
- "form"
- ]
- },
- "consumes": {
- "enum": [
- "multipart/form-data"
- ]
- }
- }
- }
- ]
- }
- ]
- };
- var operationObjectJson = {
- "id": "http://wordnik.github.io/schemas/v1.2/operationObject.json#",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "type": "object",
- "allOf": [
- {
- "$ref": "dataTypeBase.json#"
- },
- {
- "required": [
- "method",
- "nickname",
- "parameters"
- ],
- "properties": {
- "method": {
- "enum": [
- "GET",
- "POST",
- "PUT",
- "PATCH",
- "DELETE",
- "OPTIONS"
- ]
- },
- "summary": {
- "type": "string",
- "maxLength": 120
- },
- "notes": {
- "type": "string"
- },
- "nickname": {
- "type": "string",
- "pattern": "^[a-zA-Z0-9_]+$"
- },
- "authorizations": {
- "type": "object",
- "additionalProperties": {
- "type": "array",
- "items": {
- "$ref": "authorizationObject.json#/definitions/oauth2Scope"
- }
- }
- },
- "parameters": {
- "type": "array",
- "items": {
- "$ref": "parameterObject.json#"
- }
- },
- "responseMessages": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/responseMessageObject"
- }
- },
- "produces": {
- "$ref": "#/definitions/mimeTypeArray"
- },
- "consumes": {
- "$ref": "#/definitions/mimeTypeArray"
- },
- "deprecated": {
- "enum": [
- "true",
- "false"
- ]
- }
- }
- }
- ],
- "definitions": {
- "responseMessageObject": {
- "type": "object",
- "required": [
- "code",
- "message"
- ],
- "properties": {
- "code": {
- "$ref": "#/definitions/rfc2616section10"
- },
- "message": {
- "type": "string"
- },
- "responseModel": {
- "type": "string"
- }
- }
- },
- "rfc2616section10": {
- "type": "integer",
- "minimum": 100,
- "maximum": 600,
- "exclusiveMaximum": true
- },
- "mimeTypeArray": {
- "type": "array",
- "items": {
- "type": "string",
- "format": "mime-type"
- }
- }
- }
- };
- var apiDeclarationJson = {
- "id": "http://wordnik.github.io/schemas/v1.2/apiDeclaration.json#",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "type": "object",
- "required": [
- "swaggerVersion",
- "basePath",
- "apis"
- ],
- "properties": {
- "swaggerVersion": {
- "enum": [
- "1.2"
- ]
- },
- "apiVersion": {
- "type": "string"
- },
- "basePath": {
- "type": "string",
- "format": "uri",
- "pattern": "^https?://"
- },
- "resourcePath": {
- "type": "string",
- "format": "uri",
- "pattern": "^/"
- },
- "apis": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/apiObject"
- }
- },
- "models": {
- "type": "object",
- "additionalProperties": {
- "$ref": "modelsObject.json#"
- }
- },
- "produces": {
- "$ref": "#/definitions/mimeTypeArray"
- },
- "consumes": {
- "$ref": "#/definitions/mimeTypeArray"
- },
- "authorizations": {
- "$ref": "authorizationObject.json#"
- }
- },
- "additionalProperties": false,
- "definitions": {
- "apiObject": {
- "type": "object",
- "required": [
- "path",
- "operations"
- ],
- "properties": {
- "path": {
- "type": "string",
- "format": "uri-template",
- "pattern": "^/"
- },
- "description": {
- "type": "string"
- },
- "operations": {
- "type": "array",
- "items": {
- "$ref": "operationObject.json#"
- }
- }
- },
- "additionalProperties": false
- },
- "mimeTypeArray": {
- "type": "array",
- "items": {
- "type": "string",
- "format": "mime-type"
- }
- }
- }
- };
- module.exports = {
- description: "Issue #57 - maximum call stack exceeded error",
- setup: function (validator, Class) {
- Class.registerFormat("mime-type", function () {
- return true;
- });
- Class.registerFormat("uri-template", function () {
- return true;
- });
- },
- tests: [
- {
- description: "should pass validation #1",
- schema: [
- dataTypeBaseJson,
- modelsObjectJson,
- oauth2GrantTypeJson,
- authorizationObjectJson,
- parameterObjectJson,
- operationObjectJson,
- apiDeclarationJson
- ],
- validateSchemaOnly: true,
- valid: true
- }
- ]
- };
- },{}],208:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #58 - getMissingReferences should return all missing references",
- tests: [
- {
- description: "should fail validation",
- schema: {
- "id": "root.json",
- "person": {
- "id": "personDetails",
- "type": "object",
- "properties": {
- "firstName": {
- "type": "string"
- },
- "lastName": {
- "type": "string"
- }
- },
- "required": ["firstName", "lastName"]
- },
- "addr": {
- "id": "addressDetails",
- "type": "object",
- "properties": {
- "street": {
- "type": "string"
- },
- "city": {
- "type": "string"
- }
- },
- "required": ["street", "city"]
- },
- "peraddr": {
- "id": "personWithAddress",
- "allOf": [{
- "$ref": "#personDetails"
- }, {
- "$ref": "#addressDetails"
- }, {
- "$ref": "#/yy"
- }, {
- "$ref": "#xx"
- }]
- }
- },
- validateSchemaOnly: true,
- valid: false,
- after: function (err, valid, data, validator) {
- var missingReferences = validator.getMissingReferences();
- expect(missingReferences.length).toBe(2);
- expect(missingReferences.indexOf("#xx")).not.toBe(-1);
- expect(missingReferences.indexOf("#/yy")).not.toBe(-1);
- var missingRemoteReferences = validator.getMissingRemoteReferences();
- expect(missingRemoteReferences.length).toBe(0);
- }
- }
- ]
- };
- },{}],209:[function(require,module,exports){
- /*jshint -W101*/
- "use strict";
- module.exports = {
- description: "Issue #63 - unresolvable reference due to hash sign in id",
- tests: [
- {
- description: "should pass validation #1",
- schema: {
- "properties": {
- "statementpost": {
- "id": "#statementpost",
- "type": [
- "object"
- ]
- },
- "statement": {
- "id": "#statement",
- "type": "object",
- }
- }
- },
- validateSchemaOnly: true,
- valid: true
- },
- {
- description: "should pass validation #2",
- schema: {
- "properties": {
- "uuid": {
- "id": "#uuid",
- "type": "string",
- "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{8}"
- },
- "mbox": {
- "id": "#mbox",
- "type": "object",
- "properties": {
- "mbox": {
- "required": true,
- "type": "string",
- "format": "uri",
- "pattern": "^mailto:"
- }
- },
- "patternProperties": {
- "^(mbox_sha1sum|account|openid)$": {
- "type": "null"
- }
- }
- },
- "mbox_sha1sum": {
- "id": "#mbox_sha1sum",
- "type": "object",
- "properties": {
- "mbox_sha1sum": {
- "required": true,
- "type": "string"
- }
- },
- "patternProperties": {
- "^(mbox|account|openid)$": {
- "type": "null"
- }
- }
- },
- "account": {
- "id": "#account",
- "type": "object",
- "properties": {
- "account": {
- "required": true,
- "type": "object",
- "properties": {
- "homePage": {
- "type": "string",
- "format": "uri",
- "required": true
- },
- "name": {
- "type": "string",
- "required": true
- }
- },
- "additionalProperties": false
- }
- },
- "patternProperties": {
- "^(mbox_sha1sum|mbox|openid)$": {
- "type": "null"
- }
- }
- },
- "openid": {
- "id": "#openid",
- "type": "object",
- "properties": {
- "openid": {
- "required": true,
- "type": "string",
- "format": "uri"
- }
- },
- "patternProperties": {
- "^(mbox_sha1sum|account|mbox)$": {
- "type": "null"
- }
- }
- },
- "inversefunctional": {
- "id": "#inversefunctional",
- "type": [
- {
- "$ref": "#mbox"
- },
- {
- "$ref": "#mbox_sha1sum"
- },
- {
- "$ref": "#account"
- },
- {
- "$ref": "#openid"
- }
- ]
- },
- "agent": {
- "id": "#agent",
- "type": [
- {
- "$ref": "#inversefunctional"
- }
- ],
- "properties": {
- "name": {
- "type": "string"
- },
- "objectType": {
- "enum": ["Agent"]
- },
- "mbox": {},
- "mbox_sha1sum": {},
- "account": {},
- "openid": {}
- },
- "additionalProperties": false
- },
- "groupBasics": {
- "id": "#groupBasics",
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- },
- "objectType": {
- "enum": ["Group"],
- "required": true
- },
- "member": {
- "type": "array",
- "items": {
- "$ref": "#agent"
- }
- }
- }
- },
- "anonymousgroup": {
- "id": "#anonymousgroup",
- "properties": {
- "member": {
- "required": true
- },
- "name": {},
- "objectType": {}
- },
- "additionalProperties": false
- },
- "identifiedgroup": {
- "id": "#identifiedgroup",
- "extends": {
- "$ref": "#inversefunctional"
- },
- "properties": {
- "name": {},
- "objectType": {},
- "member": {},
- "mbox": {},
- "mbox_sha1sum": {},
- "account": {},
- "openid": {}
- },
- "additionalProperties": false
- },
- "group": {
- "id": "#group",
- "extends": {
- "$ref": "#groupBasics"
- },
- "type": [
- {
- "$ref": "#anonymousgroup"
- },
- {
- "$ref": "#identifiedgroup"
- }
- ]
- },
- "languagemap": {
- "id": "#languagemap",
- "type": "object",
- "patternProperties": {
- "^(([a-zA-Z]{2,8}((-[a-zA-Z]{3}){0,3})(-[a-zA-Z]{4})?((-[a-zA-Z]{2})|(-\\d{3}))?(-[a-zA-Z\\d]{4,8})*(-[a-zA-Z\\d](-[a-zA-Z\\d]{1,8})+)*)|x(-[a-zA-Z\\d]{1,8})+|en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tsu|i-tay|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)$": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "extensions": {
- "id": "#extensions",
- "patternProperties": {
- "^[a-zA-Z][a-zA-Z+.-]*:": {
- "type": "any"
- }
- },
- "additionalProperties": false
- },
- "activity": {
- "id": "#activity",
- "type": "object",
- "properties": {
- "id": {
- "type": "string",
- "format": "uri",
- "required": true
- },
- "objectType": {
- "enum": ["Activity"]
- },
- "definition": {
- "type": "object",
- "properties": {
- "name": {
- "$ref": "#languagemap"
- },
- "description": {
- "$ref": "#languagemap"
- },
- "type": {
- "type": "string",
- "format": "uri"
- },
- "interactionType": {
- "enum": [
- "true-false",
- "choice",
- "fill-in",
- "long-fill-in",
- "matching",
- "performance",
- "sequencing",
- "likert",
- "numeric",
- "other"
- ]
- },
- "correctResponsesPattern": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "extensions": {
- "$ref": "#extensions"
- }
- },
- "patternProperties": {
- "^(choices|scale|source|target|steps)$": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string",
- "required": true
- },
- "description": {
- "$ref": "#languagemap"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "objectagent": {
- "id": "#objectagent",
- "type": [
- {
- "$ref": "#agent"
- }
- ],
- "properties": {
- "objectType": {
- "required": true
- }
- }
- },
- "statementref": {
- "id": "#statementref",
- "type": "object",
- "properties": {
- "objectType": {
- "enum": ["StatementRef"],
- "required": true
- },
- "id": {
- "type": [
- {
- "$ref": "#uuid"
- }
- ],
- "required": true
- }
- },
- "additionalProperties": false
- },
- "substatement": {
- "id": "#substatement",
- "type": [
- {
- "$ref": "#statement"
- }
- ],
- "properties": {
- "objectType": {
- "enum": ["SubStatement"],
- "required": true
- },
- "object": {
- "disallow": [
- {
- "properties": {
- "objectType": {
- "enum": ["SubStatement"]
- }
- }
- }
- ]
- }
- },
- "patternProperties": {
- "^(id|stored|authority|voided)$": {
- "type": "null"
- }
- }
- },
- "statement": {
- "id": "#statement",
- "type": "object",
- "properties": {
- "id": {
- "$ref": "#uuid"
- },
- "actor": {
- "type": [
- {
- "$ref": "#agent"
- },
- {
- "$ref": "#group"
- }
- ],
- "required": true
- },
- "verb": {
- "required": true,
- "type": "object",
- "properties": {
- "id": {
- "required": true,
- "type": "string",
- "format": "uri"
- },
- "display": {
- "$ref": "#languagemap"
- }
- },
- "additionalProperties": false
- },
- "object": {
- "type": [
- {
- "$ref": "#activity"
- },
- {
- "$ref": "#objectagent"
- },
- {
- "$ref": "#group"
- },
- {
- "$ref": "#statementref"
- },
- {
- "$ref": "#substatement"
- }
- ],
- "required": true
- },
- "objectType": {},
- "result": {
- "type": "object",
- "properties": {
- "score": {
- "type": "object",
- "properties": {
- "scaled": {
- "type": "number",
- "minimum": 0,
- "maximum": 1
- },
- "raw": {
- "type": "number"
- },
- "min": {
- "type": "number"
- },
- "max": {
- "type": "number"
- }
- }
- },
- "success": {
- "type": "boolean"
- },
- "completion": {
- "type": "boolean"
- },
- "response": {
- "type": "string"
- },
- "duration": {
- "type": "string"
- },
- "extensions": {
- "$ref": "#extensions"
- }
- },
- "additionalProperties": false
- },
- "context": {
- "type": "object",
- "properties": {
- "registration": {
- "$ref": "#uuid"
- },
- "instructor": {
- "type": [
- {
- "$ref": "#agent"
- },
- {
- "$ref": "#group"
- }
- ]
- },
- "team": {
- "type": [
- {
- "$ref": "#agent"
- },
- {
- "$ref": "#group"
- }
- ]
- },
- "contextActivities": {
- "type": "object",
- "properties": {
- "parent": {
- "$ref": "#activity"
- },
- "grouping": {
- "$ref": "#activity"
- },
- "other": {
- "$ref": "#activity"
- }
- },
- "additionalProperties": false
- },
- "revision": {
- "type": "string"
- },
- "platform": {
- "type": "string"
- },
- "language": {
- "type": "string"
- },
- "statement": {
- "$ref": "#statementref"
- },
- "extensions": {
- "$ref": "#extensions"
- }
- },
- "additionalProperties": false
- },
- "timestamp": {
- "type": "string"
- },
- "stored": {
- "type": "string"
- },
- "authority": {
- "type": [
- {
- "$ref": "#agent"
- },
- {
- "type": [
- {
- "$ref": "#anonymousgroup"
- }
- ],
- "properties": {
- "member": {
- "type": "array",
- "minItems": 2,
- "maxItems": 2
- }
- }
- }
- ]
- },
- "voided": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- }
- }
- },
- data: {
- "id": "fd41c918-b88b-4b20-a0a5-a4c32391aaa0",
- "actor": {
- "objectType": "Blowup",
- "name": "Project Tin Can API",
- "mbox": "mailto:user@example.com"
- },
- "verb": {
- "id": "http://adlnet.gov/expapi/verbs/created",
- "display": {
- "en-US": "created"
- }
- },
- "object": {
- "id": "http://example.adlnet.gov/xapi/example/simplestatement",
- "definition": {
- "name": {
- "en-US": "simple statement"
- },
- "description": {
- "en-US": "A simple Experience API statement. Note that the LRS does not need to have any prior information about the Actor (learner), the verb, or the Activity/object."
- }
- }
- }
- },
- valid: false
- }
- ]
- };
- },{}],210:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #64 - fix inconsistent error paths for missing reference errors",
- tests: [
- {
- description: "should fail validation and report correct error path",
- schema: {
- type: "object",
- properties: {
- name: {
- type: "string"
- },
- friends: {
- type: "array",
- items: {
- $ref: "Person.json"
- }
- }
- }
- },
- valid: false,
- validateSchemaOnly: true,
- after: function (err) {
- expect(err[0].path).toEqual("#/properties/friends/items");
- }
- }
- ]
- };
- },{}],211:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #67 - references problem",
- tests: [
- {
- description: "should pass validation #1",
- setup: function (validator, Class) {
- Class.registerFormat("not-blank", function () {
- return true;
- });
- },
- schema: [
- {
- "$schema": "http://json-schema.org/draft-04/schema#",
- "id": "NaturalNumber",
- "type": "integer",
- "minimum": 1
- },
- {
- "$schema": "http://json-schema.org/draft-04/schema#",
- "id": "WholeNumber",
- "type": "integer"
- },
- {
- "$schema": "http://json-schema.org/draft-04/schema#",
- "id": "NotEmptyString",
- "type": "string",
- "minLength": 1
- },
- {
- "$schema": "http://json-schema.org/draft-04/schema#",
- "id": "NotBlankString",
- "allOf": [
- {
- "$ref": "NotEmptyString"
- },
- {
- "type": "string",
- "format": "not-blank"
- }
- ]
- }
- ],
- validateSchemaOnly: true,
- valid: true
- }
- ]
- };
- },{}],212:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #71 - additionalProperties problem",
- tests: [
- {
- description: "should have two errors #1",
- schema: {
- type: "object",
- minProperties: 1,
- additionalProperties: false,
- properties: {
- foo: {
- type: "object",
- minProperties: 1
- }
- }
- },
- data: { foo: {}, bar: 1 },
- valid: false,
- after: function (errors) {
- expect(errors.length).toBe(2);
- }
- },
- {
- description: "should have two errors #2",
- schema: {
- type: "object",
- minProperties: 1,
- additionalProperties: false,
- properties: {
- foo: {
- type: "object",
- minProperties: 1,
- additionalProperties: false,
- properties: {
- foo: {}
- }
- }
- }
- },
- data: { foo: {}, bar: 1 },
- valid: false,
- after: function (errors) {
- expect(errors.length).toBe(2);
- }
- },
- {
- description: "should have more than one error with breakOnFirstError false #1",
- options: {
- breakOnFirstError: false
- },
- schema: {
- type: "object",
- minProperties: 1,
- additionalProperties: false,
- properties: {
- foo: {
- type: "object",
- minProperties: 1
- }
- }
- },
- data: { foo: {}, bar: 1 },
- valid: false,
- after: function (errors) {
- expect(errors.length).toBeGreaterThan(1);
- }
- },
- {
- description: "should have more than one error with breakOnFirstError false #2",
- options: {
- breakOnFirstError: false
- },
- schema: {
- type: "object",
- minProperties: 1,
- additionalProperties: false,
- properties: {
- foo: {
- type: "object",
- minProperties: 1,
- additionalProperties: false,
- properties: {
- foo: {}
- }
- }
- }
- },
- data: { foo: {}, bar: 1 },
- valid: false,
- after: function (errors) {
- expect(errors.length).toBeGreaterThan(1);
- }
- }
- ]
- };
- },{}],213:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #73 - getLastError method should return an instance of native Error",
- tests: [
- {
- description: "should pass the basic test",
- schema: {
- id: "schemaA",
- type: "object",
- properties: {
- a: {
- type: "integer"
- },
- b: {
- type: "string"
- },
- c: {
- $ref: "schemaB"
- }
- },
- required: ["a"]
- },
- validateSchemaOnly: true,
- valid: false,
- after: function (err, valid, data, validator) {
- var e = validator.getLastError();
- expect(e instanceof Error).toBe(true);
- expect(e.message).toBe("SCHEMA_COMPILATION_FAILED");
- }
- },
- {
- description: "should pass the basic test",
- data: { "b": true },
- schema: {
- id: "schemaA",
- type: "object",
- properties: {
- a: {
- type: "integer"
- },
- b: {
- type: "string"
- }
- },
- required: ["a"]
- },
- valid: false,
- after: function (err, valid, data, validator) {
- var e = validator.getLastError();
- expect(e instanceof Error).toBe(true);
- expect(e.message).toBe("JSON_OBJECT_VALIDATION_FAILED");
- }
- }
- ]
- };
- },{}],214:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #76 - circular dependencies between schemas",
- tests: [
- {
- description: "should pass validation",
- schema: [
- {
- id: "id",
- type: "number"
- },
- {
- id: "user",
- type: "object",
- properties: {
- id: {
- $ref: "id"
- },
- posts: {
- type: "array",
- items: {
- $ref: "post"
- }
- }
- }
- },
- {
- id: "post",
- type: "object",
- properties: {
- id: {
- $ref: "id"
- },
- author: {
- $ref: "user"
- }
- }
- }
- ],
- schemaIndex: 2,
- data: {
- id: 11,
- author: {
- id: 1,
- posts: [
- {
- id: 11,
- author: {
- id: 1
- }
- },
- {
- id: 12,
- author: {
- id: 1
- }
- },
- {
- id: 13,
- author: {
- id: 1
- }
- }
- ]
- }
- },
- valid: true
- }
- ]
- };
- },{}],215:[function(require,module,exports){
- "use strict";
- var innerSchema = {
- type: "integer"
- };
- var originalSchema = {
- type: "object",
- properties: {
- inner: innerSchema
- }
- };
- var getKeys = function (obj) {
- var arr = [];
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- arr.push(key);
- }
- }
- return arr;
- };
- var originalSchemaKeys = getKeys(originalSchema);
- var innerSchemaKeys = getKeys(innerSchema);
- module.exports = {
- description: "Issue #85 - zschema shouldn't have side effects on the schema object",
- tests: [
- {
- description: "should pass validation",
- schema: originalSchema,
- data: {
- inner: 5
- },
- valid: true,
- after: function () {
- expect(getKeys(originalSchema).length).toBe(originalSchemaKeys.length);
- expect(getKeys(innerSchemaKeys).length).toBe(innerSchemaKeys.length);
- }
- }
- ]
- };
- },{}],216:[function(require,module,exports){
- "use strict";
- var schema1 = {
- "id": "long-string",
- "type": "string",
- "maxLength": 4096
- };
- var schema2 = {
- "id": "person-object",
- "type": "object",
- "properties": {
- "name": {
- "$ref": "long-string"
- }
- }
- };
- var expectedResult = {
- "id": "person-object",
- "type": "object",
- "properties": {
- "name": {
- "id": "long-string",
- "type": "string",
- "maxLength": 4096
- }
- }
- };
- module.exports = {
- description: "Issue #94 - get a resolved schema for documentation purposes",
- tests: [
- {
- description: "should pass validation",
- schema: [schema1, schema2],
- validateSchemaOnly: true,
- valid: true,
- after: function (err, valid, data, validator) {
- var newSch = validator.getResolvedSchema("person-object");
- expect(JSON.stringify(newSch)).toBe(JSON.stringify(expectedResult));
- }
- }
- ]
- };
- },{}],217:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #96 - email format validation false negatives",
- schema: {
- type: "string",
- format: "email"
- },
- tests: [
- {
- description: "should pass validation #1",
- data: "my_email@gmail.com",
- valid: true
- }
- ]
- };
- },{}],218:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "Issue #98 - oneOf",
- tests: [
- {
- description: "should return only one error for each branch",
- schema: {
- "type": "object",
- "oneOf": [
- {
- "type": "object",
- "required": ["a", "b"]
- },
- {
- "type": "object",
- "required": ["c", "d"]
- }
- ]
- },
- data: {},
- valid: false,
- after: function (err, valid, data, validator) {
- expect(err.length).toBe(1);
- expect(err[0].code).toBe("ONE_OF_MISSING");
- expect(err[0].inner.length).toBe(2);
- }
- }
- ]
- };
- },{}],219:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "compile a schema array and validate against one of the schemas - README sample",
- tests: [
- {
- description: "should validate object successfully",
- schema: [
- {
- id: "personDetails",
- type: "object",
- properties: {
- firstName: {
- type: "string"
- },
- lastName: {
- type: "string"
- }
- },
- required: ["firstName", "lastName"]
- },
- {
- id: "addressDetails",
- type: "object",
- properties: {
- street: {
- type: "string"
- },
- city: {
- type: "string"
- }
- },
- required: ["street", "city"]
- },
- {
- id: "personWithAddress",
- allOf: [
- {
- $ref: "personDetails"
- },
- {
- $ref: "addressDetails"
- }
- ]
- }
- ],
- schemaIndex: 2,
- data: {
- firstName: "Martin",
- lastName: "Zagora",
- street: "George St",
- city: "Sydney"
- },
- valid: true
- }
- ]
- };
- },{}],220:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "noEmptyArrays - Don't allow empty arrays to validate as arrays",
- options: {
- noEmptyArrays: true
- },
- schema: {
- "type": "array"
- },
- tests: [
- {
- description: "should pass validation when having one item array",
- data: ["item"],
- valid: true
- },
- {
- description: "should fail validation when having empty array",
- data: [],
- valid: false
- }
- ]
- };
- },{}],221:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "noEmptyStrings - Don't allow empty strings to validate as strings",
- options: {
- noEmptyStrings: true
- },
- schema: {
- "type": "string"
- },
- tests: [
- {
- description: "should pass validation when using a proper string",
- data: "hello",
- valid: true
- },
- {
- description: "should fail validation when using an empty string",
- data: "",
- valid: false
- }
- ]
- };
- },{}],222:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "noExtraKeywords - Forbid unrecognized keywords to be defined in schemas",
- options: {
- noExtraKeywords: true
- },
- validateSchemaOnly: true,
- tests: [
- {
- schema: {},
- description: "should pass schema validation",
- valid: true
- },
- {
- schema: {
- "random_keyword": "string"
- },
- description: "should fail schema validation, because 'random_keyword' is not known keyword",
- valid: false
- },
- {
- schema: {
- "$schema": "http://json-schema.org/draft-04/schema#",
- "random_keyword": "string"
- },
- description: "should pass schema validation, because schema is validated by $schema, even though it has 'random_keyword'",
- valid: true
- },
- {
- schema: {
- "$schema": "http://json-schema.org/draft-04/schema#",
- "title": 1
- },
- description: "should fail schema validation, because schema is validated by $schema and number is not valid for title",
- valid: false,
- after: function (err, valid) {
- expect(valid).toBe(false);
- expect(err[0].code).toBe("PARENT_SCHEMA_VALIDATION_FAILED");
- }
- }
- ]
- };
- },{}],223:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "noTypeless - Don't allow schemas without type specified",
- validateSchemaOnly: true,
- options: {
- noTypeless: true
- },
- tests: [
- {
- description: "should pass validation when using a type in schema",
- schema: {
- "type": "string"
- },
- valid: true
- },
- {
- description: "should fail validation when not using a type in schema",
- schema: {},
- valid: false
- }
- ]
- };
- },{}],224:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "pedanticCheck - check if schema follow best practices and common sense",
- options: {
- pedanticCheck: true,
- breakOnFirstError: false
- },
- validateSchemaOnly: true,
- tests: [
- {
- schema: {
- "type": "string",
- "default": true
- },
- description: "should fail schema validation because default has incorrect value",
- valid: false
- },
- {
- schema: {
- "type": "string",
- "enum": ["OK", false]
- },
- description: "should fail schema validation because enum has incorrect value",
- valid: false
- },
- {
- schema: {
- "type": "string",
- "enum": ["OK", false],
- "default": true
- },
- description: "should fail schema validation because both enum and default has incorrect values",
- valid: false
- }
- ]
- };
- },{}],225:[function(require,module,exports){
- "use strict";
- module.exports = {
- description: "strictUris - validates URIs as absolute and disallow URI references",
- options: {
- strictUris: true
- },
- tests: [
- {
- schema: {
- "type": "string",
- "format": "uri"
- },
- data: "http://json-schema.org/draft-04/schema",
- description: "should pass validation because it is an absolute URI",
- valid: true
- },
- {
- schema: {
- "type": "string",
- "format": "uri"
- },
- data: "schemaA",
- description: "should fail validation because it is only a valid URI reference",
- valid: false
- }
- ]
- };
- },{}],226:[function(require,module,exports){
- module.exports={
- "id": "http://json-schema.org/draft-04/schema#",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "description": "Core schema meta-schema",
- "definitions": {
- "schemaArray": {
- "type": "array",
- "minItems": 1,
- "items": { "$ref": "#" }
- },
- "positiveInteger": {
- "type": "integer",
- "minimum": 0
- },
- "positiveIntegerDefault0": {
- "allOf": [ { "$ref": "#/definitions/positiveInteger" }, { "default": 0 } ]
- },
- "simpleTypes": {
- "enum": [ "array", "boolean", "integer", "null", "number", "object", "string" ]
- },
- "stringArray": {
- "type": "array",
- "items": { "type": "string" },
- "minItems": 1,
- "uniqueItems": true
- }
- },
- "type": "object",
- "properties": {
- "id": {
- "type": "string",
- "format": "uri"
- },
- "$schema": {
- "type": "string",
- "format": "uri"
- },
- "title": {
- "type": "string"
- },
- "description": {
- "type": "string"
- },
- "default": {},
- "multipleOf": {
- "type": "number",
- "minimum": 0,
- "exclusiveMinimum": true
- },
- "maximum": {
- "type": "number"
- },
- "exclusiveMaximum": {
- "type": "boolean",
- "default": false
- },
- "minimum": {
- "type": "number"
- },
- "exclusiveMinimum": {
- "type": "boolean",
- "default": false
- },
- "maxLength": { "$ref": "#/definitions/positiveInteger" },
- "minLength": { "$ref": "#/definitions/positiveIntegerDefault0" },
- "pattern": {
- "type": "string",
- "format": "regex"
- },
- "additionalItems": {
- "anyOf": [
- { "type": "boolean" },
- { "$ref": "#" }
- ],
- "default": {}
- },
- "items": {
- "anyOf": [
- { "$ref": "#" },
- { "$ref": "#/definitions/schemaArray" }
- ],
- "default": {}
- },
- "maxItems": { "$ref": "#/definitions/positiveInteger" },
- "minItems": { "$ref": "#/definitions/positiveIntegerDefault0" },
- "uniqueItems": {
- "type": "boolean",
- "default": false
- },
- "maxProperties": { "$ref": "#/definitions/positiveInteger" },
- "minProperties": { "$ref": "#/definitions/positiveIntegerDefault0" },
- "required": { "$ref": "#/definitions/stringArray" },
- "additionalProperties": {
- "anyOf": [
- { "type": "boolean" },
- { "$ref": "#" }
- ],
- "default": {}
- },
- "definitions": {
- "type": "object",
- "additionalProperties": { "$ref": "#" },
- "default": {}
- },
- "properties": {
- "type": "object",
- "additionalProperties": { "$ref": "#" },
- "default": {}
- },
- "patternProperties": {
- "type": "object",
- "additionalProperties": { "$ref": "#" },
- "default": {}
- },
- "dependencies": {
- "type": "object",
- "additionalProperties": {
- "anyOf": [
- { "$ref": "#" },
- { "$ref": "#/definitions/stringArray" }
- ]
- }
- },
- "enum": {
- "type": "array",
- "minItems": 1,
- "uniqueItems": true
- },
- "type": {
- "anyOf": [
- { "$ref": "#/definitions/simpleTypes" },
- {
- "type": "array",
- "items": { "$ref": "#/definitions/simpleTypes" },
- "minItems": 1,
- "uniqueItems": true
- }
- ]
- },
- "allOf": { "$ref": "#/definitions/schemaArray" },
- "anyOf": { "$ref": "#/definitions/schemaArray" },
- "oneOf": { "$ref": "#/definitions/schemaArray" },
- "not": { "$ref": "#" }
- },
- "dependencies": {
- "exclusiveMaximum": [ "maximum" ],
- "exclusiveMinimum": [ "minimum" ]
- },
- "default": {}
- }
- },{}],227:[function(require,module,exports){
- module.exports={
- "swagger": 2,
- "info": {
- "version": "1.0.0",
- "title": "Swagger Petstore",
- "contact": {
- "name": "wordnik api team",
- "url": "http://developer.wordnik.com"
- },
- "license": {
- "name": "Creative Commons 4.0 International",
- "url": "http://creativecommons.org/licenses/by/4.0/"
- }
- },
- "host": "http://petstore.swagger.wordnik.com",
- "basePath": "/api",
- "schemes": [
- "http"
- ],
- "paths": {
- "/pets": {
- "get": {
- "tags": [
- "Pet Operations"
- ],
- "summary": "finds pets in the system",
- "responses": {
- "200": {
- "description": "pet response",
- "schema": {
- "type": "array",
- "items": {
- "$ref": "#/models/Pet"
- }
- },
- "headers": [
- {
- "x-expires": {
- "type": "string"
- }
- }
- ]
- },
- "default": {
- "description": "unexpected error",
- "schema": {
- "$ref": "#/models/Error"
- }
- }
- }
- }
- }
- },
- "schemas": {
- "Pet": {
- "required": [
- "id",
- "name"
- ],
- "properties": {
- "id": {
- "type": "integer",
- "format": "int64"
- },
- "name": {
- "type": "string"
- },
- "tag": {
- "type": "string"
- }
- }
- },
- "Error": {
- "required": [
- "code",
- "message"
- ],
- "properties": {
- "code": {
- "type": "integer",
- "format": "int32"
- },
- "message": {
- "type": "string"
- }
- }
- }
- }
- }
- },{}],228:[function(require,module,exports){
- module.exports={
- "title": "A JSON Schema for Swagger 2.0 API.",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "type": "object",
- "required": [ "swagger", "info", "paths" ],
- "definitions": {
- "info": {
- "type": "object",
- "description": "General information about the API.",
- "required": [ "version", "title" ],
- "additionalProperties": false,
- "patternProperties": {
- "^x-": {
- "$ref": "#/definitions/vendorExtension"
- }
- },
- "properties": {
- "version": {
- "type": "string",
- "description": "A semantic version number of the API."
- },
- "title": {
- "type": "string",
- "description": "A unique and precise title of the API."
- },
- "description": {
- "type": "string",
- "description": "A longer description of the API. Should be different from the title."
- },
- "termsOfService": {
- "type": "string",
- "description": "The terms of service for the API."
- },
- "contact": {
- "type": "object",
- "description": "Contact information for the owners of the API.",
- "additionalProperties": false,
- "properties": {
- "name": {
- "type": "string",
- "description": "The identifying name of the contact person/organization."
- },
- "url": {
- "type": "string",
- "description": "The URL pointing to the contact information.",
- "format": "uri"
- },
- "email": {
- "type": "string",
- "description": "The email address of the contact person/organization.",
- "format": "email"
- }
- }
- },
- "license": {
- "type": "object",
- "required": [ "name" ],
- "additionalProperties": false,
- "properties": {
- "name": {
- "type": "string",
- "description": "The name of the license type. It's encouraged to use an OSI compatible license."
- },
- "url": {
- "type": "string",
- "description": "The URL pointing to the license.",
- "format": "uri"
- }
- }
- }
- }
- },
- "example": {
- "type": "object",
- "patternProperties": {
- "^[a-z0-9-]+/[a-z0-9-+]+$": {}
- },
- "additionalProperties": false
- },
- "mimeType": {
- "type": "string",
- "pattern": "^[a-z0-9-]+/[a-z0-9-+]+$",
- "description": "The MIME type of the HTTP message."
- },
- "operation": {
- "type": "object",
- "required": [ "responses" ],
- "additionalProperties": false,
- "patternProperties": {
- "^x-": {
- "$ref": "#/definitions/vendorExtension"
- }
- },
- "properties": {
- "tags": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "summary": {
- "type": "string",
- "description": "A brief summary of the operation."
- },
- "description": {
- "type": "string",
- "description": "A longer description of the operation."
- },
- "operationId": {
- "type": "string",
- "description": "A friendly name of the operation"
- },
- "produces": {
- "type": "array",
- "description": "A list of MIME types the API can produce.",
- "additionalItems": false,
- "items": {
- "$ref": "#/definitions/mimeType"
- }
- },
- "parameters": {
- "type": "array",
- "description": "The parameters needed to send a valid API call.",
- "minItems": 1,
- "additionalItems": false,
- "items": {
- "$ref": "#/definitions/parameter"
- }
- },
- "responses": {
- "$ref": "#/definitions/responses"
- },
- "schemes": {
- "type": "array",
- "description": "The transfer protocol of the API.",
- "items": {
- "type": "string",
- "enum": [ "http", "https", "ws", "wss" ]
- }
- }
- }
- },
- "responses": {
- "type": "object",
- "description": "Response objects names can either be any valid HTTP status code or 'default'.",
- "minProperties": 1,
- "additionalProperties": false,
- "patternProperties": {
- "^([0-9]+)$|^(default)$": {
- "$ref": "#/definitions/response"
- },
- "^x-": {
- "$ref": "#/definitions/vendorExtension"
- }
- }
- },
- "response": {
- "type": "object",
- "required": [ "description" ],
- "properties": {
- "description": {
- "type": "string"
- },
- "schema": {
- "$ref": "#/definitions/schema"
- },
- "headers": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/schema"
- }
- },
- "examples": {
- "$ref": "#/definitions/example"
- }
- },
- "additionalProperties": false
- },
- "vendorExtension": {
- "description": "Any property starting with x- is valid.",
- "additionalProperties": true,
- "additionalItems": true
- },
- "parameter": {
- "type": "object",
- "required": [ "name", "in"],
- "patternProperties": {
- "^x-": {
- "$ref": "#/definitions/vendorExtension"
- }
- },
- "properties": {
- "name": {
- "type": "string",
- "description": "The name of the parameter."
- },
- "in": {
- "type": "string",
- "description": "Determines the location of the parameter.",
- "enum": [ "query", "header", "path", "formData", "body" ],
- "default": "query"
- },
- "description": {
- "type": "string",
- "description": "A brief description of the parameter. This could contain examples of use."
- },
- "required": {
- "type": "boolean",
- "description": "Determines whether or not this parameter is required or optional."
- },
- "schema": {
- "$ref": "#/definitions/schema"
- }
- }
- },
- "schema": {
- "type": "object",
- "description": "A deterministic version of a JSON Schema object.",
- "patternProperties": {
- "^x-": {
- "$ref": "#/definitions/vendorExtension"
- }
- },
- "properties": {
- "$ref": { "type": "string" },
- "format": { "type": "string" },
- "title": { "$ref": "http://json-schema.org/draft-04/schema#/properties/title" },
- "description": { "$ref": "http://json-schema.org/draft-04/schema#/properties/description" },
- "default": { "$ref": "http://json-schema.org/draft-04/schema#/properties/default" },
- "multipleOf": { "$ref": "http://json-schema.org/draft-04/schema#/properties/multipleOf" },
- "maximum": { "$ref": "http://json-schema.org/draft-04/schema#/properties/maximum" },
- "exclusiveMaximum": { "$ref": "http://json-schema.org/draft-04/schema#/properties/exclusiveMaximum" },
- "minimum": { "$ref": "http://json-schema.org/draft-04/schema#/properties/minimum" },
- "exclusiveMinimum": { "$ref": "http://json-schema.org/draft-04/schema#/properties/exclusiveMinimum" },
- "maxLength": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveInteger" },
- "minLength": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0" },
- "pattern": { "$ref": "http://json-schema.org/draft-04/schema#/properties/pattern" },
- "discriminator": { "type": "string" },
- "xml": { "$ref": "#/definitions/xml"},
- "items": {
- "anyOf": [
- { "$ref": "#/definitions/schema" },
- {
- "type": "array",
- "minItems": 1,
- "items": { "$ref": "#/definitions/schema" }
- }
- ],
- "default": { }
- },
- "maxItems": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveInteger" },
- "minItems": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0" },
- "uniqueItems": { "$ref": "http://json-schema.org/draft-04/schema#/properties/uniqueItems" },
- "maxProperties": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveInteger" },
- "minProperties": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0" },
- "required": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray" },
- "definitions": {
- "type": "object",
- "additionalProperties": { "$ref": "#/definitions/schema" },
- "default": { }
- },
- "properties": {
- "type": "object",
- "additionalProperties": { "$ref": "#/definitions/schema" },
- "default": { }
- },
- "enum": { "$ref": "http://json-schema.org/draft-04/schema#/properties/enum" },
- "type": { "$ref": "http://json-schema.org/draft-04/schema#/properties/type" },
- "allOf": {
- "type": "array",
- "minItems": 1,
- "items": { "$ref": "#/definitions/schema" }
- }
- }
- },
- "xml": {
- "properties": {
- "namespace": { "type": "string" },
- "prefix": { "type": "string" },
- "attribute": { "type": "boolean" },
- "wrapped": { "type": "boolean" }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false,
- "patternProperties": {
- "^x-": {
- "$ref": "#/definitions/vendorExtension"
- }
- },
- "properties": {
- "swagger": {
- "type": "number",
- "enum": [ 2.0 ],
- "description": "The Swagger version of this document."
- },
- "info": {
- "$ref": "#/definitions/info"
- },
- "host": {
- "type": "string",
- "format": "uri",
- "description": "The fully qualified URI to the host of the API."
- },
- "basePath": {
- "type": "string",
- "pattern": "^/",
- "description": "The base path to the API. Example: '/api'."
- },
- "schemes": {
- "type": "array",
- "description": "The transfer protocol of the API.",
- "items": {
- "type": "string",
- "enum": [ "http", "https", "ws", "wss" ]
- }
- },
- "consumes": {
- "type": "array",
- "description": "A list of MIME types accepted by the API.",
- "items": {
- "$ref": "#/definitions/mimeType"
- }
- },
- "produces": {
- "type": "array",
- "description": "A list of MIME types the API can produce.",
- "items": {
- "$ref": "#/definitions/mimeType"
- }
- },
- "paths": {
- "type": "object",
- "description": "Relative paths to the individual endpoints. They should be relative to the 'basePath'.",
- "patternProperties": {
- "^x-": {
- "$ref": "#/definitions/vendorExtension"
- }
- },
- "additionalProperties": {
- "type": "object",
- "minProperties": 1,
- "additionalProperties": false,
- "patternProperties": {
- "^x-": {
- "$ref": "#/definitions/vendorExtension"
- }
- },
- "properties": {
- "get": {
- "$ref": "#/definitions/operation"
- },
- "put": {
- "$ref": "#/definitions/operation"
- },
- "post": {
- "$ref": "#/definitions/operation"
- },
- "delete": {
- "$ref": "#/definitions/operation"
- },
- "options": {
- "$ref": "#/definitions/operation"
- },
- "head": {
- "$ref": "#/definitions/operation"
- },
- "patch": {
- "$ref": "#/definitions/operation"
- },
- "parameters": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/parameter"
- }
- }
- }
- }
- },
- "schemas": {
- "type": "object",
- "description": "One or more JSON objects describing the schemas being consumed and produced by the API.",
- "additionalProperties": {
- "$ref": "#/definitions/schema"
- }
- },
- "security": {
- "type": "array"
- }
- }
- }
- },{}],229:[function(require,module,exports){
- module.exports={
- "title": "A JSON Schema for Swagger 2.0 API.",
- "$schema": "http://json-schema.org/draft-04/schema#",
- "type": "object",
- "required": [ "swagger", "info", "paths" ],
- "definitions": {
- "info": {
- "type": "object",
- "description": "General information about the API.",
- "required": [ "version", "title" ],
- "additionalProperties": false,
- "patternProperties": {
- "^x-": {
- "$ref": "#/definitions/vendorExtension"
- }
- },
- "properties": {
- "version": {
- "type": "string",
- "description": "A semantic version number of the API."
- },
- "title": {
- "type": "string",
- "description": "A unique and precise title of the API."
- },
- "description": {
- "type": "string",
- "description": "A longer description of the API. Should be different from the title."
- },
- "termsOfService": {
- "type": "string",
- "description": "The terms of service for the API."
- },
- "contact": {
- "type": "object",
- "description": "Contact information for the owners of the API.",
- "additionalProperties": false,
- "properties": {
- "name": {
- "type": "string",
- "description": "The identifying name of the contact person/organization."
- },
- "url": {
- "type": "string",
- "description": "The URL pointing to the contact information.",
- "format": "uri"
- },
- "email": {
- "type": "string",
- "description": "The email address of the contact person/organization.",
- "format": "email"
- }
- }
- },
- "license": {
- "type": "object",
- "required": [ "name" ],
- "additionalProperties": false,
- "properties": {
- "name": {
- "type": "string",
- "description": "The name of the license type. It's encouraged to use an OSI compatible license."
- },
- "url": {
- "type": "string",
- "description": "The URL pointing to the license.",
- "format": "uri"
- }
- }
- }
- }
- },
- "example": {
- "type": "object",
- "patternProperties": {
- "^[a-z0-9-]+/[a-z0-9-+]+$": {}
- },
- "additionalProperties": false
- },
- "mimeType": {
- "type": "string",
- "pattern": "^[a-z0-9-]+/[a-z0-9-+]+$",
- "description": "The MIME type of the HTTP message."
- },
- "operation": {
- "type": "object",
- "required": [ "responses" ],
- "additionalProperties": false,
- "patternProperties": {
- "^x-": {
- "$ref": "#/definitions/vendorExtension"
- }
- },
- "properties": {
- "tags": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "summary": {
- "type": "string",
- "description": "A brief summary of the operation."
- },
- "description": {
- "type": "string",
- "description": "A longer description of the operation."
- },
- "operationId": {
- "type": "string",
- "description": "A friendly name of the operation"
- },
- "produces": {
- "type": "array",
- "description": "A list of MIME types the API can produce.",
- "additionalItems": false,
- "items": {
- "$ref": "#/definitions/mimeType"
- }
- },
- "parameters": {
- "type": "array",
- "description": "The parameters needed to send a valid API call.",
- "minItems": 1,
- "additionalItems": false,
- "items": {
- "$ref": "#/definitions/parameter"
- }
- },
- "responses": {
- "$ref": "#/definitions/responses"
- },
- "schemes": {
- "type": "array",
- "description": "The transfer protocol of the API.",
- "items": {
- "type": "string",
- "enum": [ "http", "https", "ws", "wss" ]
- }
- }
- }
- },
- "responses": {
- "type": "object",
- "description": "Response objects names can either be any valid HTTP status code or 'default'.",
- "minProperties": 1,
- "additionalProperties": false,
- "patternProperties": {
- "^([0-9]+)$|^(default)$": {
- "$ref": "#/definitions/response"
- },
- "^x-": {
- "$ref": "#/definitions/vendorExtension"
- }
- }
- },
- "response": {
- "type": "object",
- "required": [ "description" ],
- "properties": {
- "description": {
- "type": "string"
- },
- "schema": {
- "$ref": "#/definitions/schema"
- },
- "headers": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/schema"
- }
- },
- "examples": {
- "$ref": "#/definitions/example"
- }
- },
- "additionalProperties": false
- },
- "vendorExtension": {
- "description": "Any property starting with x- is valid.",
- "additionalProperties": true,
- "additionalItems": true
- },
- "parameter": {
- "type": "object",
- "required": [ "name", "in"],
- "patternProperties": {
- "^x-": {
- "$ref": "#/definitions/vendorExtension"
- }
- },
- "properties": {
- "name": {
- "type": "string",
- "description": "The name of the parameter."
- },
- "in": {
- "type": "string",
- "description": "Determines the location of the parameter.",
- "enum": [ "query", "header", "path", "formData", "body" ],
- "default": "query"
- },
- "description": {
- "type": "string",
- "description": "A brief description of the parameter. This could contain examples of use."
- },
- "required": {
- "type": "boolean",
- "description": "Determines whether or not this parameter is required or optional."
- },
- "schema": {
- "$ref": "#/definitions/schema"
- }
- }
- },
- "schema": {
- "type": "object",
- "description": "A deterministic version of a JSON Schema object.",
- "patternProperties": {
- "^x-": {
- "$ref": "#/definitions/vendorExtension"
- }
- },
- "properties": {
- "$ref": { "type": "string" },
- "format": { "type": "string" },
- "title": { "$ref": "http://json-schema.orgx/draft-04/schema#/properties/title" },
- "description": { "$ref": "http://json-schema.orgx/draft-04/schema#/properties/description" },
- "default": { "$ref": "http://json-schema.orgx/draft-04/schema#/properties/default" },
- "multipleOf": { "$ref": "http://json-schema.orgx/draft-04/schema#/properties/multipleOf" },
- "maximum": { "$ref": "http://json-schema.orgx/draft-04/schema#/properties/maximum" },
- "exclusiveMaximum": { "$ref": "http://json-schema.orgx/draft-04/schema#/properties/exclusiveMaximum" },
- "minimum": { "$ref": "http://json-schema.orgx/draft-04/schema#/properties/minimum" },
- "exclusiveMinimum": { "$ref": "http://json-schema.orgx/draft-04/schema#/properties/exclusiveMinimum" },
- "maxLength": { "$ref": "http://json-schema.orgx/draft-04/schema#/definitions/positiveInteger" },
- "minLength": { "$ref": "http://json-schema.orgx/draft-04/schema#/definitions/positiveIntegerDefault0" },
- "pattern": { "$ref": "http://json-schema.orgx/draft-04/schema#/properties/pattern" },
- "discriminator": { "type": "string" },
- "xml": { "$ref": "#/definitions/xml"},
- "items": {
- "anyOf": [
- { "$ref": "#/definitions/schema" },
- {
- "type": "array",
- "minItems": 1,
- "items": { "$ref": "#/definitions/schema" }
- }
- ],
- "default": { }
- },
- "maxItems": { "$ref": "http://json-schema.orgx/draft-04/schema#/definitions/positiveInteger" },
- "minItems": { "$ref": "http://json-schema.orgx/draft-04/schema#/definitions/positiveIntegerDefault0" },
- "uniqueItems": { "$ref": "http://json-schema.orgx/draft-04/schema#/properties/uniqueItems" },
- "maxProperties": { "$ref": "http://json-schema.orgx/draft-04/schema#/definitions/positiveInteger" },
- "minProperties": { "$ref": "http://json-schema.orgx/draft-04/schema#/definitions/positiveIntegerDefault0" },
- "required": { "$ref": "http://json-schema.orgx/draft-04/schema#/definitions/stringArray" },
- "definitions": {
- "type": "object",
- "additionalProperties": { "$ref": "#/definitions/schema" },
- "default": { }
- },
- "properties": {
- "type": "object",
- "additionalProperties": { "$ref": "#/definitions/schema" },
- "default": { }
- },
- "enum": { "$ref": "http://json-schema.orgx/draft-04/schema#/properties/enum" },
- "type": { "$ref": "http://json-schema.orgx/draft-04/schema#/properties/type" },
- "allOf": {
- "type": "array",
- "minItems": 1,
- "items": { "$ref": "#/definitions/schema" }
- }
- }
- },
- "xml": {
- "properties": {
- "namespace": { "type": "string" },
- "prefix": { "type": "string" },
- "attribute": { "type": "boolean" },
- "wrapped": { "type": "boolean" }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false,
- "patternProperties": {
- "^x-": {
- "$ref": "#/definitions/vendorExtension"
- }
- },
- "properties": {
- "swagger": {
- "type": "number",
- "enum": [ 2.0 ],
- "description": "The Swagger version of this document."
- },
- "info": {
- "$ref": "#/definitions/info"
- },
- "host": {
- "type": "string",
- "format": "uri",
- "description": "The fully qualified URI to the host of the API."
- },
- "basePath": {
- "type": "string",
- "pattern": "^/",
- "description": "The base path to the API. Example: '/api'."
- },
- "schemes": {
- "type": "array",
- "description": "The transfer protocol of the API.",
- "items": {
- "type": "string",
- "enum": [ "http", "https", "ws", "wss" ]
- }
- },
- "consumes": {
- "type": "array",
- "description": "A list of MIME types accepted by the API.",
- "items": {
- "$ref": "#/definitions/mimeType"
- }
- },
- "produces": {
- "type": "array",
- "description": "A list of MIME types the API can produce.",
- "items": {
- "$ref": "#/definitions/mimeType"
- }
- },
- "paths": {
- "type": "object",
- "description": "Relative paths to the individual endpoints. They should be relative to the 'basePath'.",
- "patternProperties": {
- "^x-": {
- "$ref": "#/definitions/vendorExtension"
- }
- },
- "additionalProperties": {
- "type": "object",
- "minProperties": 1,
- "additionalProperties": false,
- "patternProperties": {
- "^x-": {
- "$ref": "#/definitions/vendorExtension"
- }
- },
- "properties": {
- "get": {
- "$ref": "#/definitions/operation"
- },
- "put": {
- "$ref": "#/definitions/operation"
- },
- "post": {
- "$ref": "#/definitions/operation"
- },
- "delete": {
- "$ref": "#/definitions/operation"
- },
- "options": {
- "$ref": "#/definitions/operation"
- },
- "head": {
- "$ref": "#/definitions/operation"
- },
- "patch": {
- "$ref": "#/definitions/operation"
- },
- "parameters": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/parameter"
- }
- }
- }
- }
- },
- "schemas": {
- "type": "object",
- "description": "One or more JSON objects describing the schemas being consumed and produced by the API.",
- "additionalProperties": {
- "$ref": "#/definitions/schema"
- }
- },
- "security": {
- "type": "array"
- }
- }
- }
- },{}],230:[function(require,module,exports){
- 'use strict';
- module.exports = {
- description: "getRegisteredFormats - return an array of format names",
- setup: function (validator, Class) {
- Class.registerFormat('phone', function (str) {
- return true;
- });
- },
- tests: [
- {
- description: "should pass validation for new format",
- valid: true,
- data: '01234567',
- schema: {
- "type": "string",
- "format": "phone"
- }
- }
- ]
- };
- },{}],231:[function(require,module,exports){
- arguments[4][226][0].apply(exports,arguments)
- },{"dup":226}],232:[function(require,module,exports){
- module.exports={
- "type": "integer"
- }
- },{}],233:[function(require,module,exports){
- arguments[4][232][0].apply(exports,arguments)
- },{"dup":232}],234:[function(require,module,exports){
- module.exports={
- "integer": {
- "type": "integer"
- },
- "refToInteger": {
- "$ref": "#/integer"
- }
- }
- },{}],235:[function(require,module,exports){
- module.exports=[
- {
- "description": "additionalItems as schema",
- "schema": {
- "items": [{}],
- "additionalItems": {"type": "integer"}
- },
- "tests": [
- {
- "description": "additional items match schema",
- "data": [ null, 2, 3, 4 ],
- "valid": true
- },
- {
- "description": "additional items do not match schema",
- "data": [ null, 2, 3, "foo" ],
- "valid": false
- }
- ]
- },
- {
- "description": "items is schema, no additionalItems",
- "schema": {
- "items": {},
- "additionalItems": false
- },
- "tests": [
- {
- "description": "all items match schema",
- "data": [ 1, 2, 3, 4, 5 ],
- "valid": true
- }
- ]
- },
- {
- "description": "array of items with no additionalItems",
- "schema": {
- "items": [{}, {}, {}],
- "additionalItems": false
- },
- "tests": [
- {
- "description": "no additional items present",
- "data": [ 1, 2, 3 ],
- "valid": true
- },
- {
- "description": "additional items are not permitted",
- "data": [ 1, 2, 3, 4 ],
- "valid": false
- }
- ]
- },
- {
- "description": "additionalItems as false without items",
- "schema": {"additionalItems": false},
- "tests": [
- {
- "description":
- "items defaults to empty schema so everything is valid",
- "data": [ 1, 2, 3, 4, 5 ],
- "valid": true
- },
- {
- "description": "ignores non-arrays",
- "data": {"foo" : "bar"},
- "valid": true
- }
- ]
- },
- {
- "description": "additionalItems are allowed by default",
- "schema": {"items": [{"type": "integer"}]},
- "tests": [
- {
- "description": "only the first item is validated",
- "data": [1, "foo", false],
- "valid": true
- }
- ]
- }
- ]
- },{}],236:[function(require,module,exports){
- module.exports=[
- {
- "description":
- "additionalProperties being false does not allow other properties",
- "schema": {
- "properties": {"foo": {}, "bar": {}},
- "patternProperties": { "^v": {} },
- "additionalProperties": false
- },
- "tests": [
- {
- "description": "no additional properties is valid",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "an additional property is invalid",
- "data": {"foo" : 1, "bar" : 2, "quux" : "boom"},
- "valid": false
- },
- {
- "description": "ignores non-objects",
- "data": [1, 2, 3],
- "valid": true
- },
- {
- "description": "patternProperties are not additional properties",
- "data": {"foo":1, "vroom": 2},
- "valid": true
- }
- ]
- },
- {
- "description":
- "additionalProperties allows a schema which should validate",
- "schema": {
- "properties": {"foo": {}, "bar": {}},
- "additionalProperties": {"type": "boolean"}
- },
- "tests": [
- {
- "description": "no additional properties is valid",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "an additional valid property is valid",
- "data": {"foo" : 1, "bar" : 2, "quux" : true},
- "valid": true
- },
- {
- "description": "an additional invalid property is invalid",
- "data": {"foo" : 1, "bar" : 2, "quux" : 12},
- "valid": false
- }
- ]
- },
- {
- "description":
- "additionalProperties can exist by itself",
- "schema": {
- "additionalProperties": {"type": "boolean"}
- },
- "tests": [
- {
- "description": "an additional valid property is valid",
- "data": {"foo" : true},
- "valid": true
- },
- {
- "description": "an additional invalid property is invalid",
- "data": {"foo" : 1},
- "valid": false
- }
- ]
- },
- {
- "description": "additionalProperties are allowed by default",
- "schema": {"properties": {"foo": {}, "bar": {}}},
- "tests": [
- {
- "description": "additional properties are allowed",
- "data": {"foo": 1, "bar": 2, "quux": true},
- "valid": true
- }
- ]
- }
- ]
- },{}],237:[function(require,module,exports){
- module.exports=[
- {
- "description": "allOf",
- "schema": {
- "allOf": [
- {
- "properties": {
- "bar": {"type": "integer"}
- },
- "required": ["bar"]
- },
- {
- "properties": {
- "foo": {"type": "string"}
- },
- "required": ["foo"]
- }
- ]
- },
- "tests": [
- {
- "description": "allOf",
- "data": {"foo": "baz", "bar": 2},
- "valid": true
- },
- {
- "description": "mismatch second",
- "data": {"foo": "baz"},
- "valid": false
- },
- {
- "description": "mismatch first",
- "data": {"bar": 2},
- "valid": false
- },
- {
- "description": "wrong type",
- "data": {"foo": "baz", "bar": "quux"},
- "valid": false
- }
- ]
- },
- {
- "description": "allOf with base schema",
- "schema": {
- "properties": {"bar": {"type": "integer"}},
- "required": ["bar"],
- "allOf" : [
- {
- "properties": {
- "foo": {"type": "string"}
- },
- "required": ["foo"]
- },
- {
- "properties": {
- "baz": {"type": "null"}
- },
- "required": ["baz"]
- }
- ]
- },
- "tests": [
- {
- "description": "valid",
- "data": {"foo": "quux", "bar": 2, "baz": null},
- "valid": true
- },
- {
- "description": "mismatch base schema",
- "data": {"foo": "quux", "baz": null},
- "valid": false
- },
- {
- "description": "mismatch first allOf",
- "data": {"bar": 2, "baz": null},
- "valid": false
- },
- {
- "description": "mismatch second allOf",
- "data": {"foo": "quux", "bar": 2},
- "valid": false
- },
- {
- "description": "mismatch both",
- "data": {"bar": 2},
- "valid": false
- }
- ]
- },
- {
- "description": "allOf simple types",
- "schema": {
- "allOf": [
- {"maximum": 30},
- {"minimum": 20}
- ]
- },
- "tests": [
- {
- "description": "valid",
- "data": 25,
- "valid": true
- },
- {
- "description": "mismatch one",
- "data": 35,
- "valid": false
- }
- ]
- }
- ]
- },{}],238:[function(require,module,exports){
- module.exports=[
- {
- "description": "anyOf",
- "schema": {
- "anyOf": [
- {
- "type": "integer"
- },
- {
- "minimum": 2
- }
- ]
- },
- "tests": [
- {
- "description": "first anyOf valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "second anyOf valid",
- "data": 2.5,
- "valid": true
- },
- {
- "description": "both anyOf valid",
- "data": 3,
- "valid": true
- },
- {
- "description": "neither anyOf valid",
- "data": 1.5,
- "valid": false
- }
- ]
- },
- {
- "description": "anyOf with base schema",
- "schema": {
- "type": "string",
- "anyOf" : [
- {
- "maxLength": 2
- },
- {
- "minLength": 4
- }
- ]
- },
- "tests": [
- {
- "description": "mismatch base schema",
- "data": 3,
- "valid": false
- },
- {
- "description": "one anyOf valid",
- "data": "foobar",
- "valid": true
- },
- {
- "description": "both anyOf invalid",
- "data": "foo",
- "valid": false
- }
- ]
- }
- ]
- },{}],239:[function(require,module,exports){
- module.exports=[
- {
- "description": "invalid type for default",
- "schema": {
- "properties": {
- "foo": {
- "type": "integer",
- "default": []
- }
- }
- },
- "tests": [
- {
- "description": "valid when property is specified",
- "data": {"foo": 13},
- "valid": true
- },
- {
- "description": "still valid when the invalid default is used",
- "data": {},
- "valid": true
- }
- ]
- },
- {
- "description": "invalid string value for default",
- "schema": {
- "properties": {
- "bar": {
- "type": "string",
- "minLength": 4,
- "default": "bad"
- }
- }
- },
- "tests": [
- {
- "description": "valid when property is specified",
- "data": {"bar": "good"},
- "valid": true
- },
- {
- "description": "still valid when the invalid default is used",
- "data": {},
- "valid": true
- }
- ]
- }
- ]
- },{}],240:[function(require,module,exports){
- module.exports=[
- {
- "description": "valid definition",
- "schema": {"$ref": "http://json-schema.org/draft-04/schema#"},
- "tests": [
- {
- "description": "valid definition schema",
- "data": {
- "definitions": {
- "foo": {"type": "integer"}
- }
- },
- "valid": true
- }
- ]
- },
- {
- "description": "invalid definition",
- "schema": {"$ref": "http://json-schema.org/draft-04/schema#"},
- "tests": [
- {
- "description": "invalid definition schema",
- "data": {
- "definitions": {
- "foo": {"type": 1}
- }
- },
- "valid": false
- }
- ]
- }
- ]
- },{}],241:[function(require,module,exports){
- module.exports=[
- {
- "description": "dependencies",
- "schema": {
- "dependencies": {"bar": ["foo"]}
- },
- "tests": [
- {
- "description": "neither",
- "data": {},
- "valid": true
- },
- {
- "description": "nondependant",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "with dependency",
- "data": {"foo": 1, "bar": 2},
- "valid": true
- },
- {
- "description": "missing dependency",
- "data": {"bar": 2},
- "valid": false
- },
- {
- "description": "ignores non-objects",
- "data": "foo",
- "valid": true
- }
- ]
- },
- {
- "description": "multiple dependencies",
- "schema": {
- "dependencies": {"quux": ["foo", "bar"]}
- },
- "tests": [
- {
- "description": "neither",
- "data": {},
- "valid": true
- },
- {
- "description": "nondependants",
- "data": {"foo": 1, "bar": 2},
- "valid": true
- },
- {
- "description": "with dependencies",
- "data": {"foo": 1, "bar": 2, "quux": 3},
- "valid": true
- },
- {
- "description": "missing dependency",
- "data": {"foo": 1, "quux": 2},
- "valid": false
- },
- {
- "description": "missing other dependency",
- "data": {"bar": 1, "quux": 2},
- "valid": false
- },
- {
- "description": "missing both dependencies",
- "data": {"quux": 1},
- "valid": false
- }
- ]
- },
- {
- "description": "multiple dependencies subschema",
- "schema": {
- "dependencies": {
- "bar": {
- "properties": {
- "foo": {"type": "integer"},
- "bar": {"type": "integer"}
- }
- }
- }
- },
- "tests": [
- {
- "description": "valid",
- "data": {"foo": 1, "bar": 2},
- "valid": true
- },
- {
- "description": "no dependency",
- "data": {"foo": "quux"},
- "valid": true
- },
- {
- "description": "wrong type",
- "data": {"foo": "quux", "bar": 2},
- "valid": false
- },
- {
- "description": "wrong type other",
- "data": {"foo": 2, "bar": "quux"},
- "valid": false
- },
- {
- "description": "wrong type both",
- "data": {"foo": "quux", "bar": "quux"},
- "valid": false
- }
- ]
- }
- ]
- },{}],242:[function(require,module,exports){
- module.exports=[
- {
- "description": "simple enum validation",
- "schema": {"enum": [1, 2, 3]},
- "tests": [
- {
- "description": "one of the enum is valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "something else is invalid",
- "data": 4,
- "valid": false
- }
- ]
- },
- {
- "description": "heterogeneous enum validation",
- "schema": {"enum": [6, "foo", [], true, {"foo": 12}]},
- "tests": [
- {
- "description": "one of the enum is valid",
- "data": [],
- "valid": true
- },
- {
- "description": "something else is invalid",
- "data": null,
- "valid": false
- },
- {
- "description": "objects are deep compared",
- "data": {"foo": false},
- "valid": false
- }
- ]
- },
- {
- "description": "enums in properties",
- "schema": {
- "type":"object",
- "properties": {
- "foo": {"enum":["foo"]},
- "bar": {"enum":["bar"]}
- },
- "required": ["bar"]
- },
- "tests": [
- {
- "description": "both properties are valid",
- "data": {"foo":"foo", "bar":"bar"},
- "valid": true
- },
- {
- "description": "missing optional property is valid",
- "data": {"bar":"bar"},
- "valid": true
- },
- {
- "description": "missing required property is invalid",
- "data": {"foo":"foo"},
- "valid": false
- },
- {
- "description": "missing all properties is invalid",
- "data": {},
- "valid": false
- }
- ]
- }
- ]
- },{}],243:[function(require,module,exports){
- module.exports=[
- {
- "description": "a schema given for items",
- "schema": {
- "items": {"type": "integer"}
- },
- "tests": [
- {
- "description": "valid items",
- "data": [ 1, 2, 3 ],
- "valid": true
- },
- {
- "description": "wrong type of items",
- "data": [1, "x"],
- "valid": false
- },
- {
- "description": "ignores non-arrays",
- "data": {"foo" : "bar"},
- "valid": true
- }
- ]
- },
- {
- "description": "an array of schemas for items",
- "schema": {
- "items": [
- {"type": "integer"},
- {"type": "string"}
- ]
- },
- "tests": [
- {
- "description": "correct types",
- "data": [ 1, "foo" ],
- "valid": true
- },
- {
- "description": "wrong types",
- "data": [ "foo", 1 ],
- "valid": false
- }
- ]
- }
- ]
- },{}],244:[function(require,module,exports){
- module.exports=[
- {
- "description": "maxItems validation",
- "schema": {"maxItems": 2},
- "tests": [
- {
- "description": "shorter is valid",
- "data": [1],
- "valid": true
- },
- {
- "description": "exact length is valid",
- "data": [1, 2],
- "valid": true
- },
- {
- "description": "too long is invalid",
- "data": [1, 2, 3],
- "valid": false
- },
- {
- "description": "ignores non-arrays",
- "data": "foobar",
- "valid": true
- }
- ]
- }
- ]
- },{}],245:[function(require,module,exports){
- module.exports=[
- {
- "description": "maxLength validation",
- "schema": {"maxLength": 2},
- "tests": [
- {
- "description": "shorter is valid",
- "data": "f",
- "valid": true
- },
- {
- "description": "exact length is valid",
- "data": "fo",
- "valid": true
- },
- {
- "description": "too long is invalid",
- "data": "foo",
- "valid": false
- },
- {
- "description": "ignores non-strings",
- "data": 100,
- "valid": true
- },
- {
- "description": "two supplementary Unicode code points is long enough",
- "data": "\uD83D\uDCA9\uD83D\uDCA9",
- "valid": true
- }
- ]
- }
- ]
- },{}],246:[function(require,module,exports){
- module.exports=[
- {
- "description": "maxProperties validation",
- "schema": {"maxProperties": 2},
- "tests": [
- {
- "description": "shorter is valid",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "exact length is valid",
- "data": {"foo": 1, "bar": 2},
- "valid": true
- },
- {
- "description": "too long is invalid",
- "data": {"foo": 1, "bar": 2, "baz": 3},
- "valid": false
- },
- {
- "description": "ignores non-objects",
- "data": "foobar",
- "valid": true
- }
- ]
- }
- ]
- },{}],247:[function(require,module,exports){
- module.exports=[
- {
- "description": "maximum validation",
- "schema": {"maximum": 3.0},
- "tests": [
- {
- "description": "below the maximum is valid",
- "data": 2.6,
- "valid": true
- },
- {
- "description": "above the maximum is invalid",
- "data": 3.5,
- "valid": false
- },
- {
- "description": "ignores non-numbers",
- "data": "x",
- "valid": true
- }
- ]
- },
- {
- "description": "exclusiveMaximum validation",
- "schema": {
- "maximum": 3.0,
- "exclusiveMaximum": true
- },
- "tests": [
- {
- "description": "below the maximum is still valid",
- "data": 2.2,
- "valid": true
- },
- {
- "description": "boundary point is invalid",
- "data": 3.0,
- "valid": false
- }
- ]
- }
- ]
- },{}],248:[function(require,module,exports){
- module.exports=[
- {
- "description": "minItems validation",
- "schema": {"minItems": 1},
- "tests": [
- {
- "description": "longer is valid",
- "data": [1, 2],
- "valid": true
- },
- {
- "description": "exact length is valid",
- "data": [1],
- "valid": true
- },
- {
- "description": "too short is invalid",
- "data": [],
- "valid": false
- },
- {
- "description": "ignores non-arrays",
- "data": "",
- "valid": true
- }
- ]
- }
- ]
- },{}],249:[function(require,module,exports){
- module.exports=[
- {
- "description": "minLength validation",
- "schema": {"minLength": 2},
- "tests": [
- {
- "description": "longer is valid",
- "data": "foo",
- "valid": true
- },
- {
- "description": "exact length is valid",
- "data": "fo",
- "valid": true
- },
- {
- "description": "too short is invalid",
- "data": "f",
- "valid": false
- },
- {
- "description": "ignores non-strings",
- "data": 1,
- "valid": true
- },
- {
- "description": "one supplementary Unicode code point is not long enough",
- "data": "\uD83D\uDCA9",
- "valid": false
- }
- ]
- }
- ]
- },{}],250:[function(require,module,exports){
- module.exports=[
- {
- "description": "minProperties validation",
- "schema": {"minProperties": 1},
- "tests": [
- {
- "description": "longer is valid",
- "data": {"foo": 1, "bar": 2},
- "valid": true
- },
- {
- "description": "exact length is valid",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "too short is invalid",
- "data": {},
- "valid": false
- },
- {
- "description": "ignores non-objects",
- "data": "",
- "valid": true
- }
- ]
- }
- ]
- },{}],251:[function(require,module,exports){
- module.exports=[
- {
- "description": "minimum validation",
- "schema": {"minimum": 1.1},
- "tests": [
- {
- "description": "above the minimum is valid",
- "data": 2.6,
- "valid": true
- },
- {
- "description": "below the minimum is invalid",
- "data": 0.6,
- "valid": false
- },
- {
- "description": "ignores non-numbers",
- "data": "x",
- "valid": true
- }
- ]
- },
- {
- "description": "exclusiveMinimum validation",
- "schema": {
- "minimum": 1.1,
- "exclusiveMinimum": true
- },
- "tests": [
- {
- "description": "above the minimum is still valid",
- "data": 1.2,
- "valid": true
- },
- {
- "description": "boundary point is invalid",
- "data": 1.1,
- "valid": false
- }
- ]
- }
- ]
- },{}],252:[function(require,module,exports){
- module.exports=[
- {
- "description": "by int",
- "schema": {"multipleOf": 2},
- "tests": [
- {
- "description": "int by int",
- "data": 10,
- "valid": true
- },
- {
- "description": "int by int fail",
- "data": 7,
- "valid": false
- },
- {
- "description": "ignores non-numbers",
- "data": "foo",
- "valid": true
- }
- ]
- },
- {
- "description": "by number",
- "schema": {"multipleOf": 1.5},
- "tests": [
- {
- "description": "zero is multiple of anything",
- "data": 0,
- "valid": true
- },
- {
- "description": "4.5 is multiple of 1.5",
- "data": 4.5,
- "valid": true
- },
- {
- "description": "35 is not multiple of 1.5",
- "data": 35,
- "valid": false
- }
- ]
- },
- {
- "description": "by small number",
- "schema": {"multipleOf": 0.0001},
- "tests": [
- {
- "description": "0.0075 is multiple of 0.0001",
- "data": 0.0075,
- "valid": true
- },
- {
- "description": "0.00751 is not multiple of 0.0001",
- "data": 0.00751,
- "valid": false
- }
- ]
- }
- ]
- },{}],253:[function(require,module,exports){
- module.exports=[
- {
- "description": "not",
- "schema": {
- "not": {"type": "integer"}
- },
- "tests": [
- {
- "description": "allowed",
- "data": "foo",
- "valid": true
- },
- {
- "description": "disallowed",
- "data": 1,
- "valid": false
- }
- ]
- },
- {
- "description": "not multiple types",
- "schema": {
- "not": {"type": ["integer", "boolean"]}
- },
- "tests": [
- {
- "description": "valid",
- "data": "foo",
- "valid": true
- },
- {
- "description": "mismatch",
- "data": 1,
- "valid": false
- },
- {
- "description": "other mismatch",
- "data": true,
- "valid": false
- }
- ]
- },
- {
- "description": "not more complex schema",
- "schema": {
- "not": {
- "type": "object",
- "properties": {
- "foo": {
- "type": "string"
- }
- }
- }
- },
- "tests": [
- {
- "description": "match",
- "data": 1,
- "valid": true
- },
- {
- "description": "other match",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "mismatch",
- "data": {"foo": "bar"},
- "valid": false
- }
- ]
- },
- {
- "description": "forbidden property",
- "schema": {
- "properties": {
- "foo": {
- "not": {}
- }
- }
- },
- "tests": [
- {
- "description": "property present",
- "data": {"foo": 1, "bar": 2},
- "valid": false
- },
- {
- "description": "property absent",
- "data": {"bar": 1, "baz": 2},
- "valid": true
- }
- ]
- }
- ]
- },{}],254:[function(require,module,exports){
- module.exports=[
- {
- "description": "oneOf",
- "schema": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "minimum": 2
- }
- ]
- },
- "tests": [
- {
- "description": "first oneOf valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "second oneOf valid",
- "data": 2.5,
- "valid": true
- },
- {
- "description": "both oneOf valid",
- "data": 3,
- "valid": false
- },
- {
- "description": "neither oneOf valid",
- "data": 1.5,
- "valid": false
- }
- ]
- },
- {
- "description": "oneOf with base schema",
- "schema": {
- "type": "string",
- "oneOf" : [
- {
- "minLength": 2
- },
- {
- "maxLength": 4
- }
- ]
- },
- "tests": [
- {
- "description": "mismatch base schema",
- "data": 3,
- "valid": false
- },
- {
- "description": "one oneOf valid",
- "data": "foobar",
- "valid": true
- },
- {
- "description": "both oneOf valid",
- "data": "foo",
- "valid": false
- }
- ]
- }
- ]
- },{}],255:[function(require,module,exports){
- module.exports=[
- {
- "description": "integer",
- "schema": {"type": "integer"},
- "tests": [
- {
- "description": "a bignum is an integer",
- "data": 12345678910111213141516171819202122232425262728293031,
- "valid": true
- }
- ]
- },
- {
- "description": "number",
- "schema": {"type": "number"},
- "tests": [
- {
- "description": "a bignum is a number",
- "data": 98249283749234923498293171823948729348710298301928331,
- "valid": true
- }
- ]
- },
- {
- "description": "integer",
- "schema": {"type": "integer"},
- "tests": [
- {
- "description": "a negative bignum is an integer",
- "data": -12345678910111213141516171819202122232425262728293031,
- "valid": true
- }
- ]
- },
- {
- "description": "number",
- "schema": {"type": "number"},
- "tests": [
- {
- "description": "a negative bignum is a number",
- "data": -98249283749234923498293171823948729348710298301928331,
- "valid": true
- }
- ]
- },
- {
- "description": "string",
- "schema": {"type": "string"},
- "tests": [
- {
- "description": "a bignum is not a string",
- "data": 98249283749234923498293171823948729348710298301928331,
- "valid": false
- }
- ]
- },
- {
- "description": "integer comparison",
- "schema": {"maximum": 18446744073709551615},
- "tests": [
- {
- "description": "comparison works for high numbers",
- "data": 18446744073709551600,
- "valid": true
- }
- ]
- },
- {
- "description": "float comparison with high precision",
- "schema": {
- "maximum": 972783798187987123879878123.18878137,
- "exclusiveMaximum": true
- },
- "tests": [
- {
- "description": "comparison works for high numbers",
- "data": 972783798187987123879878123.188781371,
- "valid": false
- }
- ]
- },
- {
- "description": "integer comparison",
- "schema": {"minimum": -18446744073709551615},
- "tests": [
- {
- "description": "comparison works for very negative numbers",
- "data": -18446744073709551600,
- "valid": true
- }
- ]
- },
- {
- "description": "float comparison with high precision on negative numbers",
- "schema": {
- "minimum": -972783798187987123879878123.18878137,
- "exclusiveMinimum": true
- },
- "tests": [
- {
- "description": "comparison works for very negative numbers",
- "data": -972783798187987123879878123.188781371,
- "valid": false
- }
- ]
- }
- ]
- },{}],256:[function(require,module,exports){
- module.exports=[
- {
- "description": "validation of date-time strings",
- "schema": {"format": "date-time"},
- "tests": [
- {
- "description": "a valid date-time string",
- "data": "1963-06-19T08:30:06.283185Z",
- "valid": true
- },
- {
- "description": "an invalid date-time string",
- "data": "06/19/1963 08:30:06 PST",
- "valid": false
- },
- {
- "description": "only RFC3339 not all of ISO 8601 are valid",
- "data": "2013-350T01:01:01",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of URIs",
- "schema": {"format": "uri"},
- "tests": [
- {
- "description": "a valid URI",
- "data": "http://foo.bar/?baz=qux#quux",
- "valid": true
- },
- {
- "description": "an invalid URI",
- "data": "\\\\WINDOWS\\fileshare",
- "valid": false
- },
- {
- "description": "an invalid URI though valid URI reference",
- "data": "abc",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of e-mail addresses",
- "schema": {"format": "email"},
- "tests": [
- {
- "description": "a valid e-mail address",
- "data": "joe.bloggs@example.com",
- "valid": true
- },
- {
- "description": "an invalid e-mail address",
- "data": "2962",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of IP addresses",
- "schema": {"format": "ipv4"},
- "tests": [
- {
- "description": "a valid IP address",
- "data": "192.168.0.1",
- "valid": true
- },
- {
- "description": "an IP address with too many components",
- "data": "127.0.0.0.1",
- "valid": false
- },
- {
- "description": "an IP address with out-of-range values",
- "data": "256.256.256.256",
- "valid": false
- },
- {
- "description": "an IP address without 4 components",
- "data": "127.0",
- "valid": false
- },
- {
- "description": "an IP address as an integer",
- "data": "0x7f000001",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of IPv6 addresses",
- "schema": {"format": "ipv6"},
- "tests": [
- {
- "description": "a valid IPv6 address",
- "data": "::1",
- "valid": true
- },
- {
- "description": "an IPv6 address with out-of-range values",
- "data": "12345::",
- "valid": false
- },
- {
- "description": "an IPv6 address with too many components",
- "data": "1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1",
- "valid": false
- },
- {
- "description": "an IPv6 address containing illegal characters",
- "data": "::laptop",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of host names",
- "schema": {"format": "hostname"},
- "tests": [
- {
- "description": "a valid host name",
- "data": "www.example.com",
- "valid": true
- },
- {
- "description": "a host name starting with an illegal character",
- "data": "-a-host-name-that-starts-with--",
- "valid": false
- },
- {
- "description": "a host name containing illegal characters",
- "data": "not_a_valid_host_name",
- "valid": false
- },
- {
- "description": "a host name with a component too long",
- "data": "a-vvvvvvvvvvvvvvvveeeeeeeeeeeeeeeerrrrrrrrrrrrrrrryyyyyyyyyyyyyyyy-long-host-name-component",
- "valid": false
- }
- ]
- }
- ]
- },{}],257:[function(require,module,exports){
- module.exports=[
- {
- "description": "pattern validation",
- "schema": {"pattern": "^a*$"},
- "tests": [
- {
- "description": "a matching pattern is valid",
- "data": "aaa",
- "valid": true
- },
- {
- "description": "a non-matching pattern is invalid",
- "data": "abc",
- "valid": false
- },
- {
- "description": "ignores non-strings",
- "data": true,
- "valid": true
- }
- ]
- }
- ]
- },{}],258:[function(require,module,exports){
- module.exports=[
- {
- "description":
- "patternProperties validates properties matching a regex",
- "schema": {
- "patternProperties": {
- "f.*o": {"type": "integer"}
- }
- },
- "tests": [
- {
- "description": "a single valid match is valid",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "multiple valid matches is valid",
- "data": {"foo": 1, "foooooo" : 2},
- "valid": true
- },
- {
- "description": "a single invalid match is invalid",
- "data": {"foo": "bar", "fooooo": 2},
- "valid": false
- },
- {
- "description": "multiple invalid matches is invalid",
- "data": {"foo": "bar", "foooooo" : "baz"},
- "valid": false
- },
- {
- "description": "ignores non-objects",
- "data": 12,
- "valid": true
- }
- ]
- },
- {
- "description": "multiple simultaneous patternProperties are validated",
- "schema": {
- "patternProperties": {
- "a*": {"type": "integer"},
- "aaa*": {"maximum": 20}
- }
- },
- "tests": [
- {
- "description": "a single valid match is valid",
- "data": {"a": 21},
- "valid": true
- },
- {
- "description": "a simultaneous match is valid",
- "data": {"aaaa": 18},
- "valid": true
- },
- {
- "description": "multiple matches is valid",
- "data": {"a": 21, "aaaa": 18},
- "valid": true
- },
- {
- "description": "an invalid due to one is invalid",
- "data": {"a": "bar"},
- "valid": false
- },
- {
- "description": "an invalid due to the other is invalid",
- "data": {"aaaa": 31},
- "valid": false
- },
- {
- "description": "an invalid due to both is invalid",
- "data": {"aaa": "foo", "aaaa": 31},
- "valid": false
- }
- ]
- },
- {
- "description": "regexes are not anchored by default and are case sensitive",
- "schema": {
- "patternProperties": {
- "[0-9]{2,}": { "type": "boolean" },
- "X_": { "type": "string" }
- }
- },
- "tests": [
- {
- "description": "non recognized members are ignored",
- "data": { "answer 1": "42" },
- "valid": true
- },
- {
- "description": "recognized members are accounted for",
- "data": { "a31b": null },
- "valid": false
- },
- {
- "description": "regexes are case sensitive",
- "data": { "a_x_3": 3 },
- "valid": true
- },
- {
- "description": "regexes are case sensitive, 2",
- "data": { "a_X_3": 3 },
- "valid": false
- }
- ]
- }
- ]
- },{}],259:[function(require,module,exports){
- module.exports=[
- {
- "description": "object properties validation",
- "schema": {
- "properties": {
- "foo": {"type": "integer"},
- "bar": {"type": "string"}
- }
- },
- "tests": [
- {
- "description": "both properties present and valid is valid",
- "data": {"foo": 1, "bar": "baz"},
- "valid": true
- },
- {
- "description": "one property invalid is invalid",
- "data": {"foo": 1, "bar": {}},
- "valid": false
- },
- {
- "description": "both properties invalid is invalid",
- "data": {"foo": [], "bar": {}},
- "valid": false
- },
- {
- "description": "doesn't invalidate other properties",
- "data": {"quux": []},
- "valid": true
- },
- {
- "description": "ignores non-objects",
- "data": [],
- "valid": true
- }
- ]
- },
- {
- "description":
- "properties, patternProperties, additionalProperties interaction",
- "schema": {
- "properties": {
- "foo": {"type": "array", "maxItems": 3},
- "bar": {"type": "array"}
- },
- "patternProperties": {"f.o": {"minItems": 2}},
- "additionalProperties": {"type": "integer"}
- },
- "tests": [
- {
- "description": "property validates property",
- "data": {"foo": [1, 2]},
- "valid": true
- },
- {
- "description": "property invalidates property",
- "data": {"foo": [1, 2, 3, 4]},
- "valid": false
- },
- {
- "description": "patternProperty invalidates property",
- "data": {"foo": []},
- "valid": false
- },
- {
- "description": "patternProperty validates nonproperty",
- "data": {"fxo": [1, 2]},
- "valid": true
- },
- {
- "description": "patternProperty invalidates nonproperty",
- "data": {"fxo": []},
- "valid": false
- },
- {
- "description": "additionalProperty ignores property",
- "data": {"bar": []},
- "valid": true
- },
- {
- "description": "additionalProperty validates others",
- "data": {"quux": 3},
- "valid": true
- },
- {
- "description": "additionalProperty invalidates others",
- "data": {"quux": "foo"},
- "valid": false
- }
- ]
- }
- ]
- },{}],260:[function(require,module,exports){
- module.exports=[
- {
- "description": "root pointer ref",
- "schema": {
- "properties": {
- "foo": {"$ref": "#"}
- },
- "additionalProperties": false
- },
- "tests": [
- {
- "description": "match",
- "data": {"foo": false},
- "valid": true
- },
- {
- "description": "recursive match",
- "data": {"foo": {"foo": false}},
- "valid": true
- },
- {
- "description": "mismatch",
- "data": {"bar": false},
- "valid": false
- },
- {
- "description": "recursive mismatch",
- "data": {"foo": {"bar": false}},
- "valid": false
- }
- ]
- },
- {
- "description": "relative pointer ref to object",
- "schema": {
- "properties": {
- "foo": {"type": "integer"},
- "bar": {"$ref": "#/properties/foo"}
- }
- },
- "tests": [
- {
- "description": "match",
- "data": {"bar": 3},
- "valid": true
- },
- {
- "description": "mismatch",
- "data": {"bar": true},
- "valid": false
- }
- ]
- },
- {
- "description": "relative pointer ref to array",
- "schema": {
- "items": [
- {"type": "integer"},
- {"$ref": "#/items/0"}
- ]
- },
- "tests": [
- {
- "description": "match array",
- "data": [1, 2],
- "valid": true
- },
- {
- "description": "mismatch array",
- "data": [1, "foo"],
- "valid": false
- }
- ]
- },
- {
- "description": "escaped pointer ref",
- "schema": {
- "tilda~field": {"type": "integer"},
- "slash/field": {"type": "integer"},
- "percent%field": {"type": "integer"},
- "properties": {
- "tilda": {"$ref": "#/tilda~0field"},
- "slash": {"$ref": "#/slash~1field"},
- "percent": {"$ref": "#/percent%25field"}
- }
- },
- "tests": [
- {
- "description": "slash",
- "data": {"slash": "aoeu"},
- "valid": false
- },
- {
- "description": "tilda",
- "data": {"tilda": "aoeu"},
- "valid": false
- },
- {
- "description": "percent",
- "data": {"percent": "aoeu"},
- "valid": false
- }
- ]
- },
- {
- "description": "nested refs",
- "schema": {
- "definitions": {
- "a": {"type": "integer"},
- "b": {"$ref": "#/definitions/a"},
- "c": {"$ref": "#/definitions/b"}
- },
- "$ref": "#/definitions/c"
- },
- "tests": [
- {
- "description": "nested ref valid",
- "data": 5,
- "valid": true
- },
- {
- "description": "nested ref invalid",
- "data": "a",
- "valid": false
- }
- ]
- },
- {
- "description": "remote ref, containing refs itself",
- "schema": {"$ref": "http://json-schema.org/draft-04/schema#"},
- "tests": [
- {
- "description": "remote ref valid",
- "data": {"minLength": 1},
- "valid": true
- },
- {
- "description": "remote ref invalid",
- "data": {"minLength": -1},
- "valid": false
- }
- ]
- }
- ]
- },{}],261:[function(require,module,exports){
- module.exports=[
- {
- "description": "remote ref",
- "schema": {"$ref": "http://localhost:1234/integer.json"},
- "tests": [
- {
- "description": "remote ref valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "remote ref invalid",
- "data": "a",
- "valid": false
- }
- ]
- },
- {
- "description": "fragment within remote ref",
- "schema": {"$ref": "http://localhost:1234/subSchemas.json#/integer"},
- "tests": [
- {
- "description": "remote fragment valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "remote fragment invalid",
- "data": "a",
- "valid": false
- }
- ]
- },
- {
- "description": "ref within remote ref",
- "schema": {
- "$ref": "http://localhost:1234/subSchemas.json#/refToInteger"
- },
- "tests": [
- {
- "description": "ref within ref valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "ref within ref invalid",
- "data": "a",
- "valid": false
- }
- ]
- },
- {
- "description": "change resolution scope",
- "schema": {
- "id": "http://localhost:1234/",
- "items": {
- "id": "folder/",
- "items": {"$ref": "folderInteger.json"}
- }
- },
- "tests": [
- {
- "description": "changed scope ref valid",
- "data": [[1]],
- "valid": true
- },
- {
- "description": "changed scope ref invalid",
- "data": [["a"]],
- "valid": false
- }
- ]
- }
- ]
- },{}],262:[function(require,module,exports){
- module.exports=[
- {
- "description": "required validation",
- "schema": {
- "properties": {
- "foo": {},
- "bar": {}
- },
- "required": ["foo"]
- },
- "tests": [
- {
- "description": "present required property is valid",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "non-present required property is invalid",
- "data": {"bar": 1},
- "valid": false
- }
- ]
- },
- {
- "description": "required default validation",
- "schema": {
- "properties": {
- "foo": {}
- }
- },
- "tests": [
- {
- "description": "not required by default",
- "data": {},
- "valid": true
- }
- ]
- }
- ]
- },{}],263:[function(require,module,exports){
- module.exports=[
- {
- "description": "integer type matches integers",
- "schema": {"type": "integer"},
- "tests": [
- {
- "description": "an integer is an integer",
- "data": 1,
- "valid": true
- },
- {
- "description": "a float is not an integer",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "a string is not an integer",
- "data": "foo",
- "valid": false
- },
- {
- "description": "an object is not an integer",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is not an integer",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is not an integer",
- "data": true,
- "valid": false
- },
- {
- "description": "null is not an integer",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "number type matches numbers",
- "schema": {"type": "number"},
- "tests": [
- {
- "description": "an integer is a number",
- "data": 1,
- "valid": true
- },
- {
- "description": "a float is a number",
- "data": 1.1,
- "valid": true
- },
- {
- "description": "a string is not a number",
- "data": "foo",
- "valid": false
- },
- {
- "description": "an object is not a number",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is not a number",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is not a number",
- "data": true,
- "valid": false
- },
- {
- "description": "null is not a number",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "string type matches strings",
- "schema": {"type": "string"},
- "tests": [
- {
- "description": "1 is not a string",
- "data": 1,
- "valid": false
- },
- {
- "description": "a float is not a string",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "a string is a string",
- "data": "foo",
- "valid": true
- },
- {
- "description": "an object is not a string",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is not a string",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is not a string",
- "data": true,
- "valid": false
- },
- {
- "description": "null is not a string",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "object type matches objects",
- "schema": {"type": "object"},
- "tests": [
- {
- "description": "an integer is not an object",
- "data": 1,
- "valid": false
- },
- {
- "description": "a float is not an object",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "a string is not an object",
- "data": "foo",
- "valid": false
- },
- {
- "description": "an object is an object",
- "data": {},
- "valid": true
- },
- {
- "description": "an array is not an object",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is not an object",
- "data": true,
- "valid": false
- },
- {
- "description": "null is not an object",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "array type matches arrays",
- "schema": {"type": "array"},
- "tests": [
- {
- "description": "an integer is not an array",
- "data": 1,
- "valid": false
- },
- {
- "description": "a float is not an array",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "a string is not an array",
- "data": "foo",
- "valid": false
- },
- {
- "description": "an object is not an array",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is not an array",
- "data": [],
- "valid": true
- },
- {
- "description": "a boolean is not an array",
- "data": true,
- "valid": false
- },
- {
- "description": "null is not an array",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "boolean type matches booleans",
- "schema": {"type": "boolean"},
- "tests": [
- {
- "description": "an integer is not a boolean",
- "data": 1,
- "valid": false
- },
- {
- "description": "a float is not a boolean",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "a string is not a boolean",
- "data": "foo",
- "valid": false
- },
- {
- "description": "an object is not a boolean",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is not a boolean",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is not a boolean",
- "data": true,
- "valid": true
- },
- {
- "description": "null is not a boolean",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "null type matches only the null object",
- "schema": {"type": "null"},
- "tests": [
- {
- "description": "an integer is not null",
- "data": 1,
- "valid": false
- },
- {
- "description": "a float is not null",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "a string is not null",
- "data": "foo",
- "valid": false
- },
- {
- "description": "an object is not null",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is not null",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is not null",
- "data": true,
- "valid": false
- },
- {
- "description": "null is null",
- "data": null,
- "valid": true
- }
- ]
- },
- {
- "description": "multiple types can be specified in an array",
- "schema": {"type": ["integer", "string"]},
- "tests": [
- {
- "description": "an integer is valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "a string is valid",
- "data": "foo",
- "valid": true
- },
- {
- "description": "a float is invalid",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "an object is invalid",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is invalid",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is invalid",
- "data": true,
- "valid": false
- },
- {
- "description": "null is invalid",
- "data": null,
- "valid": false
- }
- ]
- }
- ]
- },{}],264:[function(require,module,exports){
- module.exports=[
- {
- "description": "uniqueItems validation",
- "schema": {"uniqueItems": true},
- "tests": [
- {
- "description": "unique array of integers is valid",
- "data": [1, 2],
- "valid": true
- },
- {
- "description": "non-unique array of integers is invalid",
- "data": [1, 1],
- "valid": false
- },
- {
- "description": "numbers are unique if mathematically unequal",
- "data": [1.0, 1.00, 1],
- "valid": false
- },
- {
- "description": "unique array of objects is valid",
- "data": [{"foo": "bar"}, {"foo": "baz"}],
- "valid": true
- },
- {
- "description": "non-unique array of objects is invalid",
- "data": [{"foo": "bar"}, {"foo": "bar"}],
- "valid": false
- },
- {
- "description": "unique array of nested objects is valid",
- "data": [
- {"foo": {"bar" : {"baz" : true}}},
- {"foo": {"bar" : {"baz" : false}}}
- ],
- "valid": true
- },
- {
- "description": "non-unique array of nested objects is invalid",
- "data": [
- {"foo": {"bar" : {"baz" : true}}},
- {"foo": {"bar" : {"baz" : true}}}
- ],
- "valid": false
- },
- {
- "description": "unique array of arrays is valid",
- "data": [["foo"], ["bar"]],
- "valid": true
- },
- {
- "description": "non-unique array of arrays is invalid",
- "data": [["foo"], ["foo"]],
- "valid": false
- },
- {
- "description": "1 and true are unique",
- "data": [1, true],
- "valid": true
- },
- {
- "description": "0 and false are unique",
- "data": [0, false],
- "valid": true
- },
- {
- "description": "unique heterogeneous types are valid",
- "data": [{}, [1], true, null, 1],
- "valid": true
- },
- {
- "description": "non-unique heterogeneous types are invalid",
- "data": [{}, [1], true, null, {}, 1],
- "valid": false
- }
- ]
- }
- ]
- },{}],265:[function(require,module,exports){
- "use strict";
- var isBrowser = typeof window !== "undefined";
- var ZSchema = require("../../src/ZSchema");
- if (!isBrowser) {
- var request = require("https").request;
- }
- function validateWithAutomaticDownloads(validator, data, schema, callback) {
- var lastResult;
- function finish() {
- callback(validator.getLastErrors(), lastResult);
- }
- function validate() {
- lastResult = validator.validate(data, schema);
- var missingReferences = validator.getMissingRemoteReferences();
- if (missingReferences.length > 0) {
- var finished = 0;
- missingReferences.forEach(function (url) {
- request(url, function (response) {
- var body = "";
- response.on("data", function (chunk) { data += chunk; });
- response.on("end", function () {
- validator.setRemoteReference(url, JSON.parse(body));
- finished++;
- if (finished === missingReferences.length) {
- validate();
- }
- });
- });
- });
- } else {
- finish();
- }
- }
- validate();
- }
- describe("Automatic schema loading", function () {
- it("should download schemas and validate successfully", function (done) {
- if (isBrowser) {
- // skip this test in browsers
- expect(1).toBe(1);
- done();
- return;
- }
- var validator = new ZSchema();
- var schema = { "$ref": "http://json-schema.org/draft-04/schema#" };
- var data = { "minLength": 1 };
- validateWithAutomaticDownloads(validator, data, schema, function (err, valid) {
- expect(valid).toBe(true);
- expect(err).toBe(null);
- done();
- });
- });
- it("should download schemas and fail validating", function (done) {
- if (typeof window !== "undefined") {
- // skip this test in browsers
- expect(1).toBe(1);
- done();
- return;
- }
- var validator = new ZSchema();
- var schema = { "$ref": "http://json-schema.org/draft-04/schema#" };
- var data = { "minLength": -1 };
- validateWithAutomaticDownloads(validator, data, schema, function (err, valid) {
- expect(valid).toBe(false);
- expect(err[0].code).toBe("MINIMUM");
- done();
- });
- });
- });
- },{"../../src/ZSchema":151,"https":6}],266:[function(require,module,exports){
- "use strict";
- var ZSchema = require("../../src/ZSchema");
- function setRemoteReferences(validator) {
- validator.setRemoteReference("http://json-schema.org/draft-04/schema",
- require("../files/draft-04-schema.json"));
- validator.setRemoteReference("http://localhost:1234/integer.json",
- require("../jsonSchemaTestSuite/remotes/integer.json"));
- validator.setRemoteReference("http://localhost:1234/subSchemas.json",
- require("../jsonSchemaTestSuite/remotes/subSchemas.json"));
- validator.setRemoteReference("http://localhost:1234/folder/folderInteger.json",
- require("../jsonSchemaTestSuite/remotes/folder/folderInteger.json"));
- }
- describe("Basic", function () {
- it("ZSchema constructor should take one argument - options", function () {
- expect(ZSchema.length).toBe(1);
- });
- it("Work in progress test...", function () {
- var validator = new ZSchema();
- setRemoteReferences(validator);
- var schema = [
- {
- id: "schemaA",
- type: "integer"
- },
- {
- id: "schemaB",
- type: "string"
- },
- {
- id: "mainSchema",
- type: "object",
- properties: {
- a: { "$ref": "schemaA" },
- b: { "$ref": "schemaB" },
- c: { "enum": ["C"] }
- }
- }
- ];
- var data = {
- a: 1,
- b: "str",
- c: "C"
- };
- var validSchema = validator.validateSchema(schema);
- expect(validSchema).toBe(true);
- if (!validSchema) {
- console.log(validator.getLastErrors());
- return;
- }
- var valid = validator.validate(data, schema[2]);
- expect(valid).toBe(true);
- if (!valid) {
- console.log(validator.getLastErrors());
- return;
- }
- });
- });
- },{"../../src/ZSchema":151,"../files/draft-04-schema.json":231,"../jsonSchemaTestSuite/remotes/folder/folderInteger.json":232,"../jsonSchemaTestSuite/remotes/integer.json":233,"../jsonSchemaTestSuite/remotes/subSchemas.json":234}],267:[function(require,module,exports){
- "use strict";
- var ZSchema = require("../../src/ZSchema");
- function setRemoteReferences(validator) {
- validator.setRemoteReference("http://json-schema.org/draft-04/schema",
- require("../files/draft-04-schema.json"));
- validator.setRemoteReference("http://localhost:1234/integer.json",
- require("../jsonSchemaTestSuite/remotes/integer.json"));
- validator.setRemoteReference("http://localhost:1234/subSchemas.json",
- require("../jsonSchemaTestSuite/remotes/subSchemas.json"));
- validator.setRemoteReference("http://localhost:1234/folder/folderInteger.json",
- require("../jsonSchemaTestSuite/remotes/folder/folderInteger.json"));
- }
- var jsonSchemaTestSuiteFiles = [
- require("../jsonSchemaTestSuite/tests/draft4/additionalItems.json"),
- require("../jsonSchemaTestSuite/tests/draft4/additionalProperties.json"),
- require("../jsonSchemaTestSuite/tests/draft4/allOf.json"),
- require("../jsonSchemaTestSuite/tests/draft4/anyOf.json"),
- require("../jsonSchemaTestSuite/tests/draft4/default.json"),
- require("../jsonSchemaTestSuite/tests/draft4/definitions.json"),
- require("../jsonSchemaTestSuite/tests/draft4/dependencies.json"),
- require("../jsonSchemaTestSuite/tests/draft4/enum.json"),
- require("../jsonSchemaTestSuite/tests/draft4/items.json"),
- require("../jsonSchemaTestSuite/tests/draft4/maximum.json"),
- require("../jsonSchemaTestSuite/tests/draft4/maxItems.json"),
- require("../jsonSchemaTestSuite/tests/draft4/maxLength.json"),
- require("../jsonSchemaTestSuite/tests/draft4/maxProperties.json"),
- require("../jsonSchemaTestSuite/tests/draft4/minimum.json"),
- require("../jsonSchemaTestSuite/tests/draft4/minItems.json"),
- require("../jsonSchemaTestSuite/tests/draft4/minLength.json"),
- require("../jsonSchemaTestSuite/tests/draft4/minProperties.json"),
- require("../jsonSchemaTestSuite/tests/draft4/multipleOf.json"),
- require("../jsonSchemaTestSuite/tests/draft4/not.json"),
- require("../jsonSchemaTestSuite/tests/draft4/oneOf.json"),
- require("../jsonSchemaTestSuite/tests/draft4/pattern.json"),
- require("../jsonSchemaTestSuite/tests/draft4/patternProperties.json"),
- require("../jsonSchemaTestSuite/tests/draft4/properties.json"),
- require("../jsonSchemaTestSuite/tests/draft4/ref.json"),
- require("../jsonSchemaTestSuite/tests/draft4/refRemote.json"),
- require("../jsonSchemaTestSuite/tests/draft4/required.json"),
- require("../jsonSchemaTestSuite/tests/draft4/type.json"),
- require("../jsonSchemaTestSuite/tests/draft4/uniqueItems.json"),
- // optional
- require("../jsonSchemaTestSuite/tests/draft4/optional/bignum.json"),
- require("../jsonSchemaTestSuite/tests/draft4/optional/format.json")
- // zeroTerminatedFloats.json is excluded because JavaScript doesn't distinguish between different types of numeric values
- // require("../jsonSchemaTestSuite/tests/draft4/optional/zeroTerminatedFloats.json")
- ];
- var testExcludes = [
- "an invalid URI",
- "an invalid URI though valid URI reference"
- ];
- describe("JsonSchemaTestSuite", function () {
- it("should contain 30 files", function () {
- expect(jsonSchemaTestSuiteFiles.length).toBe(30);
- });
- jsonSchemaTestSuiteFiles.forEach(function (testDefinitions, fileIndex) {
- testDefinitions.forEach(function (testDefinition) {
- testDefinition.tests.forEach(function (test) {
- if (testExcludes.indexOf(test.description) !== -1) { return; }
- it("[" + fileIndex + "]" + testDefinition.description + " - " + test.description + ": " + JSON.stringify(test.data), function () {
- var validator = new ZSchema();
- setRemoteReferences(validator);
- var valid = validator.validate(test.data, testDefinition.schema);
- expect(valid).toBe(test.valid);
- if (valid !== test.valid) {
- if (!valid) {
- var errors = validator.getLastErrors();
- expect(errors).toBe(null);
- }
- }
- });
- });
- });
- });
- });
- },{"../../src/ZSchema":151,"../files/draft-04-schema.json":231,"../jsonSchemaTestSuite/remotes/folder/folderInteger.json":232,"../jsonSchemaTestSuite/remotes/integer.json":233,"../jsonSchemaTestSuite/remotes/subSchemas.json":234,"../jsonSchemaTestSuite/tests/draft4/additionalItems.json":235,"../jsonSchemaTestSuite/tests/draft4/additionalProperties.json":236,"../jsonSchemaTestSuite/tests/draft4/allOf.json":237,"../jsonSchemaTestSuite/tests/draft4/anyOf.json":238,"../jsonSchemaTestSuite/tests/draft4/default.json":239,"../jsonSchemaTestSuite/tests/draft4/definitions.json":240,"../jsonSchemaTestSuite/tests/draft4/dependencies.json":241,"../jsonSchemaTestSuite/tests/draft4/enum.json":242,"../jsonSchemaTestSuite/tests/draft4/items.json":243,"../jsonSchemaTestSuite/tests/draft4/maxItems.json":244,"../jsonSchemaTestSuite/tests/draft4/maxLength.json":245,"../jsonSchemaTestSuite/tests/draft4/maxProperties.json":246,"../jsonSchemaTestSuite/tests/draft4/maximum.json":247,"../jsonSchemaTestSuite/tests/draft4/minItems.json":248,"../jsonSchemaTestSuite/tests/draft4/minLength.json":249,"../jsonSchemaTestSuite/tests/draft4/minProperties.json":250,"../jsonSchemaTestSuite/tests/draft4/minimum.json":251,"../jsonSchemaTestSuite/tests/draft4/multipleOf.json":252,"../jsonSchemaTestSuite/tests/draft4/not.json":253,"../jsonSchemaTestSuite/tests/draft4/oneOf.json":254,"../jsonSchemaTestSuite/tests/draft4/optional/bignum.json":255,"../jsonSchemaTestSuite/tests/draft4/optional/format.json":256,"../jsonSchemaTestSuite/tests/draft4/pattern.json":257,"../jsonSchemaTestSuite/tests/draft4/patternProperties.json":258,"../jsonSchemaTestSuite/tests/draft4/properties.json":259,"../jsonSchemaTestSuite/tests/draft4/ref.json":260,"../jsonSchemaTestSuite/tests/draft4/refRemote.json":261,"../jsonSchemaTestSuite/tests/draft4/required.json":262,"../jsonSchemaTestSuite/tests/draft4/type.json":263,"../jsonSchemaTestSuite/tests/draft4/uniqueItems.json":264}],268:[function(require,module,exports){
- "use strict";
- var ZSchema = require("../../src/ZSchema");
- describe("Using multiple instances of Z-Schema", function () {
- it("Should pass all tests", function () {
- var schema = {
- "$schema": "http://json-schema.org/draft-04/schema#",
- "type": "object",
- "properties": {
- "options": {
- "enum": ["a", "b", "c"]
- }
- }
- };
- var v;
- v = new ZSchema({ strictMode: true });
- // Should fail because "additionalProperties" is missing
- expect(v.validateSchema(schema)).toBe(false, "1st");
- v = new ZSchema();
- expect(v.validateSchema(schema)).toBe(true, "2nd");
- v = new ZSchema({ strictMode: true });
- expect(v.validateSchema(schema)).toBe(false, "3rd");
- });
- });
- },{"../../src/ZSchema":151}],269:[function(require,module,exports){
- /*jshint -W030 */
- "use strict";
- var ZSchema = require("../../src/ZSchema");
- var testSuiteFiles = [
- require("../ZSchemaTestSuite/CustomFormats.js"),
- require("../ZSchemaTestSuite/CustomFormatsAsync.js"),
- require("../ZSchemaTestSuite/ForceAdditional.js"),
- require("../ZSchemaTestSuite/ForceItems.js"),
- require("../ZSchemaTestSuite/ForceMinLength.js"),
- require("../ZSchemaTestSuite/ForceMaxLength.js"),
- require("../ZSchemaTestSuite/ForceMinItems.js"),
- require("../ZSchemaTestSuite/ForceMaxItems.js"),
- require("../ZSchemaTestSuite/ForceProperties.js"),
- require("../ZSchemaTestSuite/IgnoreUnresolvableReferences.js"),
- require("../ZSchemaTestSuite/AssumeAdditional.js"),
- require("../ZSchemaTestSuite/NoEmptyArrays.js"),
- require("../ZSchemaTestSuite/NoEmptyStrings.js"),
- require("../ZSchemaTestSuite/NoTypeless.js"),
- require("../ZSchemaTestSuite/NoExtraKeywords.js"),
- require("../ZSchemaTestSuite/StrictUris.js"),
- require("../ZSchemaTestSuite/MultipleSchemas.js"),
- require("../ZSchemaTestSuite/ErrorPathAsArray.js"),
- require("../ZSchemaTestSuite/ErrorPathAsJSONPointer.js"),
- require("../ZSchemaTestSuite/ErrorPathContainsIntegerIndex.js"),
- require("../ZSchemaTestSuite/PedanticCheck.js"),
- require("../ZSchemaTestSuite/getRegisteredFormats.js"),
- require("../ZSchemaTestSuite/InvalidId.js"),
- require("../ZSchemaTestSuite/IncludeErrors.js"),
- require("../ZSchemaTestSuite/CustomValidator.js"),
- // issues
- require("../ZSchemaTestSuite/Issue12.js"),
- require("../ZSchemaTestSuite/Issue13.js"),
- require("../ZSchemaTestSuite/Issue16.js"),
- require("../ZSchemaTestSuite/Issue22.js"),
- require("../ZSchemaTestSuite/Issue25.js"),
- require("../ZSchemaTestSuite/Issue26.js"),
- require("../ZSchemaTestSuite/Issue37.js"),
- require("../ZSchemaTestSuite/Issue40.js"),
- require("../ZSchemaTestSuite/Issue41.js"),
- require("../ZSchemaTestSuite/Issue43.js"),
- require("../ZSchemaTestSuite/Issue44.js"),
- require("../ZSchemaTestSuite/Issue45.js"),
- require("../ZSchemaTestSuite/Issue47.js"),
- require("../ZSchemaTestSuite/Issue48.js"),
- require("../ZSchemaTestSuite/Issue49.js"),
- require("../ZSchemaTestSuite/Issue53.js"),
- require("../ZSchemaTestSuite/Issue56.js"),
- require("../ZSchemaTestSuite/Issue57.js"),
- require("../ZSchemaTestSuite/Issue58.js"),
- require("../ZSchemaTestSuite/Issue63.js"),
- require("../ZSchemaTestSuite/Issue64.js"),
- require("../ZSchemaTestSuite/Issue67.js"),
- require("../ZSchemaTestSuite/Issue71.js"),
- require("../ZSchemaTestSuite/Issue73.js"),
- require("../ZSchemaTestSuite/Issue76.js"),
- require("../ZSchemaTestSuite/Issue85.js"),
- require("../ZSchemaTestSuite/Issue94.js"),
- require("../ZSchemaTestSuite/Issue96.js"),
- require("../ZSchemaTestSuite/Issue98.js"),
- require("../ZSchemaTestSuite/Issue101.js"),
- require("../ZSchemaTestSuite/Issue102.js"),
- require("../ZSchemaTestSuite/Issue103.js"),
- require("../ZSchemaTestSuite/Issue106.js"),
- require("../ZSchemaTestSuite/Issue107.js"),
- require("../ZSchemaTestSuite/Issue121.js"),
- require("../ZSchemaTestSuite/Issue126.js"),
- require("../ZSchemaTestSuite/Issue130.js"),
- require("../ZSchemaTestSuite/Issue131.js"),
- require("../ZSchemaTestSuite/Issue137.js"),
- require("../ZSchemaTestSuite/Issue139.js"),
- require("../ZSchemaTestSuite/Issue142.js"),
- require("../ZSchemaTestSuite/Issue146.js"),
- require("../ZSchemaTestSuite/Issue151.js"),
- require("../ZSchemaTestSuite/Issue199.js"),
- require("../ZSchemaTestSuite/Issue209.js"),
- require("../ZSchemaTestSuite/Issue222.js"),
- require("../ZSchemaTestSuite/Issue229.js"),
- require("../ZSchemaTestSuite/Issue250.js"),
- undefined
- ];
- describe("ZSchemaTestSuite", function () {
- var idx = testSuiteFiles.length;
- while (idx--) {
- if (testSuiteFiles[idx] == null) {
- testSuiteFiles.splice(idx, 1);
- }
- }
- testSuiteFiles.forEach(function (testSuite) {
- testSuite.tests.forEach(function (test) {
- var data = test.data;
- if (typeof data === "undefined") {
- data = testSuite.data;
- }
- var validateOptions = test.validateOptions;
- if (typeof validateOptions === "undefined") {
- validateOptions = testSuite.validateOptions;
- }
- var async = test.async || testSuite.async || false,
- options = test.options || testSuite.options || undefined,
- setup = test.setup || testSuite.setup,
- schema = test.schema || testSuite.schema,
- schemaIndex = test.schemaIndex || testSuite.schemaIndex || 0,
- after = test.after || testSuite.after,
- validateSchemaOnly = test.validateSchemaOnly || testSuite.validateSchemaOnly,
- failWithException = test.failWithException || testSuite.failWithException;
- !async && it(testSuite.description + ", " + test.description, function () {
- ZSchema.setSchemaReader(null);
- var validator = new ZSchema(options);
- var caughtErr;
- if (setup) { setup(validator, ZSchema); }
- var valid;
- try {
- valid = validator.validateSchema(schema);
- } catch (err) {
- if (!failWithException) {
- throw err;
- }
- caughtErr = err;
- }
- if (valid && !validateSchemaOnly) {
- if (Array.isArray(schema)) {
- schema = schema[schemaIndex];
- }
- try {
- valid = validator.validate(data, schema, validateOptions);
- } catch (err) {
- if (!failWithException) {
- throw err;
- }
- caughtErr = err;
- }
- }
- var err = caughtErr || validator.getLastErrors();
- if (failWithException) {
- expect(caughtErr).toBeTruthy();
- } else {
- expect(typeof valid).toBe("boolean", "returned response is not a boolean");
- expect(valid).toBe(test.valid, "test result doesn't match expected test result");
- }
- if (test.valid === true) {
- expect(err).toBe(null, "errors are not undefined when test is valid");
- }
- if (after) {
- after(err, valid, data, validator);
- }
- });
- async && it(testSuite.description + ", " + test.description, function (done) {
- var validator = new ZSchema(options);
- if (setup) { setup(validator, ZSchema); }
- // see http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony
- var zalgo = false;
- var result = validator.validate(data, schema, function (err, valid) {
- // make sure callback wasn't called synchronously
- expect(zalgo).toBe(true, "callback was fired in synchronous way");
- expect(typeof valid).toBe("boolean", "returned response is not a boolean");
- expect(valid).toBe(test.valid, "test result doesn't match expected test result");
- if (test.valid === true) {
- expect(err).toBe(null, "errors are not undefined when test is valid");
- }
- if (after) {
- after(err, valid, data);
- }
- done();
- });
- // never return anything when callback is specified
- expect(result).toBe(undefined, "validator returned something else than undefined in callback mode");
- zalgo = true;
- });
- });
- });
- });
- },{"../../src/ZSchema":151,"../ZSchemaTestSuite/AssumeAdditional.js":154,"../ZSchemaTestSuite/CustomFormats.js":155,"../ZSchemaTestSuite/CustomFormatsAsync.js":156,"../ZSchemaTestSuite/CustomValidator.js":157,"../ZSchemaTestSuite/ErrorPathAsArray.js":158,"../ZSchemaTestSuite/ErrorPathAsJSONPointer.js":159,"../ZSchemaTestSuite/ErrorPathContainsIntegerIndex.js":160,"../ZSchemaTestSuite/ForceAdditional.js":161,"../ZSchemaTestSuite/ForceItems.js":162,"../ZSchemaTestSuite/ForceMaxItems.js":163,"../ZSchemaTestSuite/ForceMaxLength.js":164,"../ZSchemaTestSuite/ForceMinItems.js":165,"../ZSchemaTestSuite/ForceMinLength.js":166,"../ZSchemaTestSuite/ForceProperties.js":167,"../ZSchemaTestSuite/IgnoreUnresolvableReferences.js":168,"../ZSchemaTestSuite/IncludeErrors.js":169,"../ZSchemaTestSuite/InvalidId.js":170,"../ZSchemaTestSuite/Issue101.js":171,"../ZSchemaTestSuite/Issue102.js":172,"../ZSchemaTestSuite/Issue103.js":173,"../ZSchemaTestSuite/Issue106.js":174,"../ZSchemaTestSuite/Issue107.js":175,"../ZSchemaTestSuite/Issue12.js":176,"../ZSchemaTestSuite/Issue121.js":177,"../ZSchemaTestSuite/Issue126.js":178,"../ZSchemaTestSuite/Issue13.js":179,"../ZSchemaTestSuite/Issue130.js":180,"../ZSchemaTestSuite/Issue131.js":181,"../ZSchemaTestSuite/Issue137.js":182,"../ZSchemaTestSuite/Issue139.js":183,"../ZSchemaTestSuite/Issue142.js":184,"../ZSchemaTestSuite/Issue146.js":185,"../ZSchemaTestSuite/Issue151.js":186,"../ZSchemaTestSuite/Issue16.js":187,"../ZSchemaTestSuite/Issue199.js":188,"../ZSchemaTestSuite/Issue209.js":189,"../ZSchemaTestSuite/Issue22.js":190,"../ZSchemaTestSuite/Issue222.js":191,"../ZSchemaTestSuite/Issue229.js":192,"../ZSchemaTestSuite/Issue25.js":193,"../ZSchemaTestSuite/Issue250.js":194,"../ZSchemaTestSuite/Issue26.js":195,"../ZSchemaTestSuite/Issue37.js":196,"../ZSchemaTestSuite/Issue40.js":197,"../ZSchemaTestSuite/Issue41.js":198,"../ZSchemaTestSuite/Issue43.js":199,"../ZSchemaTestSuite/Issue44.js":200,"../ZSchemaTestSuite/Issue45.js":201,"../ZSchemaTestSuite/Issue47.js":202,"../ZSchemaTestSuite/Issue48.js":203,"../ZSchemaTestSuite/Issue49.js":204,"../ZSchemaTestSuite/Issue53.js":205,"../ZSchemaTestSuite/Issue56.js":206,"../ZSchemaTestSuite/Issue57.js":207,"../ZSchemaTestSuite/Issue58.js":208,"../ZSchemaTestSuite/Issue63.js":209,"../ZSchemaTestSuite/Issue64.js":210,"../ZSchemaTestSuite/Issue67.js":211,"../ZSchemaTestSuite/Issue71.js":212,"../ZSchemaTestSuite/Issue73.js":213,"../ZSchemaTestSuite/Issue76.js":214,"../ZSchemaTestSuite/Issue85.js":215,"../ZSchemaTestSuite/Issue94.js":216,"../ZSchemaTestSuite/Issue96.js":217,"../ZSchemaTestSuite/Issue98.js":218,"../ZSchemaTestSuite/MultipleSchemas.js":219,"../ZSchemaTestSuite/NoEmptyArrays.js":220,"../ZSchemaTestSuite/NoEmptyStrings.js":221,"../ZSchemaTestSuite/NoExtraKeywords.js":222,"../ZSchemaTestSuite/NoTypeless.js":223,"../ZSchemaTestSuite/PedanticCheck.js":224,"../ZSchemaTestSuite/StrictUris.js":225,"../ZSchemaTestSuite/getRegisteredFormats.js":230}],270:[function(require,module,exports){
- "use strict";
- var ZSchema = require("../../src/ZSchema");
- var validator = new ZSchema();
- var schema = {
- "type": [
- "object"
- ],
- "definitions": {
- "car": {
- "title": "Car",
- "description": "It's a car",
- "stability": "prototype",
- "strictProperties": true,
- "type": [
- "object"
- ],
- "definitions": {
- "id": {
- "description": "unique identifier of car",
- "readOnly": true,
- "type": [
- "string"
- ]
- },
- "car": {
- "description": "Car object",
- "type": [
- "object"
- ],
- "properties": {
- "brand": {
- "description": "Car brand",
- "type": [
- "string"
- ]
- },
- "engine": {
- "description": "Car engine",
- "type": [
- "string"
- ]
- }
- }
- },
- "cars": {
- "description": "Collection of cars",
- "type": [
- "array"
- ],
- "items": {
- "$ref": "#/definitions/car/definitions/car"
- }
- },
- "identity": {
- "$ref": "#/definitions/car/definitions/id"
- }
- },
- "links": [],
- "properties": {
- "id": {
- "$ref": "#/definitions/car/definitions/id"
- }
- }
- }
- },
- "properties": {
- "car": {
- "$ref": "#/definitions/car"
- }
- },
- "description": "Car API",
- "id": "cars",
- "links": [{
- "href": "https://example.com/schema",
- "rel": "self"
- }],
- "title": "Car API"
- };
- describe("Using path to schema as a third argument", function () {
- it("Should pass the test", function () {
- var cars = [
- {
- "brand": "Lexus",
- "engine": "big"
- }
- ];
- var valid = validator.validate(cars, schema, { schemaPath: "definitions.car.definitions.cars" });
- expect(valid).toBe(true);
- expect(validator.getLastError()).toBe(null);
- });
- });
- },{"../../src/ZSchema":151}]},{},[265,266,267,268,270,269]);
|