Comparing version 0.4.15 to 0.4.16
@@ -1,2 +0,2 @@ | ||
var I1=Object.defineProperty;var c=(w,L)=>{for(var N in L)I1(w,N,{get:L[N],enumerable:!0,configurable:!0,set:(E)=>L[N]=()=>E})};var P1=(w,L)=>()=>(w&&(L=w(w=0)),L);var p=((w)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(w,{get:(L,N)=>(typeof require!=="undefined"?require:L)[N]}):w)(function(w){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+w+'" is not supported')});var R={};c(R,{uptime:()=>{{return G1}},type:()=>{{return A1}},totalmem:()=>{{return B1}},tmpdir:()=>{{return b1}},release:()=>{{return y1}},platform:()=>{{return h1}},networkInterfaces:()=>{{return i1}},loadavg:()=>{{return z1}},hostname:()=>{{return R1}},homedir:()=>{{return k1}},getNetworkInterfaces:()=>{{return r1}},freemem:()=>{{return j1}},endianness:()=>{{return D1}},default:()=>{{return x1}},cpus:()=>{{return F1}},arch:()=>{{return g1}},EOL:()=>{{return l1}}});var Z1,n,T1,f1,u1,C1,_1,q1,v1,d1,t,x1,D1,R1,z1,G1,j1,B1,F1,A1,y1,g1,h1,b1,l1,k1,i1,r1;var z=P1(()=>{Z1=Object.create,n=Object.defineProperty,T1=Object.getOwnPropertyDescriptor,f1=Object.getOwnPropertyNames,u1=Object.getPrototypeOf,C1=Object.prototype.hasOwnProperty,_1=(w,L)=>()=>(L||w((L={exports:{}}).exports,L),L.exports),q1=(w,L,N,E)=>{if(L&&typeof L=="object"||typeof L=="function")for(let M of f1(L))!C1.call(w,M)&&M!==N&&n(w,M,{get:()=>L[M],enumerable:!(E=T1(L,M))||E.enumerable});return w},v1=(w,L,N)=>(N=w!=null?Z1(u1(w)):{},q1(L||!w||!w.__esModule?n(N,"default",{value:w,enumerable:!0}):N,w)),d1=_1((w)=>{w.endianness=function(){return"LE"},w.hostname=function(){return typeof location<"u"?location.hostname:""},w.loadavg=function(){return[]},w.uptime=function(){return 0},w.freemem=function(){return Number.MAX_VALUE},w.totalmem=function(){return Number.MAX_VALUE},w.cpus=function(){return[]},w.type=function(){return"Browser"},w.release=function(){return typeof navigator<"u"?navigator.appVersion:""},w.networkInterfaces=w.getNetworkInterfaces=function(){return{}},w.arch=function(){return"javascript"},w.platform=function(){return"browser"},w.tmpdir=w.tmpDir=function(){return"/tmp"},w.EOL=` | ||
var I1=Object.defineProperty;var c=(w,L)=>{for(var N in L)I1(w,N,{get:L[N],enumerable:!0,configurable:!0,set:(E)=>L[N]=()=>E})};var P1=(w,L)=>()=>(w&&(L=w(w=0)),L);var p=((w)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(w,{get:(L,N)=>(typeof require!=="undefined"?require:L)[N]}):w)(function(w){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+w+'" is not supported')});var R={};c(R,{uptime:()=>G1,type:()=>A1,totalmem:()=>B1,tmpdir:()=>b1,release:()=>y1,platform:()=>h1,networkInterfaces:()=>i1,loadavg:()=>z1,hostname:()=>R1,homedir:()=>k1,getNetworkInterfaces:()=>r1,freemem:()=>j1,endianness:()=>D1,default:()=>x1,cpus:()=>F1,arch:()=>g1,EOL:()=>l1});var Z1,n,T1,f1,u1,C1,_1,q1,v1,d1,t,x1,D1,R1,z1,G1,j1,B1,F1,A1,y1,g1,h1,b1,l1,k1,i1,r1;var z=P1(()=>{Z1=Object.create,n=Object.defineProperty,T1=Object.getOwnPropertyDescriptor,f1=Object.getOwnPropertyNames,u1=Object.getPrototypeOf,C1=Object.prototype.hasOwnProperty,_1=(w,L)=>()=>(L||w((L={exports:{}}).exports,L),L.exports),q1=(w,L,N,E)=>{if(L&&typeof L=="object"||typeof L=="function")for(let M of f1(L))!C1.call(w,M)&&M!==N&&n(w,M,{get:()=>L[M],enumerable:!(E=T1(L,M))||E.enumerable});return w},v1=(w,L,N)=>(N=w!=null?Z1(u1(w)):{},q1(L||!w||!w.__esModule?n(N,"default",{value:w,enumerable:!0}):N,w)),d1=_1((w)=>{w.endianness=function(){return"LE"},w.hostname=function(){return typeof location<"u"?location.hostname:""},w.loadavg=function(){return[]},w.uptime=function(){return 0},w.freemem=function(){return Number.MAX_VALUE},w.totalmem=function(){return Number.MAX_VALUE},w.cpus=function(){return[]},w.type=function(){return"Browser"},w.release=function(){return typeof navigator<"u"?navigator.appVersion:""},w.networkInterfaces=w.getNetworkInterfaces=function(){return{}},w.arch=function(){return"javascript"},w.platform=function(){return"browser"},w.tmpdir=w.tmpDir=function(){return"/tmp"},w.EOL=` | ||
`,w.homedir=function(){return"/"}}),t=v1(d1()),x1=t.default,{endianness:D1,hostname:R1,loadavg:z1,uptime:G1,freemem:j1,totalmem:B1,cpus:F1,type:A1,release:y1,arch:g1,platform:h1,tmpdir:b1,EOL:l1,homedir:k1,networkInterfaces:i1,getNetworkInterfaces:r1}=t.default});var T={bun:"bun",deno:"deno",node:"node",workerd:"workerd",browser:"browser"},I=()=>{},f="$tatami-ng_group",u={1:12.706204736432102,2:4.3026527299112765,3:3.182446305284264,4:2.7764451051977996,5:2.57058183661474,6:2.446911848791681,7:2.3646242510102997,8:2.306004135033371,9:2.262157162740992,10:2.2281388519649385,11:2.200985160082949,12:2.178812829663418,13:2.160368656461013,14:2.1447866879169277,15:2.131449545559323,16:2.1199052992210112,17:2.109815577833181,18:2.10092204024096,19:2.0930240544082634,20:2.085963447265837,21:2.0796138447276626,22:2.073873067904015,23:2.068657610419041,24:2.063898561628021,25:2.0595385527532946,26:2.0555294386428713,27:2.0518305164802837,28:2.048407141795244,29:2.0452296421327034,30:2.042272456301238,31:2.0395134463964077,32:2.0369333434601016,33:2.0345152974493383,34:2.0322445093177186,35:2.030107928250343,36:2.0280940009804507,37:2.0261924630291097,38:2.0243941645751367,39:2.0226909117347285,40:2.021075382995338,41:2.019540963982894,42:2.0180816970958815,43:2.0166921941428138,44:2.0153675699129416,45:2.0141033848332928,46:2.012895595294589,47:2.011740510475755,48:2.010634754696446,49:2.0095752344892093,50:2.0085591097152062,51:2.0075837681558824,52:2.0066468031022118,53:2.00574599353695,54:2.0048792865665233,55:2.0040447818101814,56:2.003240717496698,57:2.002465458054599,58:2.0017174830120927,59:2.0009953770482105,60:2.000297821058262,61:1.9996235841149783,62:1.9989715162223116,63:1.998340541772196,64:1.9977296536259739,65:1.9971379077520126,66:1.9965644183594748,67:1.996008353475506,68:1.9954689309194023,69:1.994945414632814,70:1.9944371113297732,71:1.9939433674345044,72:1.9934635662785831,73:1.9929971255321668,74:1.9925434948468204,75:1.9921021536898658,76:1.9916726093523491,77:1.9912543951146042,78:1.9908470685550523,79:1.9904502099893606,80:1.9900634210283845,81:1.9896863232444832,82:1.989318556936819,83:1.9889597799871794,84:1.9886096667986737,85:1.988267907310378,86:1.9879342060816723,87:1.9876082814405773,88:1.987289864690939,89:1.9869786993737681,90:1.9866745405784685,91:1.9863771543000652,92:1.9860863168388938,93:1.985801814239503,94:1.9855234417658303,95:1.9852510034099267,96:1.9849843114317696,97:1.9847231859278835,98:1.9844674544266925,99:1.9842169515086832,100:1.983971518449634,101:1.9837310028852815,102:1.9834952584959407,103:1.9832641447097104,104:1.9830375264229902,105:1.9828152737371547,106:1.9825972617102912,107:1.9823833701230178,108:1.9821734832574516,109:1.9819674896884745,110:1.9817652820865104,111:1.981566757031071,112:1.9813718148344008,113:1.9811803593745805,114:1.9809922979375068,115:1.9808075410672004,116:1.980626002423938,117:1.9804475986497296,118:1.9802722492407063,119:1.9800998764260065,120:1.979930405052777,121:1.9797637624769306,122:1.9795998784593314,123:1.97943868506709,124:1.979280116579683,125:1.9791241093996175,126:1.9789706019673938,127:1.978819534680521,128:1.9786708498163625,129:1.9785244914586055,130:1.9783804054271532,131:1.9782385392112587,132:1.9780988419057237,133:1.977961264150002,134:1.9778257580700531,135:1.9776922772228045,136:1.9775607765430836,137:1.977431212292894,138:1.9773035420129166,139:1.9771777244761224,140:1.9770537196433886,141:1.9769314886210223,142:1.97681099362009,143:1.9766921979174685,144:1.9765750658185368,145:1.9764595626214163,146:1.9763456545827007,147:1.9762333088845883,148:1.9761224936033637,149:1.9760131776791554,150:1.9759053308869141,151:1.9757989238085507,152:1.975693927806187,153:1.9755903149964589,154:1.9754880582258323,155:1.9753871310468787,156:1.9752875076954728,157:1.9751891630688665,158:1.9750920727046015,159:1.9749962127602256,160:1.9749015599937723,161:1.9748080917449764,162:1.9747157859171882,163:1.9746246209599583,164:1.9745345758522659,165:1.9744456300863593,166:1.9743577636521858,167:1.9742709570223849,168:1.974185191137821,169:1.9741004473936339,170:1.9740167076257829,171:1.9739339540980692,172:1.9738521694896138,173:1.9737713368827694,174:1.9736914397514562,175:1.9736124619498976,176:1.9735343877017435,177:1.9734572015895646,178:1.9733808885447033,179:1.9733054338374667,180:1.973230823067649,181:1.9731570421553692,182:1.9730840773322162,183:1.9730119151326795,184:1.9729405423858692,185:1.9728699462074992,186:1.9728001139921352,187:1.9727310334056907,188:1.9726626923781656,189:1.9725950790966158,190:1.9725281819983451,191:1.972461989764315,192:1.9723964913127596,193:1.9723316757930012,194:1.9722675325794565,195:1.972204051265833,196:1.9721412216594971,197:1.9720790337760221,198:1.972017477833896,199:1.9719565442493954,200:1.9718962236316093,201:1.9718365067776158,202:1.971777384667801,203:1.971718848461318,204:1.9716608894916787,205:1.971603499262479,206:1.9715466694432433,207:1.9714903918653972,208:1.9714346585183509,209:1.9713794615456992,210:1.9713247932415296,211:1.9712706460468354,212:1.9712170125460335,213:1.9711638854635767,214:1.971111257660664,215:1.9710591221320446,216:1.9710074720029072,217:1.97095630052586,218:1.9709056010779908,219:1.9708553671580111,220:1.9708055923834753,221:1.970756270488079,222:1.9707073953190282,223:1.9706589608344816,224:1.9706109611010594,225:1.9705633902914228,226:1.9705162426819125,227:1.9704695126502556,228:1.9704231946733297,229:1.9703772833249869,230:1.9703317732739336,231:1.9702866592816697,232:1.9702419362004757,233:1.9701975989714555,234:1.9701536426226303,235:1.9701100622670775,236:1.9700668531011214,237:1.9700240104025675,238:1.9699815295289818,239:1.969939405916016,240:1.9698976350757686,241:1.9698562125951948,242:1.9698151341345516,243:1.9697743954258797,244:1.9697339922715287,245:1.9696939205427133,246:1.9696541761781068,247:1.9696147551824699,248:1.9695756536253115,249:1.9695368676395828,250:1.9694983934204007,251:1.9694602272238055,252:1.9694223653655467,253:1.969384804219895,254:1.9693475402184863,255:1.9693105698491933,256:1.9692738896550193,257:1.9692374962330224,258:1.9692013862332616,259:1.9691655563577715,260:1.9691300033595551,261:1.9690947240416052,262:1.9690597152559448,263:1.9690249739026924,264:1.9689904969291443,265:1.968956281328883,266:1.9689223241409022,267:1.9688886224487527,268:1.9688551733797075,269:1.968821974103945,270:1.9687890218337525,271:1.968756313822743,272:1.968723847365097,273:1.9686916197948103,274:1.9686596284849691,275:1.9686278708470335,276:1.9685963443301415,277:1.968565046420423,278:1.9685339746403347,279:1.9685031265480044,280:1.9684724997365923,281:1.968442091833664,282:1.968411900500579,283:1.9683819234318907,284:1.9683521583547587,285:1.9683226030283762,286:1.9682932552434063,287:1.968264112821431,288:1.9682351736144144,289:1.9682064355041722,290:1.968177896401857,291:1.968149554247451,292:1.9681214070092705,293:1.9680934526834821,294:1.9680656892936232,295:1.968038114890141,296:1.9680107275499321,297:1.9679835253758984,298:1.967956506496507,299:1.9679296690653623,300:1.9679030112607847,301:1.9678765312853979,302:1.967850227365727,303:1.9678240977517998,304:1.967798140716761,305:1.9677723545564905,306:1.967746737589231,307:1.9677212881552217,308:1.967696004616341,309:1.967670885355754,310:1.9676459287775685,311:1.9676211333064957,312:1.9675964973875213,313:1.967572019485578,314:1.967547698085227,315:1.9675235316903468,316:1.9674995188238256,317:1.9674756580272583,318:1.9674519478606556,319:1.96742838690215,320:1.9674049737477135,321:1.9673817070108799,322:1.9673585853224684,323:1.9673356073303163,324:1.9673127716990173,325:1.9672900771096589,326:1.9672675222595717,327:1.9672451058620788,328:1.9672228266462515,329:1.9672006833566689,330:1.9671786747531816,331:1.9671567996106818,332:1.967135056718874,333:1.9671134448820529,334:1.9670919629188843,335:1.9670706096621893,336:1.967049383958733,337:1.9670282846690177,338:1.9670073106670771,339:1.9669864608402783,340:1.966965734089124,341:1.9669451293270586,342:1.9669246454802793,343:1.9669042814875488,344:1.9668840363000124,345:1.966863908881019,346:1.9668438982059417,347:1.966824003262006,348:1.9668042230481186,349:1.9667845565746986,350:1.9667650028635129,351:1.9667455609475144,352:1.9667262298706825,353:1.966707008687866,354:1.9666878964646288,355:1.9666688922770996,356:1.9666499952118222,357:1.9666312043656085,358:1.9666125188453965,359:1.9665939377681074,360:1.9665754602605063,361:1.9665570854590666,362:1.9665388125098342,363:1.966520640568296,364:1.9665025687992495,365:1.966484596376675,366:1.9664667224836099,367:1.9664489463120245,368:1.9664312670626998,369:1.9664136839451096,370:1.9663961961773,371:1.966378802985776,372:1.9663615036053859,373:1.9663442972792093,374:1.9663271832584475,375:1.9663101608023135,376:1.966293229177927,377:1.9662763876602067,378:1.96625963553177,379:1.9662429720828285,380:1.9662263966110878,381:1.9662099084216513,382:1.9661935068269203,383:1.9661771911465,384:1.9661609607071053,385:1.9661448148424667,386:1.9661287528932416,387:1.9661127742069229,388:1.9660968781377508,389:1.966081064046626,390:1.966065331301024,391:1.966049679274911,392:1.9660341073486605,393:1.9660186149089722,394:1.9660032013487905,395:1.9659878660672256,396:1.9659726084694753,397:1.9659574279667498,398:1.965942323976193,399:1.9659272959208094,400:1.9659123432293915,401:1.9658974653364458,402:1.9658826616821223,403:1.965867931712145,404:1.9658532748777406,405:1.9658386906355727,406:1.9658241784476738,407:1.965809737781378,408:1.9657953681092573,409:1.9657810689090576,410:1.9657668396636336,411:1.965752679860889,412:1.9657385889937122,413:1.9657245665599175,414:1.9657106120621863,415:1.9656967250080057,416:1.9656829049096134,417:1.9656691512839384,418:1.965655463652545,419:1.9656418415415793,420:1.9656282844817121,421:1.9656147920080864,422:1.9656013636602634,423:1.9655879989821707,424:1.9655746975220507,425:1.9655614588324102,426:1.965548282469968,427:1.9655351679956077,428:1.9655221149743287,429:1.9655091229751978,430:1.9654961915712998,431:1.9654833203396942,432:1.9654705088613673,433:1.9654577567211857,434:1.965445063507854,435:1.965432428813868,436:1.9654198522354724,437:1.9654073333726187,438:1.9653948718289207,439:1.9653824672116142,440:1.9653701191315152,441:1.9653578272029781,442:1.9653455910438589,443:1.9653334102754718,444:1.9653212845225516,445:1.9653092134132164,446:1.9652971965789277,447:1.9652852336544535,448:1.9652733242778317,449:1.9652614680903338,450:1.9652496647364275,451:1.9652379138637432,452:1.9652262151230366,453:1.9652145681681563,454:1.9652029726560083,455:1.9651914282465226,456:1.9651799346026202,457:1.9651684913901803,458:1.9651570982780076,459:1.9651457549378,460:1.9651344610441186,461:1.9651232162743548,462:1.9651120203087005,463:1.9651008728301178,464:1.9650897735243085,465:1.9650787220796855,466:1.9650677181873428,467:1.965056761541027,468:1.965045851837109,469:1.965034988774555,470:1.965024172054902,471:1.9650134013822251,472:1.9650026764631154,473:1.9649919970066518,474:1.9649813627243728,475:1.964970773330254,476:1.9649602285406784,477:1.9649497280744153,478:1.9649392716525922,479:1.964928858998672,480:1.9649184898384262,481:1.9649081638999137,482:1.9648978809134563,483:1.9648876406116125,484:1.9648774427291587,485:1.9648672870030628,486:1.9648571731724636,487:1.9648471009786466,488:1.9648370701650248,489:1.9648270804771135,490:1.9648171316625118,491:1.964807223470879,492:1.9647973556539153,493:1.9647875279653397,494:1.9647777401608706,495:1.9647679919982053,496:1.9647582832369994,497:1.9647486136388483,498:1.9647389829672652,499:1.9647293909876653,500:1.9647198374673442,501:1.9647103221754598,502:1.964700844883014,503:1.9646914053628335,504:1.9646820033895525,505:1.964672638739595,506:1.9646633111911553,507:1.9646540205241838,508:1.9646447665203655,509:1.964635548963106,510:1.9646263676375137,511:1.9646172223303833,512:1.9646081128301776,513:1.9645990389270147,514:1.9645900004126484,515:1.9645809970804544,516:1.9645720287254127,517:1.9645630951440949,518:1.964554196134645,519:1.9645453314967691,520:1.9645365010317148,521:1.9645277045422602,522:1.9645189418326983,523:1.964510212708822,524:1.964501516977911,525:1.964492854448715,526:1.9644842249314425,527:1.9644756282377454,528:1.9644670641807058,529:1.964458532574823,530:1.9644500332359982,531:1.9644415659815229,532:1.9644331306300662,533:1.9644247270016604,534:1.964416354917689,535:1.9644080142008735,536:1.9643997046752626,537:1.9643914261662165,538:1.9643831785003991,539:1.9643749615057613,540:1.9643667750115323,541:1.964358618848207,542:1.9643504928475335,543:1.964342396842502,544:1.9643343306673333,545:1.9643262941574684,546:1.9643182871495555,547:1.9643103094814403,548:1.964302360992155,549:1.9642944415219068,550:1.9642865509120675,551:1.9642786890051633,552:1.964270855644863,553:1.9642630506759702,554:1.9642552739444101,555:1.9642475252972216,556:1.9642398045825453,557:1.9642321116496164,558:1.9642244463487513,559:1.9642168085313412,560:1.9642091980498402,561:1.9642016147577568,562:1.964194058509645,563:1.9641865291610932,564:1.9641790265687171,565:1.964171550590149,566:1.9641641010840303,567:1.9641566779100006,568:1.9641492809286911,569:1.964141910001714,570:1.964134564991655,571:1.9641272457620647,572:1.9641199521774493,573:1.964112684103263,574:1.9641054414058998,575:1.9640982239526847,576:1.964091031611867,577:1.9640838642526093,578:1.964076721744983,579:1.9640696039599586,580:1.9640625107693983,581:1.9640554420460483,582:1.9640483976635308,583:1.9640413774963374,584:1.964034381419821,585:1.9640274093101877,586:1.9640204610444916,587:1.9640135365006257,588:1.9640066355573154,589:1.9639997580941106,590:1.963992903991381,591:1.9639860731303063,592:1.9639792653928712,593:1.9639724806618581,594:1.9639657188208401,595:1.9639589797541745,596:1.963952263346997,597:1.963945569485213,598:1.963938898055494,599:1.9639322489452695,600:1.96392562204272,601:1.9639190172367733,602:1.963912434417095,603:1.963905873474085,604:1.9638993342988706,605:1.9638928167832999,606:1.9638863208199362,607:1.9638798463020526,608:1.9638733931236256,609:1.9638669611793291,610:1.9638605503645292,611:1.9638541605752786,612:1.9638477917083106,613:1.963841443661033,614:1.9638351163315244,615:1.9638288096185263,616:1.9638225234214404,617:1.9638162576403206,618:1.96381001217587,619:1.9638037869294331,620:1.9637975818029945,621:1.9637913966991682,622:1.9637852315211985,623:1.9637790861729507,624:1.963772960558908,625:1.9637668545841658,626:1.9637607681544267,627:1.963754701175997,628:1.96374865355578,629:1.9637426252012729,630:1.9637366160205605,631:1.9637306259223126,632:1.9637246548157765,633:1.9637187026107747,634:1.9637127692177012,635:1.9637068545475131,636:1.9637009585117295,637:1.9636950810224274,638:1.9636892219922344,639:1.9636833813343266,640:1.963677558962424,641:1.9636717547907854,642:1.9636659687342057,643:1.96366020070801,644:1.9636544506280507,645:1.9636487184107032,646:1.9636430039728607,647:1.963637307231933,648:1.9636316281058388,649:1.9636259665130043,650:1.9636203223723585,651:1.9636146956033296,652:1.9636090861258415,653:1.9636034938603082,654:1.963597918727633,655:1.9635923606492014,656:1.9635868195468806,657:1.9635812953430134,658:1.9635757879604159,659:1.9635702973223736,660:1.9635648233526377,661:1.9635593659754214,662:1.9635539251153973,663:1.9635485006976923,664:1.9635430926478856,665:1.9635377008920054,666:1.9635323253565247,667:1.9635269659683576,668:1.9635216226548569,669:1.963516295343811,670:1.9635109839634397,671:1.9635056884423918,672:1.9635004087097414,673:1.9634951446949849,674:1.9634898963280374,675:1.9634846635392311,676:1.9634794462593101,677:1.9634742444194289,678:1.9634690579511493,679:1.9634638867864362,680:1.9634587308576554,681:1.9634535900975714,682:1.9634484644393435,683:1.9634433538165224,684:1.963438258163049,685:1.96343317741325,686:1.963428111501836,687:1.9634230603638985,688:1.9634180239349066,689:1.9634130021507055,690:1.9634079949475116,691:1.9634030022619122,692:1.9633980240308617,693:1.9633930601916791,694:1.963388110682045,695:1.9633831754399986,696:1.963378254403937,697:1.9633733475126116,698:1.9633684547051236,699:1.9633635759209254,700:1.9633587110998145,701:1.9633538601819331,702:1.9633490231077657,703:1.9633441998181338,704:1.9633393902541987,705:1.9633345943574538,706:1.9633298120697256,707:1.96332504333317,708:1.9633202880902698,709:1.9633155462838343,710:1.963310817856994,711:1.9633061027532,712:1.9633014009162226,713:1.9632967122901475,714:1.9632920368193745,715:1.963287374448614,716:1.9632827251228866,717:1.9632780887875207,718:1.9632734653881478,719:1.963268854870705,720:1.963264257181428,721:1.9632596722668525,722:1.9632551000738105,723:1.9632505405494287,724:1.963245993641126,725:1.963241459296613,726:1.9632369374638876,727:1.963232428091235,728:1.9632279311272245,729:1.963223446520709,730:1.9632189742208208,731:1.963214514176972,732:1.9632100663388516,733:1.9632056306564227,734:1.9632012070799227,735:1.9631967955598593,736:1.9631923960470097,737:1.9631880084924196,738:1.9631836328473993,739:1.9631792690635235,740:1.9631749170926298,741:1.9631705768868148,742:1.9631662483984351,743:1.9631619315801037,744:1.9631576263846882,745:1.9631533327653103,746:1.9631490506753435,747:1.963144780068411,748:1.963140520898385,749:1.9631362731193833,750:1.9631320366857699,751:1.9631278115521522,752:1.9631235976733785,753:1.9631193950045382,754:1.963115203500959,755:1.963111023118206,756:1.9631068538120793,757:1.963102695538613,758:1.963098548254074,759:1.963094411914959,760:1.963090286477995,761:1.9630861719001376,762:1.9630820681385661,763:1.963077975150687,764:1.963073892894129,765:1.9630698213267435,766:1.9630657604066017,767:1.9630617100919938,768:1.9630576703414275,769:1.9630536411136277,770:1.9630496223675324,771:1.963045614062295,772:1.963041616157278,773:1.9630376286120574,774:1.9630336513864166,775:1.9630296844403485,776:1.9630257277340504,777:1.9630217812279265,778:1.9630178448825841,779:1.963013918658834,780:1.9630100025176869,781:1.9630060964203544,782:1.9630022003282468,783:1.9629983142029712,784:1.9629944380063318,785:1.962990571700327,786:1.9629867152471494,787:1.9629828686091835,788:1.9629790317490055,789:1.962975204629381,790:1.9629713872132657,791:1.9629675794638015,792:1.962963781344317,793:1.9629599928183272,794:1.9629562138495296,795:1.9629524444018054,796:1.9629486844392179,797:1.9629449339260105,798:1.9629411928266058,799:1.962937461105606,800:1.9629337387277892,801:1.9629300256581104,802:1.9629263218616995,803:1.9629226273038602,804:1.9629189419500692,805:1.9629152657659752,806:1.9629115987173975,807:1.9629079407703247,808:1.9629042918909145,809:1.9629006520454917,810:1.9628970212005485,811:1.9628933993227415,812:1.9628897863788926,813:1.9628861823359869,814:1.962882587161172,815:1.9628790008217571,816:1.9628754232852115,817:1.9628718545191641,818:1.9628682944914029,819:1.9628647431698727,820:1.9628612005226753,821:1.9628576665180681,822:1.9628541411244633,823:1.9628506243104265,824:1.962847116044676,825:1.962843616296083,826:1.9628401250336684,827:1.9628366422266041,828:1.9628331678442101,829:1.962829701855956,830:1.9628262442314577,831:1.9628227949404782,832:1.9628193539529253,833:1.962815921238852,834:1.9628124967684557,835:1.962809080512076,836:1.9628056724401943,837:1.962802272523434,838:1.9627988807325591,839:1.9627954970384724,840:1.9627921214122162,841:1.96278875382497,842:1.9627853942480507,843:1.9627820426529121,844:1.9627786990111424,845:1.9627753632944653,846:1.962772035474738,847:1.962768715523951,848:1.962765403414227,849:1.9627620991178198,850:1.9627588026071152,851:1.9627555138546275,852:1.9627522328330012,853:1.962748959515009,854:1.962745693873551,855:1.9627424358816548,856:1.9627391855124732,857:1.9627359427392859,858:1.9627327075354966,859:1.9627294798746329,860:1.9627262597303463,861:1.9627230470764099,862:1.962719841886719,863:1.962716644135291,864:1.9627134537962623,865:1.9627102708438906,866:1.9627070952525512,867:1.9627039269967388,868:1.9627007660510651,869:1.9626976123902597,870:1.9626944659891674,871:1.9626913268227497,872:1.9626881948660826,873:1.9626850700943568,874:1.9626819524828756,875:1.9626788420070573,876:1.962675738642431,877:1.9626726423646375,878:1.9626695531494305,879:1.962666470972672,880:1.9626633958103352,881:1.9626603276385024,882:1.962657266433364,883:1.962654212171219,884:1.962651164828473,885:1.962648124381639,886:1.962645090807336,887:1.9626420640822897,888:1.9626390441833281,889:1.9626360310873863,890:1.9626330247715016,891:1.962630025212815,892:1.962627032388571,893:1.9626240462761142,894:1.9626210668528927,895:1.9626180940964544,896:1.9626151279844477,897:1.9626121684946207,898:1.9626092156048216,899:1.9626062692929966,900:1.9626033295371899,901:1.9626003963155434,902:1.9625974696062964,903:1.9625945493877848,904:1.9625916356384394,905:1.9625887283367882,906:1.9625858274614525,907:1.962582932991149,908:1.9625800449046875,909:1.9625771631809725,910:1.962574287799,911:1.9625714187378587,912:1.9625685559767294,913:1.9625656994948841,914:1.9625628492716856,915:1.9625600052865868,916:1.9625571675191313,917:1.9625543359489512,918:1.9625515105557676,919:1.9625486913193901,920:1.9625458782197165,921:1.9625430712367309,922:1.962540270350506,923:1.9625374755412,924:1.962534686789057,925:1.962531904074407,926:1.9625291273776646,927:1.96252635667933,928:1.9625235919599864,929:1.962520833200302,930:1.9625180803810265,931:1.962515333482994,932:1.9625125924871198,933:1.9625098573744026,934:1.9625071281259212,935:1.962504404722836,936:1.9625016871463874,937:1.9624989753778976,938:1.9624962693987664,939:1.9624935691904748,940:1.9624908747345817,941:1.9624881860127243,942:1.9624855030066184,943:1.9624828256980582,944:1.962480154068913,945:1.962477488101131,946:1.962474827776736,947:1.9624721730778274,948:1.962469523986581,949:1.9624668804852476,950:1.9624642425561525,951:1.962461610181696,952:1.9624589833443515,953:1.9624563620266673,954:1.9624537462112641,955:1.9624511358808356,956:1.9624485310181483,957:1.9624459316060407,958:1.9624433376274224,959:1.9624407490652758,960:1.9624381659026522,961:1.9624355881226763,962:1.962433015708541,963:1.9624304486435091,964:1.9624278869109137,965:1.9624253304941575,966:1.9624227793767104,967:1.9624202335421121,968:1.9624176929739703,969:1.9624151576559599,970:1.962412627571823,971:1.9624101027053702,972:1.9624075830404768,973:1.9624050685610865,974:1.962402559251207,975:1.9624000550949139,976:1.9623975560763454,977:1.962395062179708,978:1.9623925733892695,979:1.9623900896893647,980:1.9623876110643914,981:1.9623851374988106,982:1.9623826689771475,983:1.96238020548399,984:1.9623777470039887,985:1.962375293521857,986:1.9623728450223694,987:1.9623704014903631,988:1.9623679629107367,989:1.9623655292684494,990:1.9623631005485223,991:1.9623606767360353,992:1.9623582578161303,993:1.9623558437740083,994:1.9623534345949294,995:1.9623510302642144,996:1.9623486307672415,997:1.9623462360894495,998:1.962343846216334,999:1.962341461133449,1000:1.9623390808264078,1001:1.9623367052808791,1002:1.9623343344825908,1003:1.962331968417326,1004:1.9623296070709262,1005:1.9623272504292881,1006:1.9623248984783654,1007:1.9623225512041673,1008:1.9623202085927578,1009:1.9623178706302578,1010:1.9623155373028418,1011:1.9623132085967403,1012:1.962310884498237,1013:1.962308564993671,1014:1.962306250069434,1015:1.9623039397119733,1016:1.9623016339077874,1017:1.9622993326434304,1018:1.962297035905507,1019:1.9622947436806755,1020:1.9622924559556474,1021:1.962290172717185,1022:1.9622878939521027,1023:1.9622856196472673,1024:1.962283349789597,infinity:1.96},m=128,_=1e9,q=128,D={bmf:"bmf"};var H1=!!globalThis.Bun||!!globalThis.process?.versions?.bun,J1=!!globalThis.Deno,K1=globalThis.process?.release?.name==="node",Q1=globalThis.navigator?.userAgent==="Cloudflare-Workers",Y1=!!globalThis.navigator,P=(()=>{if(H1)return T.bun;if(J1)return T.deno;if(K1)return T.node;if(Q1)return T.workerd;if(Y1)return T.browser;return"unknown"})();var g=(()=>{return{unknown:()=>()=>Math.round(1e6*performance.now()),browser:()=>{try{return $.agent.monotonicNow(),()=>Math.round(1e6*$.agent.monotonicNow())}catch{}return()=>Math.round(1e6*performance.now())},node:()=>()=>Number(process.hrtime.bigint()),deno:()=>()=>Math.round(1e6*performance.now()),bun:()=>Bun.nanoseconds}[P]()})();async function N1(w,L=I,N=I,E={}){if(![Function,U].includes(w.constructor))throw new TypeError(`expected function, got ${w.constructor.name}`);if(![Function,U].includes(L.constructor))throw new TypeError(`expected function, got ${L.constructor.name}`);if(![Function,U].includes(N.constructor))throw new TypeError(`expected function, got ${N.constructor.name}`);if(Object.prototype.toString.call(E).slice(8,-1)!=="Object")throw new TypeError(`expected object, got ${E.constructor.name}`);E=j({async:U===w.constructor,time:_,samples:q,warmup:!0},E);const M=U===L.constructor,S=U===N.constructor,V=new(!E.async?Function:U)("$fn","$before","$after","$now",` | ||
@@ -29,3 +29,3 @@ ${!E.warmup?"":` | ||
return samples; | ||
`),W=!E.async?V(w,L,N,g):await V(w,L,N,g);return c1(W)}var U=(async()=>{}).constructor,a=(()=>{return{unknown:()=>"",browser:()=>"",node:()=>process.version,deno:()=>Deno.version.deno,bun:()=>process.versions.bun}[P]()})(),e=(()=>{return{unknown:()=>"unknown",browser:()=>"unknown",node:()=>`${process.arch}-${process.platform}`,deno:()=>Deno.build.target,bun:()=>`${process.arch}-${process.platform}`}[P]()})(),o=await(async()=>{return await{unknown:()=>"unknown",browser:()=>"unknown",node:async()=>(await Promise.resolve().then(() => (z(),R)))?.cpus?.()?.[0]?.model,deno:async()=>(await Promise.resolve().then(() => (z(),R)))?.cpus?.()?.[0]?.model,bun:async()=>(await Promise.resolve().then(() => (z(),R)))?.cpus?.()?.[0]?.model}[P]()})(),s=(()=>{return{unknown:()=>!1,browser:()=>!0,node:()=>!!process.env.NO_COLOR,deno:()=>Deno.noColor,bun:()=>!!process.env.NO_COLOR}[P]()})(),w1=await(async()=>{return await{unknown:()=>()=>{},browser:()=>()=>{},node:async()=>(await import("node:fs")).writeFileSync,deno:()=>Deno.writeTextFileSync,bun:async()=>(await import("node:fs")).writeFileSync}[P]()})(),$1=(w)=>{return w.benchmarks.map(({name:L,stats:N})=>{return{[L]:{latency:{value:N?.avg,lower_value:N?.min,upper_value:N?.max},throughput:{value:N?.iter}}}}).reduce((L,N)=>Object.assign(L,N),{})},h=(w,L={})=>{if(![Function,U].includes(w.constructor))throw new TypeError(`expected function, got ${w.constructor.name}`);if(Object.prototype.toString.call(L).slice(8,-1)!=="Object")throw new TypeError(`expected object, got ${L.constructor.name}`);if(L.before!=null&&![Function,U].includes(L.before.constructor))throw new TypeError(`expected function as 'before' option, got ${L.before.constructor.name}`);if(L.after!=null&&![Function,U].includes(L.after.constructor))throw new TypeError(`expected function as 'after' option, got ${L.after.constructor.name}`)},L1=(w,L)=>{w.samples=L.samples??w.samples,w.time=L.time??w.time,w.warmup=L.warmup??w.warmup},j=(w,L)=>{const N=structuredClone(w);for(let E in L)if(Object.prototype.toString.call(w[E]).slice(8,-1)==="Object")if(Object.prototype.toString.call(w[E]).slice(8,-1)==="Object")N[E]=j(w[E],L[E]);else N[E]=L[E];else N[E]=L[E];return N},H=(w)=>{if(typeof w!=="number")throw new TypeError(`expected number, got ${w.constructor.name}`);if(w===0||Number.isNaN(w))throw new RangeError(`Invalid dividend: ${w}`);return w},G=(w,L)=>{const N=(w.length-1)*L,E=Math.floor(N);if(w[E+1]!=null)return w[E]+(N-E)*(w[E+1]-w[E]);return w[E]},c1=(w)=>{if(!Array.isArray(w))throw new TypeError(`expected array, got ${w.constructor.name}`);if(Array.isArray(w)&&w.length===0)throw new Error("expected non-empty array, got empty array");w.sort((Y,C)=>Y-C);const L=w.reduce((Y,C)=>Y+C,0),N=L/w.length,E=w.reduce((Y,C)=>Y+(C-N)**2,0)/H(w.length-1),M=Math.sqrt(E),S=M/Math.sqrt(w.length),V=u[(w.length-1||1).toString()]||u.infinity,J=S*V/H(N)*100;return{samples:w.length,min:w[0],max:w[w.length-1],p50:G(w,0.5),p75:G(w,0.75),p99:G(w,0.99),p995:G(w,0.995),avg:N,iter:1e9*w.length/H(L),vr:E,sd:M,rmoe:J,ss:w.length>=m}};var p1=()=>{let w;try{w=console.log}catch{w=print}if(typeof w!=="function")throw new TypeError(`logger is not a function: ${typeof w}`);return w},E1=p1();var y={};c(y,{yellow:()=>{{return F}},white:()=>{{return Lw}},underline:()=>{{return a1}},strikethrough:()=>{{return s1}},reset:()=>{{return m1}},red:()=>{{return B}},magenta:()=>{{return b}},italic:()=>{{return t1}},inverse:()=>{{return e1}},hidden:()=>{{return o1}},green:()=>{{return $w}},gray:()=>{{return X}},dim:()=>{{return n1}},cyan:()=>{{return d}},bold:()=>{{return v}},blue:()=>{{return A}},black:()=>{{return ww}},bgYellow:()=>{{return Sw}},bgWhite:()=>{{return Xw}},bgRed:()=>{{return Ew}},bgMagenta:()=>{{return Vw}},bgGreen:()=>{{return Mw}},bgCyan:()=>{{return Uw}},bgBlue:()=>{{return Ow}},bgBlack:()=>{{return Nw}}});var O=function(w,L){const N=new RegExp(`\\x1b\\[${L}m`,"g"),E=`\x1B[${w}m`,M=`\x1B[${L}m`;return(S,V)=>{if(!S||V==null)return V;return V=V.toString(),`${E}${V.includes(M)?V.replace(N,M+E):V}${M}`}},m1=O(0,0),v=O(1,22),n1=O(2,22),t1=O(3,23),a1=O(4,24),e1=O(7,27),o1=O(8,28),s1=O(9,29),ww=O(30,39),B=O(31,39),$w=O(32,39),F=O(33,39),A=O(34,39),b=O(35,39),d=O(36,39),Lw=O(37,39),X=O(90,39),Nw=O(40,49),Ew=O(41,49),Mw=O(42,49),Sw=O(43,49),Ow=O(44,49),Vw=O(45,49),Uw=O(46,49),Xw=O(47,49);function K(w){if(w<1)return`${Number((w*1000).toFixed(0)).toString()} ps`;if(w<100)return`${Number(w.toFixed(2)).toString()} ns`;if(w<1000)return`${Number(w.toFixed(0)).toString()} ns`;if(w<1e5)return`${Number(w.toFixed(0)).toLocaleString("en-us").replace(",","'")} ns`;if(w<1e6)return`${Number((w/1000).toFixed(0)).toString()} \xB5s`;if(w<1e8)return`${Number((w/1000).toFixed(0)).toLocaleString("en-us").replace(",","'")} \xB5s`;if(w<1e9)return`${Number((w/1e6).toFixed(0)).toString()} ms`;if(w<100000000000)return`${Number((w/1e6).toFixed(0)).toLocaleString("en-us").replace(",","'")} ms`;if(w<1000000000000)return`${Number((w/1e9).toFixed(0)).toString()} s`;if(w<3600000000000)return`${Number((w/60000000000).toFixed(0)).toString()} m`;return`${Number((w/3600000000000).toFixed(2)).toLocaleString("en-us",{notation:"compact"})} h`}function M1(w){return`${Number(w.toFixed(1)).toLocaleString("en-us").replaceAll(",","'")}`}function l(w){return`${Number(w.toFixed(2)).toLocaleString("en-us").replaceAll(",","'")} %`}function k(w){return`${Number(w.toFixed(2)).toLocaleString("en-us").replaceAll(",","'")}`}function S1(w){let L=9;for(let N of w)if(L<N.length)L=N.length;return 2+L}function i({size:w,avg:L=!0,iter:N=!0,rmoe:E=!0,min_max:M=!0,percentiles:S=!0}){return`${"-".repeat(w+14*L+14*N+14*E+24*M)}${!S?"":` ${"-".repeat(39)}`}`}function O1(w,L,{size:N,colors:E=!0}){return`${w.padEnd(N," ")}${B(E,"error")}: ${L.message}${L.stack?`\n${X(E,L.stack)}`:""}`}function V1({colors:w=!0}={}){return X(w,` | ||
`),W=!E.async?V(w,L,N,g):await V(w,L,N,g);return c1(W)}var U=(async()=>{}).constructor,a=(()=>{return{unknown:()=>"",browser:()=>"",node:()=>process.version,deno:()=>Deno.version.deno,bun:()=>process.versions.bun}[P]()})(),e=(()=>{return{unknown:()=>"unknown",browser:()=>"unknown",node:()=>`${process.arch}-${process.platform}`,deno:()=>Deno.build.target,bun:()=>`${process.arch}-${process.platform}`}[P]()})(),o=await(async()=>{return await{unknown:()=>"unknown",browser:()=>"unknown",node:async()=>(await Promise.resolve().then(() => (z(),R)))?.cpus?.()?.[0]?.model,deno:async()=>(await Promise.resolve().then(() => (z(),R)))?.cpus?.()?.[0]?.model,bun:async()=>(await Promise.resolve().then(() => (z(),R)))?.cpus?.()?.[0]?.model}[P]()})(),s=(()=>{return{unknown:()=>!1,browser:()=>!0,node:()=>!!process.env.NO_COLOR,deno:()=>Deno.noColor,bun:()=>!!process.env.NO_COLOR}[P]()})(),w1=await(async()=>{return await{unknown:()=>()=>{},browser:()=>()=>{},node:async()=>(await import("node:fs")).writeFileSync,deno:()=>Deno.writeTextFileSync,bun:async()=>(await import("node:fs")).writeFileSync}[P]()})(),$1=(w)=>{return w.benchmarks.map(({name:L,stats:N})=>{return{[L]:{latency:{value:N?.avg,lower_value:N?.min,upper_value:N?.max},throughput:{value:N?.iter}}}}).reduce((L,N)=>Object.assign(L,N),{})},h=(w,L={})=>{if(![Function,U].includes(w.constructor))throw new TypeError(`expected function, got ${w.constructor.name}`);if(Object.prototype.toString.call(L).slice(8,-1)!=="Object")throw new TypeError(`expected object, got ${L.constructor.name}`);if(L.before!=null&&![Function,U].includes(L.before.constructor))throw new TypeError(`expected function as 'before' option, got ${L.before.constructor.name}`);if(L.after!=null&&![Function,U].includes(L.after.constructor))throw new TypeError(`expected function as 'after' option, got ${L.after.constructor.name}`)},L1=(w,L)=>{w.samples=L.samples??w.samples,w.time=L.time??w.time,w.warmup=L.warmup??w.warmup},j=(w,L)=>{const N=structuredClone(w);for(let E in L)if(Object.prototype.toString.call(w[E]).slice(8,-1)==="Object")if(Object.prototype.toString.call(w[E]).slice(8,-1)==="Object")N[E]=j(w[E],L[E]);else N[E]=L[E];else N[E]=L[E];return N},H=(w)=>{if(typeof w!=="number")throw new TypeError(`expected number, got ${w.constructor.name}`);if(w===0||Number.isNaN(w))throw new RangeError(`Invalid dividend: ${w}`);return w},G=(w,L)=>{const N=(w.length-1)*L,E=Math.floor(N);if(w[E+1]!=null)return w[E]+(N-E)*(w[E+1]-w[E]);return w[E]},c1=(w)=>{if(!Array.isArray(w))throw new TypeError(`expected array, got ${w.constructor.name}`);if(Array.isArray(w)&&w.length===0)throw new Error("expected non-empty array, got empty array");w.sort((Y,C)=>Y-C);const L=w.reduce((Y,C)=>Y+C,0),N=L/w.length,E=w.reduce((Y,C)=>Y+(C-N)**2,0)/H(w.length-1),M=Math.sqrt(E),S=M/Math.sqrt(w.length),V=u[(w.length-1||1).toString()]||u.infinity,J=S*V/H(N)*100;return{samples:w.length,min:w[0],max:w[w.length-1],p50:G(w,0.5),p75:G(w,0.75),p99:G(w,0.99),p995:G(w,0.995),avg:N,iter:1e9*w.length/H(L),vr:E,sd:M,rmoe:J,ss:w.length>=m}};var p1=()=>{let w;try{w=console.log}catch{w=print}if(typeof w!=="function")throw new TypeError(`logger is not a function: ${typeof w}`);return w},E1=p1();var y={};c(y,{yellow:()=>F,white:()=>Lw,underline:()=>a1,strikethrough:()=>s1,reset:()=>m1,red:()=>B,magenta:()=>b,italic:()=>t1,inverse:()=>e1,hidden:()=>o1,green:()=>$w,gray:()=>X,dim:()=>n1,cyan:()=>d,bold:()=>v,blue:()=>A,black:()=>ww,bgYellow:()=>Sw,bgWhite:()=>Xw,bgRed:()=>Ew,bgMagenta:()=>Vw,bgGreen:()=>Mw,bgCyan:()=>Uw,bgBlue:()=>Ow,bgBlack:()=>Nw});var O=function(w,L){const N=new RegExp(`\\x1b\\[${L}m`,"g"),E=`\x1B[${w}m`,M=`\x1B[${L}m`;return(S,V)=>{if(!S||V==null)return V;return V=V.toString(),`${E}${V.includes(M)?V.replace(N,M+E):V}${M}`}},m1=O(0,0),v=O(1,22),n1=O(2,22),t1=O(3,23),a1=O(4,24),e1=O(7,27),o1=O(8,28),s1=O(9,29),ww=O(30,39),B=O(31,39),$w=O(32,39),F=O(33,39),A=O(34,39),b=O(35,39),d=O(36,39),Lw=O(37,39),X=O(90,39),Nw=O(40,49),Ew=O(41,49),Mw=O(42,49),Sw=O(43,49),Ow=O(44,49),Vw=O(45,49),Uw=O(46,49),Xw=O(47,49);function K(w){if(w<1)return`${Number((w*1000).toFixed(0)).toString()} ps`;if(w<100)return`${Number(w.toFixed(2)).toString()} ns`;if(w<1000)return`${Number(w.toFixed(0)).toString()} ns`;if(w<1e5)return`${Number(w.toFixed(0)).toLocaleString("en-us").replace(",","'")} ns`;if(w<1e6)return`${Number((w/1000).toFixed(0)).toString()} \xB5s`;if(w<1e8)return`${Number((w/1000).toFixed(0)).toLocaleString("en-us").replace(",","'")} \xB5s`;if(w<1e9)return`${Number((w/1e6).toFixed(0)).toString()} ms`;if(w<100000000000)return`${Number((w/1e6).toFixed(0)).toLocaleString("en-us").replace(",","'")} ms`;if(w<1000000000000)return`${Number((w/1e9).toFixed(0)).toString()} s`;if(w<3600000000000)return`${Number((w/60000000000).toFixed(0)).toString()} m`;return`${Number((w/3600000000000).toFixed(2)).toLocaleString("en-us",{notation:"compact"})} h`}function M1(w){return`${Number(w.toFixed(1)).toLocaleString("en-us").replaceAll(",","'")}`}function l(w){return`${Number(w.toFixed(2)).toLocaleString("en-us").replaceAll(",","'")} %`}function k(w){return`${Number(w.toFixed(2)).toLocaleString("en-us").replaceAll(",","'")}`}function S1(w){let L=9;for(let N of w)if(L<N.length)L=N.length;return 2+L}function i({size:w,avg:L=!0,iter:N=!0,rmoe:E=!0,min_max:M=!0,percentiles:S=!0}){return`${"-".repeat(w+14*L+14*N+14*E+24*M)}${!S?"":` ${"-".repeat(39)}`}`}function O1(w,L,{size:N,colors:E=!0}){return`${w.padEnd(N," ")}${B(E,"error")}: ${L.message}${L.stack?`\n${X(E,L.stack)}`:""}`}function V1({colors:w=!0}={}){return X(w,` | ||
1 ps = 1 picosecond = 1e-12s | ||
@@ -37,2 +37,2 @@ 1 ns = 1 nanosecond = 1'000ps = 1e-9s | ||
//# debugId=0BC9F3BBA91ABC6164756e2164756e21 | ||
//# debugId=0F18D3A64D65D46E64756E2164756E21 |
@@ -6,4 +6,4 @@ { | ||
"license": "MIT", | ||
"version": "0.4.15", | ||
"packageManager": "bun@1.1.13", | ||
"version": "0.4.16", | ||
"packageManager": "bun@1.1.18", | ||
"types": "./src/index.d.ts", | ||
@@ -48,16 +48,12 @@ "main": "./src/index.js", | ||
"test:deno": "deno run -A tests/test.js && deno run -A tests/test.ts", | ||
"test:bun": "bun run tests/test.js && bun run tests/test.ts", | ||
"release": "release-it" | ||
"test:bun": "bun run tests/test.js && bun run tests/test.ts" | ||
}, | ||
"devDependencies": { | ||
"@biomejs/biome": "^1.8.1", | ||
"@biomejs/biome": "^1.8.3", | ||
"@commitlint/cli": "^19.3.0", | ||
"@commitlint/config-conventional": "^19.2.2", | ||
"@release-it/bumper": "^6.0.1", | ||
"@release-it/keep-a-changelog": "^5.0.0", | ||
"@types/bun": "^1.1.4", | ||
"@types/bun": "^1.1.6", | ||
"husky": "^9.0.11", | ||
"lint-staged": "^15.2.7", | ||
"prettier": "^3.3.2", | ||
"release-it": "^17.3.0" | ||
"prettier": "^3.3.2" | ||
}, | ||
@@ -64,0 +60,0 @@ "peerDependencies": { |
@@ -9,3 +9,2 @@ <h1 align=center>tatami-ng</h1> | ||
[![Npm Version](https://badgen.net/npm/v/tatami-ng?icon=npm)](https://www.npmjs.com/package/tatami-ng) | ||
[![Npm Weekly Downloads](https://badgen.net/npm/dw/tatami-ng?icon=npm)](https://www.npmjs.com/package/tatami-ng) | ||
[![JSR Version](https://jsr.io/badges/@poolifier/tatami-ng)](https://jsr.io/@poolifier/tatami-ng) | ||
@@ -15,4 +14,2 @@ [![CI Workflow](https://github.com/poolifier/tatami-ng/actions/workflows/ci.yml/badge.svg)](https://github.com/poolifier/tatami-ng/actions/workflows/ci.yml) | ||
<!-- [![No Dependencies](<https://badgen.net/static/dependencies/no dependencies/green>)](<https://badgen.net/static/dependencies/no dependencies/green>) --> | ||
</div> | ||
@@ -73,2 +70,4 @@ | ||
<!-- x-release-please-start-version --> | ||
```js | ||
@@ -78,6 +77,8 @@ <script type="module"> | ||
... | ||
} from 'https://cdn.jsdelivr.net/npm/tatami-ng@0.4.15/dist/browser/index.js' | ||
} from 'https://cdn.jsdelivr.net/npm/tatami-ng@0.4.16/dist/browser/index.js' | ||
</script> | ||
``` | ||
<!-- x-release-please-end --> | ||
## Example | ||
@@ -84,0 +85,0 @@ |
@@ -7,3 +7,3 @@ import { | ||
tatamiNgGroup, | ||
} from './constants.js'; | ||
} from './constants.js' | ||
import { | ||
@@ -21,11 +21,11 @@ os, | ||
writeFileSync, | ||
} from './lib.js'; | ||
import { logger } from './logger.js'; | ||
import * as clr from './reporter/clr.js'; | ||
import * as table from './reporter/table.js'; | ||
import { runtime } from './runtime.js'; | ||
} from './lib.js' | ||
import { logger } from './logger.js' | ||
import * as clr from './reporter/clr.js' | ||
import * as table from './reporter/table.js' | ||
import { runtime } from './runtime.js' | ||
let groupName = null; | ||
const groups = new Map(); | ||
const benchmarks = []; | ||
let groupName = null | ||
const groups = new Map() | ||
const benchmarks = [] | ||
@@ -55,19 +55,19 @@ /** | ||
throw new TypeError( | ||
`expected string, object or function, got ${name.constructor.name}`, | ||
); | ||
`expected string, object or function, got ${name.constructor.name}` | ||
) | ||
if ([Function, AsyncFunction].includes(name.constructor)) { | ||
// biome-ignore lint/style/noParameterAssign: <explanation> | ||
cb = name; | ||
cb = name | ||
} | ||
if (![Function, AsyncFunction].includes(cb.constructor)) | ||
throw new TypeError(`expected function, got ${cb.constructor.name}`); | ||
throw new TypeError(`expected function, got ${cb.constructor.name}`) | ||
if (Object.prototype.toString.call(name).slice(8, -1) === 'Object') { | ||
if (name.name != null && 'string' !== typeof name.name) | ||
throw new TypeError( | ||
`expected string as 'name' option, got ${name.name.constructor.name}`, | ||
); | ||
`expected string as 'name' option, got ${name.name.constructor.name}` | ||
) | ||
if (name.summary != null && 'boolean' !== typeof name.summary) | ||
throw new TypeError( | ||
`expected boolean as 'summary' option, got ${name.summary.constructor.name}`, | ||
); | ||
`expected boolean as 'summary' option, got ${name.summary.constructor.name}` | ||
) | ||
if ( | ||
@@ -78,4 +78,4 @@ name.before != null && | ||
throw new TypeError( | ||
`expected function as 'before' option, got ${name.before.constructor.name}`, | ||
); | ||
`expected function as 'before' option, got ${name.before.constructor.name}` | ||
) | ||
if ( | ||
@@ -86,4 +86,4 @@ name.after != null && | ||
throw new TypeError( | ||
`expected function as 'after' option, got ${name.after.constructor.name}`, | ||
); | ||
`expected function as 'after' option, got ${name.after.constructor.name}` | ||
) | ||
} | ||
@@ -93,3 +93,3 @@ | ||
('string' === typeof name ? name.trim() : name.name?.trim()) || | ||
`${tatamiNgGroup}${groups.size + 1}`; | ||
`${tatamiNgGroup}${groups.size + 1}` | ||
if (!groups.has(groupName)) | ||
@@ -100,10 +100,10 @@ groups.set(groupName, { | ||
after: name.after ?? emptyFunction, | ||
}); | ||
}) | ||
if (AsyncFunction === cb.constructor) { | ||
cb().then(() => { | ||
groupName = null; | ||
}); | ||
groupName = null | ||
}) | ||
} else { | ||
cb(); | ||
groupName = null; | ||
cb() | ||
groupName = null | ||
} | ||
@@ -124,9 +124,9 @@ } | ||
// biome-ignore lint/style/noParameterAssign: <explanation> | ||
fn = name; | ||
fn = name | ||
// biome-ignore lint/style/noParameterAssign: <explanation> | ||
name = fn.name; | ||
name = fn.name | ||
} | ||
checkBenchmarkArgs(fn, opts); | ||
checkBenchmarkArgs(fn, opts) | ||
// biome-ignore lint/style/noParameterAssign: <explanation> | ||
name = name.trim(); | ||
name = name.trim() | ||
@@ -144,3 +144,3 @@ benchmarks.push({ | ||
async: AsyncFunction === fn.constructor, | ||
}); | ||
}) | ||
} | ||
@@ -161,9 +161,9 @@ | ||
// biome-ignore lint/style/noParameterAssign: <explanation> | ||
fn = name; | ||
fn = name | ||
// biome-ignore lint/style/noParameterAssign: <explanation> | ||
name = fn.name; | ||
name = fn.name | ||
} | ||
checkBenchmarkArgs(fn, opts); | ||
checkBenchmarkArgs(fn, opts) | ||
// biome-ignore lint/style/noParameterAssign: <explanation> | ||
name = name.trim(); | ||
name = name.trim() | ||
@@ -181,3 +181,3 @@ benchmarks.push({ | ||
async: AsyncFunction === fn.constructor, | ||
}); | ||
}) | ||
} | ||
@@ -203,11 +203,11 @@ | ||
export function clear() { | ||
groups.clear(); | ||
benchmarks.length = 0; | ||
groups.clear() | ||
benchmarks.length = 0 | ||
} | ||
const executeBenchmarks = async (benchmarks, log, opts = {}) => { | ||
let once = false; | ||
let once = false | ||
for (const benchmark of benchmarks) { | ||
once = true; | ||
overrideBenchmarkDefaults(benchmark, opts); | ||
once = true | ||
overrideBenchmarkDefaults(benchmark, opts) | ||
try { | ||
@@ -223,14 +223,14 @@ benchmark.stats = await measure( | ||
warmup: benchmark.warmup, | ||
}, | ||
); | ||
} | ||
) | ||
if (!opts.json) | ||
log(table.benchmark(benchmark.name, benchmark.stats, opts)); | ||
log(table.benchmark(benchmark.name, benchmark.stats, opts)) | ||
} catch (err) { | ||
benchmark.error = err; | ||
benchmark.error = err | ||
if (!opts.json) | ||
log(table.benchmarkError(benchmark.name, benchmark.error, opts)); | ||
log(table.benchmarkError(benchmark.name, benchmark.error, opts)) | ||
} | ||
} | ||
return once; | ||
}; | ||
return once | ||
} | ||
@@ -258,15 +258,15 @@ /** | ||
if (Object.prototype.toString.call(opts).slice(8, -1) !== 'Object') | ||
throw new TypeError(`expected object, got ${opts.constructor.name}`); | ||
throw new TypeError(`expected object, got ${opts.constructor.name}`) | ||
if (opts.samples != null && 'number' !== typeof opts.samples) | ||
throw new TypeError( | ||
`expected number as 'samples' option, got ${opts.samples.constructor.name}`, | ||
); | ||
`expected number as 'samples' option, got ${opts.samples.constructor.name}` | ||
) | ||
if (opts.time != null && 'number' !== typeof opts.time) | ||
throw new TypeError( | ||
`expected number as 'time' option, got ${opts.time.constructor.name}`, | ||
); | ||
`expected number as 'time' option, got ${opts.time.constructor.name}` | ||
) | ||
if (opts.warmup != null && 'boolean' !== typeof opts.warmup) | ||
throw new TypeError( | ||
`expected boolean as 'warmup' option, got ${opts.warmup.constructor.name}`, | ||
); | ||
`expected boolean as 'warmup' option, got ${opts.warmup.constructor.name}` | ||
) | ||
if ( | ||
@@ -279,4 +279,4 @@ opts.json != null && | ||
throw new TypeError( | ||
`expected number or boolean or string as 'json' option, got ${opts.json.constructor.name}`, | ||
); | ||
`expected number or boolean or string as 'json' option, got ${opts.json.constructor.name}` | ||
) | ||
if ( | ||
@@ -288,11 +288,11 @@ 'string' === typeof opts.json && | ||
`expected one of ${Object.values(jsonOutputFormat).join( | ||
', ', | ||
)} as 'json' option, got ${opts.json}`, | ||
); | ||
', ' | ||
)} as 'json' option, got ${opts.json}` | ||
) | ||
if (opts.file != null && 'string' !== typeof opts.file) | ||
throw new TypeError( | ||
`expected string as 'file' option, got ${opts.file.constructor.name}`, | ||
); | ||
`expected string as 'file' option, got ${opts.file.constructor.name}` | ||
) | ||
if ('string' === typeof opts.file && opts.file.trim().length === 0) | ||
throw new TypeError(`expected non-empty string as 'file' option`); | ||
throw new TypeError(`expected non-empty string as 'file' option`) | ||
// biome-ignore lint/style/noParameterAssign: <explanation> | ||
@@ -305,6 +305,6 @@ opts = mergeDeepRight( | ||
}, | ||
opts, | ||
); | ||
opts | ||
) | ||
const log = opts.silent === true ? emptyFunction : logger; | ||
const log = opts.silent === true ? emptyFunction : logger | ||
@@ -315,24 +315,24 @@ const report = { | ||
runtime: `${runtime} ${version} (${os})`, | ||
}; | ||
} | ||
if (!opts.json && benchmarks.length > 0) { | ||
log(clr.gray(opts.colors, `cpu: ${report.cpu}`)); | ||
log(clr.gray(opts.colors, `runtime: ${report.runtime}`)); | ||
log(clr.gray(opts.colors, `cpu: ${report.cpu}`)) | ||
log(clr.gray(opts.colors, `runtime: ${report.runtime}`)) | ||
log(''); | ||
log(table.header(opts)); | ||
log(table.br(opts)); | ||
log('') | ||
log(table.header(opts)) | ||
log(table.br(opts)) | ||
} | ||
let noGroupBenchmarks = benchmarks.filter( | ||
benchmark => benchmark.group == null, | ||
); | ||
let once = await executeBenchmarks(noGroupBenchmarks, log, opts); | ||
benchmark => benchmark.group == null | ||
) | ||
let once = await executeBenchmarks(noGroupBenchmarks, log, opts) | ||
noGroupBenchmarks = noGroupBenchmarks.filter( | ||
noGroupBenchmark => noGroupBenchmark.error == null, | ||
); | ||
noGroupBenchmark => noGroupBenchmark.error == null | ||
) | ||
if (!opts.json && noGroupBenchmarks.length > 1) { | ||
log(''); | ||
log(table.summary(noGroupBenchmarks, opts)); | ||
log('') | ||
log(table.summary(noGroupBenchmarks, opts)) | ||
} | ||
@@ -342,25 +342,25 @@ | ||
if (!opts.json) { | ||
if (once) log(''); | ||
if (!group.startsWith(tatamiNgGroup)) log(`• ${group}`); | ||
if (once) log('') | ||
if (!group.startsWith(tatamiNgGroup)) log(`• ${group}`) | ||
if (once || !group.startsWith(tatamiNgGroup)) | ||
log(clr.gray(opts.colors, table.br(opts))); | ||
log(clr.gray(opts.colors, table.br(opts))) | ||
} | ||
let groupBenchmarks = benchmarks.filter( | ||
benchmark => benchmark.group === group, | ||
); | ||
benchmark => benchmark.group === group | ||
) | ||
AsyncFunction === groupOpts.before.constructor | ||
? await groupOpts.before() | ||
: groupOpts.before(); | ||
: groupOpts.before() | ||
once = await executeBenchmarks(groupBenchmarks, log, opts); | ||
once = await executeBenchmarks(groupBenchmarks, log, opts) | ||
AsyncFunction === groupOpts.after.constructor | ||
? await groupOpts.after() | ||
: groupOpts.after(); | ||
: groupOpts.after() | ||
groupBenchmarks = groupBenchmarks.filter( | ||
groupBenchmark => groupBenchmark.error == null, | ||
); | ||
groupBenchmark => groupBenchmark.error == null | ||
) | ||
if ( | ||
@@ -371,14 +371,14 @@ groupOpts.summary === true && | ||
) { | ||
log(''); | ||
log(table.summary(groupBenchmarks, opts)); | ||
log('') | ||
log(table.summary(groupBenchmarks, opts)) | ||
} | ||
} | ||
if (!opts.json && opts.units) log(table.units(opts)); | ||
if (!opts.json && opts.units) log(table.units(opts)) | ||
if (opts.json) { | ||
let jsonReport; | ||
let jsonReport | ||
switch (opts.json) { | ||
case jsonOutputFormat.bmf: | ||
jsonReport = JSON.stringify(convertReportToBmf(report)); | ||
break; | ||
jsonReport = JSON.stringify(convertReportToBmf(report)) | ||
break | ||
default: | ||
@@ -388,10 +388,10 @@ jsonReport = JSON.stringify( | ||
undefined, | ||
'number' !== typeof opts.json ? 0 : opts.json, | ||
); | ||
'number' !== typeof opts.json ? 0 : opts.json | ||
) | ||
} | ||
log(jsonReport); | ||
if (opts.file) writeFileSync(opts.file, jsonReport); | ||
log(jsonReport) | ||
if (opts.file) writeFileSync(opts.file, jsonReport) | ||
} | ||
return JSON.parse(JSON.stringify(report)); | ||
return JSON.parse(JSON.stringify(report)) | ||
} |
@@ -7,7 +7,7 @@ export const runtimes = { | ||
browser: 'browser', | ||
}; | ||
} | ||
export const emptyFunction = () => {}; | ||
export const emptyFunction = () => {} | ||
export const tatamiNgGroup = '$tatami-ng_group'; | ||
export const tatamiNgGroup = '$tatami-ng_group' | ||
@@ -1043,14 +1043,14 @@ /** | ||
infinity: 1.96, | ||
}; | ||
} | ||
// Student two-tailed t-distribution has no minimum samples size. | ||
// But for 95% confidence level and 80% statistical power on samples with unknown previous standard deviation, 128 samples are recommended. | ||
export const minimumSamples = 128; | ||
export const minimumSamples = 128 | ||
export const defaultTime = 1e9; // ns | ||
export const defaultTime = 1e9 // ns | ||
export const defaultSamples = minimumSamples; | ||
export const defaultSamples = minimumSamples | ||
export const jsonOutputFormat = { | ||
bmf: 'bmf', | ||
}; | ||
} |
@@ -1,12 +0,12 @@ | ||
export function group(cb: () => void | Promise<void>): void; | ||
export function group(name: string, cb: () => void | Promise<void>): void; | ||
export function group(cb: () => void | Promise<void>): void | ||
export function group(name: string, cb: () => void | Promise<void>): void | ||
export function group( | ||
options: { | ||
name?: string; | ||
summary?: boolean; | ||
before?: () => void | Promise<void>; | ||
after?: () => void | Promise<void>; | ||
name?: string | ||
summary?: boolean | ||
before?: () => void | Promise<void> | ||
after?: () => void | Promise<void> | ||
}, | ||
cb: () => void | Promise<void>, | ||
): void; | ||
cb: () => void | Promise<void> | ||
): void | ||
@@ -16,6 +16,6 @@ export function bench( | ||
options?: { | ||
before?: () => void | Promise<void>; | ||
after?: () => void | Promise<void>; | ||
}, | ||
): void; | ||
before?: () => void | Promise<void> | ||
after?: () => void | Promise<void> | ||
} | ||
): void | ||
export function bench( | ||
@@ -25,6 +25,6 @@ name: string, | ||
options?: { | ||
before?: () => void | Promise<void>; | ||
after?: () => void | Promise<void>; | ||
}, | ||
): void; | ||
before?: () => void | Promise<void> | ||
after?: () => void | Promise<void> | ||
} | ||
): void | ||
@@ -34,6 +34,6 @@ export function baseline( | ||
options?: { | ||
before?: () => void | Promise<void>; | ||
after?: () => void | Promise<void>; | ||
}, | ||
): void; | ||
before?: () => void | Promise<void> | ||
after?: () => void | Promise<void> | ||
} | ||
): void | ||
export function baseline( | ||
@@ -43,56 +43,56 @@ name: string, | ||
options?: { | ||
before?: () => void | Promise<void>; | ||
after?: () => void | Promise<void>; | ||
}, | ||
): void; | ||
before?: () => void | Promise<void> | ||
after?: () => void | Promise<void> | ||
} | ||
): void | ||
export function clear(): void; | ||
export function clear(): void | ||
export function run(options?: { | ||
silent?: boolean; | ||
colors?: boolean; | ||
samples?: number; | ||
time?: number; | ||
warmup?: boolean; | ||
avg?: boolean; | ||
iter?: boolean; | ||
min_max?: boolean; | ||
rmoe?: boolean; | ||
percentiles?: boolean; | ||
json?: number | boolean | 'bmf'; | ||
file?: string; | ||
units?: boolean; | ||
}): Promise<Report>; | ||
silent?: boolean | ||
colors?: boolean | ||
samples?: number | ||
time?: number | ||
warmup?: boolean | ||
avg?: boolean | ||
iter?: boolean | ||
min_max?: boolean | ||
rmoe?: boolean | ||
percentiles?: boolean | ||
json?: number | boolean | 'bmf' | ||
file?: string | ||
units?: boolean | ||
}): Promise<Report> | ||
export interface Report { | ||
cpu: string; | ||
runtime: string; | ||
cpu: string | ||
runtime: string | ||
benchmarks: { | ||
name: string; | ||
samples: number; | ||
time: number; | ||
warmup: boolean; | ||
async: boolean; | ||
baseline: boolean; | ||
group: string | null; | ||
name: string | ||
samples: number | ||
time: number | ||
warmup: boolean | ||
async: boolean | ||
baseline: boolean | ||
group: string | null | ||
error?: Error; | ||
error?: Error | ||
stats?: { | ||
samples: number; | ||
min: number; | ||
max: number; | ||
p50: number; | ||
p75: number; | ||
p99: number; | ||
p995: number; | ||
avg: number; | ||
iter: number; | ||
vr: number; | ||
sd: number; | ||
rmoe: number; | ||
ss: boolean; | ||
}; | ||
}[]; | ||
samples: number | ||
min: number | ||
max: number | ||
p50: number | ||
p75: number | ||
p99: number | ||
p995: number | ||
avg: number | ||
iter: number | ||
vr: number | ||
sd: number | ||
rmoe: number | ||
ss: boolean | ||
} | ||
}[] | ||
} |
@@ -1,1 +0,1 @@ | ||
export { group, bench, baseline, clear, run } from './benchmark.js'; | ||
export { group, bench, baseline, clear, run } from './benchmark.js' |
139
src/lib.js
@@ -7,7 +7,7 @@ import { | ||
tTable, | ||
} from './constants.js'; | ||
import { runtime } from './runtime.js'; | ||
import { now } from './time.js'; | ||
} from './constants.js' | ||
import { runtime } from './runtime.js' | ||
import { now } from './time.js' | ||
export const AsyncFunction = (async () => {}).constructor; | ||
export const AsyncFunction = (async () => {}).constructor | ||
@@ -21,4 +21,4 @@ export const version = (() => { | ||
bun: () => process.versions.bun, | ||
}[runtime](); | ||
})(); | ||
}[runtime]() | ||
})() | ||
@@ -32,4 +32,4 @@ export const os = (() => { | ||
bun: () => `${process.arch}-${process.platform}`, | ||
}[runtime](); | ||
})(); | ||
}[runtime]() | ||
})() | ||
@@ -43,4 +43,4 @@ export const cpu = await (async () => { | ||
bun: async () => (await import('node:os'))?.cpus?.()?.[0]?.model, | ||
}[runtime](); | ||
})(); | ||
}[runtime]() | ||
})() | ||
@@ -54,4 +54,4 @@ export const noColor = (() => { | ||
bun: () => !!process.env.NO_COLOR, | ||
}[runtime](); | ||
})(); | ||
}[runtime]() | ||
})() | ||
@@ -65,4 +65,4 @@ export const writeFileSync = await (async () => { | ||
bun: async () => (await import('node:fs')).writeFileSync, | ||
}[runtime](); | ||
})(); | ||
}[runtime]() | ||
})() | ||
@@ -83,12 +83,12 @@ export const convertReportToBmf = report => { | ||
}, | ||
}; | ||
} | ||
}) | ||
.reduce((obj, item) => Object.assign(obj, item), {}); | ||
}; | ||
.reduce((obj, item) => Object.assign(obj, item), {}) | ||
} | ||
export const checkBenchmarkArgs = (fn, opts = {}) => { | ||
if (![Function, AsyncFunction].includes(fn.constructor)) | ||
throw new TypeError(`expected function, got ${fn.constructor.name}`); | ||
throw new TypeError(`expected function, got ${fn.constructor.name}`) | ||
if (Object.prototype.toString.call(opts).slice(8, -1) !== 'Object') | ||
throw new TypeError(`expected object, got ${opts.constructor.name}`); | ||
throw new TypeError(`expected object, got ${opts.constructor.name}`) | ||
if ( | ||
@@ -99,4 +99,4 @@ opts.before != null && | ||
throw new TypeError( | ||
`expected function as 'before' option, got ${opts.before.constructor.name}`, | ||
); | ||
`expected function as 'before' option, got ${opts.before.constructor.name}` | ||
) | ||
if ( | ||
@@ -107,14 +107,14 @@ opts.after != null && | ||
throw new TypeError( | ||
`expected function as 'after' option, got ${opts.after.constructor.name}`, | ||
); | ||
}; | ||
`expected function as 'after' option, got ${opts.after.constructor.name}` | ||
) | ||
} | ||
export const overrideBenchmarkDefaults = (benchmark, opts) => { | ||
benchmark.samples = opts.samples ?? benchmark.samples; | ||
benchmark.time = opts.time ?? benchmark.time; | ||
benchmark.warmup = opts.warmup ?? benchmark.warmup; | ||
}; | ||
benchmark.samples = opts.samples ?? benchmark.samples | ||
benchmark.time = opts.time ?? benchmark.time | ||
benchmark.warmup = opts.warmup ?? benchmark.warmup | ||
} | ||
export const mergeDeepRight = (target, source) => { | ||
const targetClone = structuredClone(target); | ||
const targetClone = structuredClone(target) | ||
@@ -126,21 +126,20 @@ for (const key in source) { | ||
) { | ||
targetClone[key] = mergeDeepRight(target[key], source[key]); | ||
targetClone[key] = mergeDeepRight(target[key], source[key]) | ||
} else { | ||
targetClone[key] = source[key]; | ||
targetClone[key] = source[key] | ||
} | ||
} else { | ||
targetClone[key] = source[key]; | ||
targetClone[key] = source[key] | ||
} | ||
} | ||
return targetClone; | ||
}; | ||
return targetClone | ||
} | ||
export const checkDividend = n => { | ||
if ('number' !== typeof n) | ||
throw new TypeError(`expected number, got ${n.constructor.name}`); | ||
if (n === 0 || Number.isNaN(n)) | ||
throw new RangeError(`Invalid dividend: ${n}`); | ||
return n; | ||
}; | ||
throw new TypeError(`expected number, got ${n.constructor.name}`) | ||
if (n === 0 || Number.isNaN(n)) throw new RangeError(`Invalid dividend: ${n}`) | ||
return n | ||
} | ||
@@ -151,12 +150,12 @@ export async function measure( | ||
after = emptyFunction, | ||
opts = {}, | ||
opts = {} | ||
) { | ||
if (![Function, AsyncFunction].includes(fn.constructor)) | ||
throw new TypeError(`expected function, got ${fn.constructor.name}`); | ||
throw new TypeError(`expected function, got ${fn.constructor.name}`) | ||
if (![Function, AsyncFunction].includes(before.constructor)) | ||
throw new TypeError(`expected function, got ${before.constructor.name}`); | ||
throw new TypeError(`expected function, got ${before.constructor.name}`) | ||
if (![Function, AsyncFunction].includes(after.constructor)) | ||
throw new TypeError(`expected function, got ${after.constructor.name}`); | ||
throw new TypeError(`expected function, got ${after.constructor.name}`) | ||
if (Object.prototype.toString.call(opts).slice(8, -1) !== 'Object') | ||
throw new TypeError(`expected object, got ${opts.constructor.name}`); | ||
throw new TypeError(`expected object, got ${opts.constructor.name}`) | ||
@@ -171,7 +170,7 @@ // biome-ignore lint/style/noParameterAssign: <explanation> | ||
}, | ||
opts, | ||
); | ||
opts | ||
) | ||
const asyncBefore = AsyncFunction === before.constructor; | ||
const asyncAfter = AsyncFunction === after.constructor; | ||
const asyncBefore = AsyncFunction === before.constructor | ||
const asyncAfter = AsyncFunction === after.constructor | ||
@@ -214,15 +213,15 @@ const benchmark = new (!opts.async ? Function : AsyncFunction)( | ||
return samples; | ||
`, | ||
); | ||
` | ||
) | ||
const samples = !opts.async | ||
? benchmark(fn, before, after, now) | ||
: await benchmark(fn, before, after, now); | ||
: await benchmark(fn, before, after, now) | ||
return buildStats(samples); | ||
return buildStats(samples) | ||
} | ||
const quantile = (arr, q) => { | ||
const base = (arr.length - 1) * q; | ||
const baseIndex = Math.floor(base); | ||
const base = (arr.length - 1) * q | ||
const baseIndex = Math.floor(base) | ||
if (arr[baseIndex + 1] != null) { | ||
@@ -232,26 +231,26 @@ return ( | ||
(base - baseIndex) * (arr[baseIndex + 1] - arr[baseIndex]) | ||
); | ||
) | ||
} | ||
return arr[baseIndex]; | ||
}; | ||
return arr[baseIndex] | ||
} | ||
const buildStats = samples => { | ||
if (!Array.isArray(samples)) | ||
throw new TypeError(`expected array, got ${samples.constructor.name}`); | ||
throw new TypeError(`expected array, got ${samples.constructor.name}`) | ||
if (Array.isArray(samples) && samples.length === 0) | ||
throw new Error('expected non-empty array, got empty array'); | ||
throw new Error('expected non-empty array, got empty array') | ||
samples.sort((a, b) => a - b); | ||
samples.sort((a, b) => a - b) | ||
const time = samples.reduce((a, b) => a + b, 0); | ||
const avg = time / samples.length; | ||
const time = samples.reduce((a, b) => a + b, 0) | ||
const avg = time / samples.length | ||
const vr = | ||
samples.reduce((a, b) => a + (b - avg) ** 2, 0) / | ||
checkDividend(samples.length - 1); | ||
const sd = Math.sqrt(vr); | ||
const sem = sd / Math.sqrt(samples.length); | ||
checkDividend(samples.length - 1) | ||
const sd = Math.sqrt(vr) | ||
const sem = sd / Math.sqrt(samples.length) | ||
const critical = | ||
tTable[(samples.length - 1 || 1).toString()] || tTable.infinity; | ||
const moe = sem * critical; | ||
const rmoe = (moe / checkDividend(avg)) * 100; | ||
tTable[(samples.length - 1 || 1).toString()] || tTable.infinity | ||
const moe = sem * critical | ||
const rmoe = (moe / checkDividend(avg)) * 100 | ||
@@ -272,3 +271,3 @@ return { | ||
ss: samples.length >= minimumSamples, | ||
}; | ||
}; | ||
} | ||
} |
@@ -5,13 +5,13 @@ /** | ||
const buildLogger = () => { | ||
let logger; | ||
let logger | ||
try { | ||
logger = console.log; | ||
logger = console.log | ||
} catch { | ||
logger = print; | ||
logger = print | ||
} | ||
if ('function' !== typeof logger) | ||
throw new TypeError(`logger is not a function: ${typeof logger}`); | ||
return logger; | ||
}; | ||
throw new TypeError(`logger is not a function: ${typeof logger}`) | ||
return logger | ||
} | ||
export const logger = buildLogger(); | ||
export const logger = buildLogger() |
@@ -26,45 +26,45 @@ // https://github.com/lukeed/kleur/blob/master/colors.mjs | ||
function init(x, y) { | ||
const rgx = new RegExp(`\\x1b\\[${y}m`, 'g'); | ||
const open = `\x1b[${x}m`; | ||
const close = `\x1b[${y}m`; | ||
const rgx = new RegExp(`\\x1b\\[${y}m`, 'g') | ||
const open = `\x1b[${x}m` | ||
const close = `\x1b[${y}m` | ||
return (e, txt) => { | ||
if (!e || txt == null) return txt; | ||
if (!e || txt == null) return txt | ||
// biome-ignore lint/style/noParameterAssign: <explanation> | ||
txt = txt.toString(); | ||
txt = txt.toString() | ||
return `${open}${ | ||
txt.includes(close) ? txt.replace(rgx, close + open) : txt | ||
}${close}`; | ||
}; | ||
}${close}` | ||
} | ||
} | ||
// modifiers | ||
export const reset = init(0, 0); | ||
export const bold = init(1, 22); | ||
export const dim = init(2, 22); | ||
export const italic = init(3, 23); | ||
export const underline = init(4, 24); | ||
export const inverse = init(7, 27); | ||
export const hidden = init(8, 28); | ||
export const strikethrough = init(9, 29); | ||
export const reset = init(0, 0) | ||
export const bold = init(1, 22) | ||
export const dim = init(2, 22) | ||
export const italic = init(3, 23) | ||
export const underline = init(4, 24) | ||
export const inverse = init(7, 27) | ||
export const hidden = init(8, 28) | ||
export const strikethrough = init(9, 29) | ||
// colors | ||
export const black = init(30, 39); | ||
export const red = init(31, 39); | ||
export const green = init(32, 39); | ||
export const yellow = init(33, 39); | ||
export const blue = init(34, 39); | ||
export const magenta = init(35, 39); | ||
export const cyan = init(36, 39); | ||
export const white = init(37, 39); | ||
export const gray = init(90, 39); | ||
export const black = init(30, 39) | ||
export const red = init(31, 39) | ||
export const green = init(32, 39) | ||
export const yellow = init(33, 39) | ||
export const blue = init(34, 39) | ||
export const magenta = init(35, 39) | ||
export const cyan = init(36, 39) | ||
export const white = init(37, 39) | ||
export const gray = init(90, 39) | ||
// background colors | ||
export const bgBlack = init(40, 49); | ||
export const bgRed = init(41, 49); | ||
export const bgGreen = init(42, 49); | ||
export const bgYellow = init(43, 49); | ||
export const bgBlue = init(44, 49); | ||
export const bgMagenta = init(45, 49); | ||
export const bgCyan = init(46, 49); | ||
export const bgWhite = init(47, 49); | ||
export const bgBlack = init(40, 49) | ||
export const bgRed = init(41, 49) | ||
export const bgGreen = init(42, 49) | ||
export const bgYellow = init(43, 49) | ||
export const bgBlue = init(44, 49) | ||
export const bgMagenta = init(45, 49) | ||
export const bgCyan = init(46, 49) | ||
export const bgWhite = init(47, 49) |
@@ -1,30 +0,30 @@ | ||
const locale = 'en-us'; | ||
const locale = 'en-us' | ||
export function duration(time) { | ||
if (time < 1) return `${Number((time * 1e3).toFixed(0)).toString()} ps`; | ||
if (time < 1) return `${Number((time * 1e3).toFixed(0)).toString()} ps` | ||
if (time < 1e2) return `${Number(time.toFixed(2)).toString()} ns`; | ||
if (time < 1e3) return `${Number(time.toFixed(0)).toString()} ns`; | ||
if (time < 1e2) return `${Number(time.toFixed(2)).toString()} ns` | ||
if (time < 1e3) return `${Number(time.toFixed(0)).toString()} ns` | ||
if (time < 1e5) | ||
return `${Number(time.toFixed(0)) | ||
.toLocaleString(locale) | ||
.replace(',', "'")} ns`; | ||
.replace(',', "'")} ns` | ||
if (time < 1e6) return `${Number((time / 1e3).toFixed(0)).toString()} µs`; | ||
if (time < 1e6) return `${Number((time / 1e3).toFixed(0)).toString()} µs` | ||
if (time < 1e8) | ||
return `${Number((time / 1e3).toFixed(0)) | ||
.toLocaleString(locale) | ||
.replace(',', "'")} µs`; | ||
.replace(',', "'")} µs` | ||
if (time < 1e9) return `${Number((time / 1e6).toFixed(0)).toString()} ms`; | ||
if (time < 1e9) return `${Number((time / 1e6).toFixed(0)).toString()} ms` | ||
if (time < 1e11) | ||
return `${Number((time / 1e6).toFixed(0)) | ||
.toLocaleString(locale) | ||
.replace(',', "'")} ms`; | ||
.replace(',', "'")} ms` | ||
if (time < 1e12) return `${Number((time / 1e9).toFixed(0)).toString()} s`; | ||
if (time < 36e11) return `${Number((time / 60e9).toFixed(0)).toString()} m`; | ||
if (time < 1e12) return `${Number((time / 1e9).toFixed(0)).toString()} s` | ||
if (time < 36e11) return `${Number((time / 60e9).toFixed(0)).toString()} m` | ||
return `${Number((time / 36e11).toFixed(2)).toLocaleString(locale, { | ||
notation: 'compact', | ||
})} h`; | ||
})} h` | ||
} | ||
@@ -35,3 +35,3 @@ | ||
.toLocaleString(locale) | ||
.replaceAll(',', "'")}`; | ||
.replaceAll(',', "'")}` | ||
} | ||
@@ -42,3 +42,3 @@ | ||
.toLocaleString(locale) | ||
.replaceAll(',', "'")} %`; | ||
.replaceAll(',', "'")} %` | ||
} | ||
@@ -49,3 +49,3 @@ | ||
.toLocaleString(locale) | ||
.replaceAll(',', "'")}`; | ||
.replaceAll(',', "'")}` | ||
} |
@@ -1,11 +0,11 @@ | ||
import { tTable, tatamiNgGroup } from '../constants.js'; | ||
import { checkDividend } from '../lib.js'; | ||
import * as clr from './clr.js'; | ||
import { duration, errorMargin, iterPerSecond, speedRatio } from './fmt.js'; | ||
import { tTable, tatamiNgGroup } from '../constants.js' | ||
import { checkDividend } from '../lib.js' | ||
import * as clr from './clr.js' | ||
import { duration, errorMargin, iterPerSecond, speedRatio } from './fmt.js' | ||
export function size(names) { | ||
let size = 9; | ||
for (const name of names) if (size < name.length) size = name.length; | ||
let size = 9 | ||
for (const name of names) if (size < name.length) size = name.length | ||
return 2 + size; | ||
return 2 + size | ||
} | ||
@@ -22,4 +22,4 @@ | ||
return `${'-'.repeat( | ||
size + 14 * avg + 14 * iter + 14 * rmoe + 24 * min_max, | ||
)}${!percentiles ? '' : ` ${'-'.repeat(9 + 10 + 10 + 10)}`}`; | ||
size + 14 * avg + 14 * iter + 14 * rmoe + 24 * min_max | ||
)}${!percentiles ? '' : ` ${'-'.repeat(9 + 10 + 10 + 10)}`}` | ||
} | ||
@@ -30,3 +30,3 @@ | ||
error.message | ||
}${error.stack ? `\n${clr.gray(colors, error.stack)}` : ''}`; | ||
}${error.stack ? `\n${clr.gray(colors, error.stack)}` : ''}` | ||
} | ||
@@ -42,4 +42,4 @@ | ||
1 ms = 1 millisecond = 1'000μs = 1'000'000ns = 1e-9ps = 1e-3s | ||
`, | ||
); | ||
` | ||
) | ||
} | ||
@@ -64,5 +64,5 @@ | ||
9, | ||
' ', | ||
' ' | ||
)} ${'p995'.padStart(9, ' ')}` | ||
}`; | ||
}` | ||
} | ||
@@ -81,3 +81,3 @@ | ||
percentiles = true, | ||
}, | ||
} | ||
) { | ||
@@ -89,3 +89,3 @@ return `${name.padEnd(size, ' ')}${ | ||
14 + 10 * colors, | ||
' ', | ||
' ' | ||
) | ||
@@ -97,3 +97,3 @@ }${ | ||
14 + 10 * colors, | ||
' ', | ||
' ' | ||
) | ||
@@ -105,3 +105,3 @@ }${ | ||
14 + 10 * colors, | ||
' ', | ||
' ' | ||
) | ||
@@ -113,3 +113,3 @@ }${ | ||
colors, | ||
duration(stats.max), | ||
duration(stats.max) | ||
)})`.padStart(24 + 2 * 10 * colors, ' ') | ||
@@ -128,3 +128,3 @@ }${ | ||
.padStart(9 + 10 * colors, ' ')}` | ||
}${!stats.ss ? ` ${clr.red(colors, '!')}` : ''}`; | ||
}${!stats.ss ? ` ${clr.red(colors, '!')}` : ''}` | ||
} | ||
@@ -139,12 +139,12 @@ | ||
if (benchmarks.some(benchmark => benchmark.error != null)) { | ||
throw new Error('Cannot summarize benchmarks with error'); | ||
throw new Error('Cannot summarize benchmarks with error') | ||
} | ||
if (benchmarks.length < 2) { | ||
throw new Error('Cannot summarize less than two benchmarks'); | ||
throw new Error('Cannot summarize less than two benchmarks') | ||
} | ||
benchmarks.sort( | ||
(benchmarkA, benchmarkB) => benchmarkA.stats.avg - benchmarkB.stats.avg, | ||
); | ||
(benchmarkA, benchmarkB) => benchmarkA.stats.avg - benchmarkB.stats.avg | ||
) | ||
const baseline = | ||
benchmarks.find(benchmark => benchmark.baseline) ?? benchmarks[0]; | ||
benchmarks.find(benchmark => benchmark.baseline) ?? benchmarks[0] | ||
@@ -158,3 +158,3 @@ return `${`${clr.bold(colors, 'summary')}${ | ||
.map(benchmark => { | ||
const ratio = benchmark.stats.avg / checkDividend(baseline.stats.avg); | ||
const ratio = benchmark.stats.avg / checkDividend(baseline.stats.avg) | ||
// https://en.wikipedia.org/wiki/Propagation_of_uncertainty#Example_formulae | ||
@@ -165,23 +165,23 @@ const ratioSd = | ||
(baseline.stats.sd / checkDividend(baseline.stats.avg)) ** 2 + | ||
(benchmark.stats.sd / checkDividend(benchmark.stats.avg)) ** 2, | ||
); | ||
(benchmark.stats.sd / checkDividend(benchmark.stats.avg)) ** 2 | ||
) | ||
const ratioSem = | ||
ratioSd / | ||
checkDividend( | ||
Math.sqrt(baseline.stats.samples + benchmark.stats.samples), | ||
); | ||
Math.sqrt(baseline.stats.samples + benchmark.stats.samples) | ||
) | ||
const critical = | ||
tTable[ | ||
(baseline.stats.samples + benchmark.stats.samples - 1 || 1).toString() | ||
] || tTable.infinity; | ||
const ratioMoe = ratioSem * critical; | ||
const ratioRmoe = (ratioMoe / checkDividend(ratio)) * 100; | ||
] || tTable.infinity | ||
const ratioMoe = ratioSem * critical | ||
const ratioRmoe = (ratioMoe / checkDividend(ratio)) * 100 | ||
return `\n ${clr[1 > ratio ? 'red' : 'green']( | ||
colors, | ||
1 > ratio ? speedRatio(1 / checkDividend(ratio)) : speedRatio(ratio), | ||
1 > ratio ? speedRatio(1 / checkDividend(ratio)) : speedRatio(ratio) | ||
)} ± ${clr.blue(colors, errorMargin(ratioRmoe))} times ${ | ||
1 > ratio ? 'slower' : 'faster' | ||
} than ${clr.bold(colors, clr.cyan(colors, benchmark.name))}`; | ||
} than ${clr.bold(colors, clr.cyan(colors, benchmark.name))}` | ||
}) | ||
.join('')}`; | ||
.join('')}` | ||
} |
@@ -1,17 +0,17 @@ | ||
import { runtimes } from './constants.js'; | ||
import { runtimes } from './constants.js' | ||
const isBun = !!globalThis.Bun || !!globalThis.process?.versions?.bun; | ||
const isDeno = !!globalThis.Deno; | ||
const isNode = globalThis.process?.release?.name === 'node'; | ||
const isWorkerd = globalThis.navigator?.userAgent === 'Cloudflare-Workers'; | ||
const isBrowser = !!globalThis.navigator; | ||
const isBun = !!globalThis.Bun || !!globalThis.process?.versions?.bun | ||
const isDeno = !!globalThis.Deno | ||
const isNode = globalThis.process?.release?.name === 'node' | ||
const isWorkerd = globalThis.navigator?.userAgent === 'Cloudflare-Workers' | ||
const isBrowser = !!globalThis.navigator | ||
export const runtime = (() => { | ||
if (isBun) return runtimes.bun; | ||
if (isDeno) return runtimes.deno; | ||
if (isNode) return runtimes.node; | ||
if (isWorkerd) return runtimes.workerd; | ||
if (isBrowser) return runtimes.browser; | ||
if (isBun) return runtimes.bun | ||
if (isDeno) return runtimes.deno | ||
if (isNode) return runtimes.node | ||
if (isWorkerd) return runtimes.workerd | ||
if (isBrowser) return runtimes.browser | ||
return 'unknown'; | ||
})(); | ||
return 'unknown' | ||
})() |
@@ -1,2 +0,2 @@ | ||
import { runtime } from './runtime.js'; | ||
import { runtime } from './runtime.js' | ||
@@ -8,8 +8,8 @@ export const now = (() => { | ||
try { | ||
$.agent.monotonicNow(); | ||
$.agent.monotonicNow() | ||
return () => Math.round(1e6 * $.agent.monotonicNow()); | ||
return () => Math.round(1e6 * $.agent.monotonicNow()) | ||
} catch {} | ||
return () => Math.round(1e6 * performance.now()); | ||
return () => Math.round(1e6 * performance.now()) | ||
}, | ||
@@ -19,3 +19,3 @@ node: () => () => Number(process.hrtime.bigint()), | ||
bun: () => Bun.nanoseconds, | ||
}[runtime](); | ||
})(); | ||
}[runtime]() | ||
})() |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
7
136
192773
2202