123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740exceptionNot_implementedofstringletnotImplementedmodule_function_=raise(Not_implemented(Printf.sprintf"'%s.%s' is not implemented in native on `server-reason-react.js`. \
You are running code that depends on the browser, this is not \
supported. If this case should run on native and there's no browser \
dependency, please open an issue at %s"module_function_"https://github.com/ml-in-barcelona/server-reason-react/issues"))type'at=<..>as'amoduleFn=structtype'aarity0={i0:unit->'a[@internal]}type'aarity1={i1:'a[@internal]}type'aarity2={i2:'a[@internal]}type'aarity3={i3:'a[@internal]}type'aarity4={i4:'a[@internal]}type'aarity5={i5:'a[@internal]}type'aarity6={i6:'a[@internal]}type'aarity7={i7:'a[@internal]}type'aarity8={i8:'a[@internal]}type'aarity9={i9:'a[@internal]}type'aarity10={i10:'a[@internal]}type'aarity11={i11:'a[@internal]}type'aarity12={i12:'a[@internal]}type'aarity13={i13:'a[@internal]}type'aarity14={i14:'a[@internal]}type'aarity15={i15:'a[@internal]}type'aarity16={i16:'a[@internal]}type'aarity17={i17:'a[@internal]}type'aarity18={i18:'a[@internal]}type'aarity19={i19:'a[@internal]}type'aarity20={i20:'a[@internal]}type'aarity21={i21:'a[@internal]}type'aarity22={i22:'a[@internal]}end(**/**)(* module MapperRt = Js_mapperRt *)moduleInternal=struct(* open Fn *)(* Use opaque instead of [._n] to prevent some optimizations happening *)end(**/**)type+'anull='aoptiontype+'aundefined='aoptiontype+'anullable='aoptionexternaltoOption:'anull->'aoption="%identity"externalnullToOption:'anull->'aoption="%identity"externalundefinedToOption:'anull->'aoption="%identity"externalfromOpt:'aoption->'aundefined="%identity"(* external undefined : 'a undefined = "#undefined" *)(** The same as [empty] {!Js.Undefined} will be compiled as [undefined]*)letundefined=None(* external null : 'a null = "#null" *)(** The same as [empty] in {!Js.Null} will be compiled as [null]*)letnull=Noneletempty=Nonetype(+'a,+'e)promise(* external eqNull : 'a -> 'a null -> bool = "%bs_equal_null" *)(* let eqNull : 'a -> 'a null -> bool = fun x -> x == None *)(* external eqUndefined : 'a -> 'a undefined -> bool = "%bs_equal_undefined" *)(* let eqUndefined : 'a -> 'a undefined -> bool = function
| Some _ -> false
| None -> true *)(* external eqNullable : 'a -> 'a nullable -> bool = "%bs_equal_nullable" *)(* let eqNullable : 'a -> 'a nullable -> bool = function
| Some _ -> false
| None -> true *)(** [typeof x] will be compiled as [typeof x] in JS
Please consider functions in {!Types} for a type safe way of reflection *)lettypeof_=notImplemented"Js""typeof"(** {4 operators }*)(* external unsafe_lt : 'a -> 'a -> bool = "#unsafe_lt" *)(** [unsafe_lt a b] will be compiled as [a < b].
It is marked as unsafe, since it is impossible
to give a proper semantics for comparision which applies to any type *)(* external unsafe_le : 'a -> 'a -> bool = "#unsafe_le" *)(** [unsafe_le a b] will be compiled as [a <= b].
See also {unsafe_lt} *)(* external unsafe_gt : 'a -> 'a -> bool = "#unsafe_gt" *)(** [unsafe_gt a b] will be compiled as [a > b].
See also {unsafe_lt} *)(* external unsafe_ge : 'a -> 'a -> bool = "#unsafe_ge" *)(** [unsafe_ge a b] will be compiled as [a >= b].
See also {unsafe_lt} *)(** {12 nested modules}*)moduleNull=structtype'at='anullexternaltoOption:'at->'aoption="%identity"externalfromOpt:'aoption->'at="%identity"letempty=Noneletreturna=SomealetgetUnsafea=matchtoOptionawithNone->assertfalse|Somea->alettest=functionNone->true|Some_->falseletgetExn_=notImplemented"Js.Null""getExn"letbind__=notImplemented"Js.Null""bind"letiter__=notImplemented"Js.Null""iter"letfromOption=fromOptletfrom_opt=fromOptendmoduleUndefined=structtype'at='aundefinedexternalreturn:'a->'at="%identity"letempty=NoneexternaltoOption:'at->'aoption="%identity"externalfromOpt:'aoption->'at="%identity"letgetExn_=notImplemented"Js.Undefined""getExn"letgetUnsafea=matchtoOptionawithNone->assertfalse|Somea->aletbind__=notImplemented"Js.Undefined""bind"letiter__=notImplemented"Js.Undefined""iter"lettestAny_=notImplemented"Js.Undefined""testAny"lettest_=notImplemented"Js.Undefined""test"letfromOption=fromOptletfrom_opt=fromOptendmoduleNullable=structtype'at='aoptionexternaltoOption:'at->'aoption="%identity"externalto_opt:'at->'aoption="%identity"letreturn:'a->'at=funx->SomexletisNullable:'at->bool=functionSome_->false|None->trueletnull:'at=Noneletundefined:'at=Noneletbindxf=matchto_optxwithNone->((x:'at):'bt)|Somex->return(fx)letiterxf=matchto_optxwithNone->()|Somex->fxletfromOptionx=matchxwithNone->undefined|Somex->returnxletfrom_opt=fromOptionendmoduleNull_undefined=NullablemoduleExn=structtypettypeexn+=|Errorofstring|EvalErrorofstring|RangeErrorofstring|ReferenceErrorofstring|SyntaxErrorofstring|TypeErrorofstring|UriErrorofstringletasJsExn_=notImplemented"Js.Exn""asJsExn"letstack_=notImplemented"Js.Exn""stack"letmessage_=notImplemented"Js.Exn""message"letname_=notImplemented"Js.Exn""name"letfileName_=notImplemented"Js.Exn""fileName"letanyToExnInternal_=notImplemented"Js.Exn""anyToExnInternal"letisCamlExceptionOrOpenVariant_=notImplemented"Js.Exn""isCamlExceptionOrOpenVariant"letraiseErrorstr=raise(Errorstr)letraiseEvalErrorstr=raise(EvalErrorstr)letraiseRangeErrorstr=raise(RangeErrorstr)letraiseReferenceErrorstr=raise(ReferenceErrorstr)letraiseSyntaxErrorstr=raise(SyntaxErrorstr)letraiseTypeErrorstr=raise(TypeErrorstr)letraiseUriErrorstr=raise(UriErrorstr)endmoduleArray:sig(** JavaScript Array API *)type'at='aarraytype'aarray_likevalfrom:'aarray_like->'aarrayvalfromMap:'aarray_like->f:('a->'b)->'barrayvalisArray:'a->boolvallength:'aarray->intvalcopyWithin:to_:int->?start:int->?end_:int->'at->'atvalfill:value:'a->?start:int->?end_:int->'at->'atvalpop:'at->'aoptionvalpush:value:'a->'at->intvalpushMany:values:'aarray->'at->intvalreverseInPlace:'at->'atvalshift:'at->'aoptionvalsortInPlace:'at->'atvalsortInPlaceWith:f:('a->'a->int)->'at->'atvalspliceInPlace:start:int->remove:int->add:'aarray->'at->'atvalremoveFromInPlace:start:int->'at->'atvalremoveCountInPlace:start:int->count:int->'at->'atvalunshift:value:'a->'at->intvalunshiftMany:values:'aarray->'at->intvalconcat:other:'at->'at->'atvalconcatMany:arrays:'atarray->'at->'atvalincludes:value:'a->'at->boolvaljoin:?sep:string->stringt->stringvalindexOf:value:'a->?start:int->'at->intvallastIndexOf:value:'a->'at->intvallastIndexOfFrom:value:'a->start:int->'at->intvalcopy:'at->'atvalslice:?start:int->?end_:int->'at->'atvaltoString:'at->stringvaltoLocaleString:'at->stringvalevery:f:('a->bool)->'at->boolvaleveryi:f:('a->int->bool)->'at->boolvalfilter:f:('a->bool)->'at->'atvalfilteri:f:('a->int->bool)->'at->'atvalfind:f:('a->bool)->'at->'aoptionvalfindi:f:('a->int->bool)->'at->'aoptionvalfindIndex:f:('a->bool)->'at->intvalfindIndexi:f:('a->int->bool)->'at->intvalforEach:f:('a->unit)->'at->unitvalforEachi:f:('a->int->unit)->'at->unitvalmap:f:('a->'b)->'at->'btvalmapi:f:('a->int->'b)->'at->'btvalreduce:f:('b->'a->'b)->init:'b->'at->'bvalreducei:f:('b->'a->int->'b)->init:'b->'at->'bvalreduceRight:f:('b->'a->'b)->init:'b->'at->'bvalreduceRighti:f:('b->'a->int->'b)->init:'b->'at->'bvalsome:f:('a->bool)->'at->boolvalsomei:f:('a->int->bool)->'at->boolvalunsafe_get:'aarray->int->'avalunsafe_set:'aarray->int->'a->unitend=structtype'at='aarraytype'aarray_likeletfrom_=notImplemented"Js.Array""from"letfromMap_~f:_=notImplemented"Js.Array""fromMap"(* This doesn't behave the same as melange-js, since it's a runtime check
so lists are represented as arrays in the runtime: isArray([1, 2]) == true *)letisArray(_arr:'a)=trueletlengtharr=Stdlib.Array.lengtharr(* Mutator functions *)letcopyWithin~to_:_?start:_?end_:__=notImplemented"Js.Array""copyWithin"letfill~value:_?start:_?end_:__=notImplemented"Js.Array""fill"letpop_=notImplemented"Js.Array""pop"letpush~value:__=notImplemented"Js.Array""push"letpushMany~values:__=notImplemented"Js.Array""pushMany"letreverseInPlace_=notImplemented"Js.Array""reverseInPlace"letsortInPlace_=notImplemented"Js.Array""sortInPlace"letsortInPlaceWith~f:__=notImplemented"Js.Array""sortInPlaceWith"letspliceInPlace~start:_~remove:_~add:__=notImplemented"Js.Array""spliceInPlace"letremoveFromInPlace~start:__=notImplemented"Js.Array""removeFromInPlace"letremoveCountInPlace~start:_~count:__=notImplemented"Js.Array""removeCountInPlace"letshift_=notImplemented"Js.Array""shift"letunshift~value:__=notImplemented"Js.Array""unshift"letunshiftMany~values:__=notImplemented"Js.Array""unshiftMany"(* Accessor functions *)letconcat~other:secondfirst=Stdlib.Array.appendfirstsecondletconcatMany~arraysarr=Stdlib.Array.concat(arr::Stdlib.Array.to_listarrays)letincludes~valuearr=Stdlib.Array.exists(funx->x=value)arrletindexOf~value?startarr=letrecauxidx=ifidx>=Stdlib.Array.lengtharrthen-1elseifarr.(idx)=valuethenidxelseaux(idx+1)inmatchstartwith|None->aux0|Somefrom->iffrom<0||from>=Stdlib.Array.lengtharrthen-1elseauxfromletjoin?separr=(* js bindings can really take in `'a array`, while native is constrained to `string array` *)matchsepwith|None->Stdlib.Array.to_listarr|>String.concat","|Somesep->Stdlib.Array.to_listarr|>String.concatsepletlastIndexOf~valuearr=letrecauxidx=ifidx<0then-1elseifarr.(idx)=valuethenidxelseaux(idx-1)inaux(Stdlib.Array.lengtharr-1)letlastIndexOfFrom~value~startarr=letrecauxidx=ifidx<0then-1elseifarr.(idx)=valuethenidxelseaux(idx-1)inifstart<0||start>=Stdlib.Array.lengtharrthen-1elseauxstartletslice?start?end_arr=letlen=Stdlib.Array.lengtharrinletstart=matchstartwithNone->0|Somes->sinletend_=matchend_withNone->Stdlib.Array.lengtharr|Somee->einlets=max0(ifstart<0thenlen+startelsestart)inlete=minlen(ifend_<0thenlen+end_elseend_)inifs>=ethen[||]elseStdlib.Array.subarrs(e-s)letcopy=Stdlib.Array.copylettoString_=notImplemented"Js.Array""toString"lettoLocaleString_=notImplemented"Js.Array""toLocaleString"(* Iteration functions *)leteveryi~farr=letlen=Stdlib.Array.lengtharrinletrecauxidx=ifidx>=lenthentrueelseiffarr.(idx)idxthenaux(idx+1)elsefalseinaux0letevery~farr=letlen=Stdlib.Array.lengtharrinletrecauxidx=ifidx>=lenthentrueelseiffarr.(idx)thenaux(idx+1)elsefalseinaux0letfilter~farr=arr|>Stdlib.Array.to_list|>List.filterf|>Stdlib.Array.of_listletfilteri~farr=arr|>Stdlib.Array.to_list|>List.filteri(funia->fai)|>Stdlib.Array.of_listletfindi~farr=letlen=Stdlib.Array.lengtharrinletrecauxidx=ifidx>=lenthenNoneelseiffarr.(idx)idxthenSomearr.(idx)elseaux(idx+1)inaux0letfind~farr=letlen=Stdlib.Array.lengtharrinletrecauxidx=ifidx>=lenthenNoneelseiffarr.(idx)thenSomearr.(idx)elseaux(idx+1)inaux0letfindIndexi~farr=letlen=Stdlib.Array.lengtharrinletrecauxidx=ifidx>=lenthen-1elseiffarr.(idx)idxthenidxelseaux(idx+1)inaux0letfindIndex~farr=letlen=Stdlib.Array.lengtharrinletrecauxidx=ifidx>=lenthen-1elseiffarr.(idx)thenidxelseaux(idx+1)inaux0letforEach~farr=Stdlib.Array.iterfarrletforEachi~farr=Stdlib.Array.iteri(funia->fai)arrletmap~farr=Stdlib.Array.mapfarrletmapi~farr=Stdlib.Array.mapi(funia->fai)arrletreduce~f~initarr=letr=refinitinfori=0tolengtharr-1dor:=f!r(Stdlib.Array.unsafe_getarri)done;!rletreducei~f~initarr=letr=refinitinfori=0tolengtharr-1dor:=f!r(Stdlib.Array.unsafe_getarri)idone;!rletreduceRight~f~initarr=letr=refinitinfori=lengtharr-1downto0dor:=f!r(Stdlib.Array.unsafe_getarri)done;!rletreduceRighti~f~initarr=letr=refinitinfori=lengtharr-1downto0dor:=f!r(Stdlib.Array.unsafe_getarri)idone;!rletsome~farr=letn=Stdlib.Array.lengtharrinletrecloopi=ifi=nthenfalseelseiff(Stdlib.Array.unsafe_getarri)thentrueelseloop(succi)inloop0letsomei~farr=letn=Stdlib.Array.lengtharrinletrecloopi=ifi=nthenfalseelseiff(Stdlib.Array.unsafe_getarri)ithentrueelseloop(succi)inloop0letunsafe_getarridx=Stdlib.Array.unsafe_getarridxletunsafe_setarridxitem=Stdlib.Array.unsafe_setarridxitemendmoduleRe:sigtypettyperesultvalcaptures:result->stringNullable.tarrayvalindex:result->intvalinput:result->stringvalfromString:string->tvalfromStringWithFlags:string->flags:string->tvalflags:t->stringvalglobal:t->boolvalignoreCase:t->boolvallastIndex:t->intvalsetLastIndex:t->int->unitvalmultiline:t->boolvalsource:t->stringvalsticky:t->boolvalunicode:t->boolvalexec:str:string->t->resultoptionvaltest:str:string->t->boolend=struct(** Provide bindings to Js regex expression *)(* The RegExp object *)typet=Quickjs.RegExp.t(* The result of a executing a RegExp on a string. *)typeresult=Quickjs.RegExp.result(* Maps with nullable since Melange does too: https://melange.re/v3.0.0/api/re/melange/Js/Re/index.html#val-captures *)letcaptures:result->stringnullablearray=funresult->Quickjs.RegExp.capturesresult|>Stdlib.Array.map(funx->Nullable.returnx)letindex:result->int=Quickjs.RegExp.indexletinput:result->string=Quickjs.RegExp.inputletsource:t->string=Quickjs.RegExp.sourceletfromString:string->t=funstr->matchQuickjs.RegExp.compilestr~flags:""with|Okregex->regex|Error(_,msg)->raise(Invalid_argumentmsg)letfromStringWithFlags:string->flags:string->t=funstr~flags->matchQuickjs.RegExp.compilestr~flagswith|Okregex->regex|Error(_,msg)->raise(Invalid_argumentmsg)letflags:t->string=funregexp->Quickjs.RegExp.flagsregexpletglobal:t->bool=funregexp->Quickjs.RegExp.globalregexpletignoreCase:t->bool=funregexp->Quickjs.RegExp.ignorecaseregexpletmultiline:t->bool=funregexp->Quickjs.RegExp.multilineregexpletsticky:t->bool=funregexp->Quickjs.RegExp.stickyregexpletunicode:t->bool=funregexp->Quickjs.RegExp.unicoderegexpletlastIndex:t->int=funregex->Quickjs.RegExp.lastIndexregexletsetLastIndex:t->int->unit=funregexindex->Quickjs.RegExp.setLastIndexregexindexletexec:str:string->t->resultoption=fun~strrex->matchQuickjs.RegExp.execrexstrwith|result->Someresult|exception_->Nonelettest_:t->string->bool=funregexpstr->Quickjs.RegExp.testregexpstrlettest:str:string->t->bool=fun~strregex->test_regexstrendmoduleString:sigtypet=stringvalmake:'a->tvalfromCharCode:int->tvalfromCharCodeMany:intarray->tvalfromCodePoint:int->tvalfromCodePointMany:intarray->tvallength:t->intvalget:t->int->tvalcharAt:index:int->t->tvalcharCodeAt:index:int->t->floatvalcodePointAt:index:int->t->intoptionvalconcat:other:t->t->tvalconcatMany:strings:tarray->t->tvalendsWith:suffix:t->?len:int->t->boolvalincludes:search:t->?start:int->t->boolvalindexOf:search:t->?start:int->t->intvallastIndexOf:search:t->?start:int->t->intvallocaleCompare:other:t->t->floatvalmatch_:regexp:Re.t->t->toptionarrayoptionvalnormalize:?form:[`NFC|`NFD|`NFKC|`NFKD]->t->tvalrepeat:count:int->t->tvalreplace:search:t->replacement:t->t->tvalreplaceByRe:regexp:Re.t->replacement:t->t->tvalunsafeReplaceBy0:regexp:Re.t->f:(t->int->t->t)->t->tvalunsafeReplaceBy1:regexp:Re.t->f:(t->t->int->t->t)->t->tvalunsafeReplaceBy2:regexp:Re.t->f:(t->t->t->int->t->t)->t->tvalunsafeReplaceBy3:regexp:Re.t->f:(t->t->t->t->int->t->t)->t->tvalsearch:regexp:Re.t->t->intvalslice:?start:int->?end_:int->t->tvalsplit:?sep:t->?limit:int->t->tarrayvalsplitByRe:regexp:Re.t->?limit:int->t->toptionarrayvalstartsWith:prefix:t->?start:int->t->boolvalsubstr:?start:int->?len:int->t->tvalsubstring:?start:int->?end_:int->t->tvaltoLowerCase:t->tvaltoLocaleLowerCase:t->tvaltoUpperCase:t->tvaltoLocaleUpperCase:t->tvaltrim:t->tvalanchor:name:t->t->tvallink:href:t->t->tend=structtypet=string(** JavaScript String API *)letmakewhatever=notImplemented"Js.String""make"letfromCharCodecode=letuchar=Uchar.of_intcodeinletchar_value=Uchar.to_charucharinStdlib.String.make1char_valueletfromCharCodeMany_=notImplemented"Js.String""fromCharCodeMany"letfromCodePointcode_point=letch=Char.chrcode_pointinStdlib.String.make1chletfromCodePointMany_=notImplemented"Js.String""fromCodePointMany"letlength=Stdlib.String.lengthletgetstrindex=letch=Stdlib.String.getstrindexinStdlib.String.make1ch(* TODO (davesnx): If the string contains characters outside the range [\u0000-\uffff], it will return the first 16-bit value at that position in the string. *)letcharAt~indexstr=ifindex<0||index>=Stdlib.String.lengthstrthen""elseletch=Stdlib.String.getstrindexinStdlib.String.make1chletcharCodeAt~index:ns=ifn<0||n>=Stdlib.String.lengthsthennanelsefloat_of_int(Stdlib.Char.code(Stdlib.String.getsn))letcodePointAt~indexstr=letstr_length=Stdlib.String.lengthstrinifindex>=0&&index<str_lengththenletuchar=Uchar.of_char(Stdlib.String.getstrindex)inSome(Uchar.to_intuchar)elseNoneletconcat~other:str2str1=Stdlib.String.concat""[str1;str2]letconcatMany~strings:manyoriginal=letmany_list=Stdlib.Array.to_listmanyinStdlib.String.concat""(original::many_list)letendsWith~suffix?lenstr=letstr_length=Stdlib.String.lengthstrinletend_idx=matchlenwithSomei->Stdlib.minstr_lengthi|None->str_lengthinletsub_str=Stdlib.String.substr0end_idxinStdlib.String.ends_with~suffixsub_strletincludes~search?startstr=letstr_length=Stdlib.String.lengthstrinletsearch_length=Stdlib.String.lengthsearchinletrecincludes_helperidx=ifidx+search_length>str_lengththenfalseelseifStdlib.String.substridxsearch_length=searchthentrueelseincludes_helper(idx+1)inletfrom=matchstartwithNone->0|Somef->finincludes_helperfromletindexOf~search?startstr=letstr_length=Stdlib.String.lengthstrinletsearch_length=Stdlib.String.lengthsearchinletrecindex_helperidx=ifidx+search_length>str_lengththen-1elseifStdlib.String.substridxsearch_length=searchthenidxelseindex_helper(idx+1)inletfrom=matchstartwithNone->0|Somef->finindex_helperfromletlastIndexOf~search?(start=max_int)str=letlen=String.lengthstrinletrecfind_indexi=ifi<0||i>startthen-1elseletsub_len=min(len-i)(String.lengthsearch)inifString.substrisub_len=searchthenielsefind_index(i-1)infind_index(min(len-1)start)letlocaleCompare~other:__=notImplemented"Js.String""localeCompare"letmatch_~regexpstr=letmatch_nextstrregex=matchRe.exec~strregexwith|None->None|Someresult->Some(Re.capturesresult)inletmatch_all:t->Re.t->tnullablearraynullable=funstrregex->matchmatch_nextstrregexwith|None->None|Someresult->(matchmatch_nextstrregexwith|None->Someresult|Somesecond->Some(Stdlib.Array.appendresultsecond))inifRe.globalregexpthenmatch_allstrregexpelsematch_nextstrregexpletnormalize?form:__=notImplemented"Js.String""normalize"(* TODO(davesnx): RangeError *)letrepeat~countstr=letrecrepeat'straccremaining=ifremaining<=0thenaccelserepeat'str(str^acc)(remaining-1)inrepeat'str""count(* If pattern is a string, only the first occurrence will be replaced.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace *)letreplace~search~replacementstr=letsearch_regexp=Str.regexp_stringsearchinStr.replace_firstsearch_regexpreplacementstrletreplaceByRe~regexp~replacementstr=letrecreplace_allstr=Re.setLastIndexregexp0;matchRe.exec~strregexpwith|None->str|SomeresultwhenStdlib.Array.length(Re.capturesresult)==0->str|Someresult->letmatches=Re.capturesresultinletmatched_str=Stdlib.Array.getmatches0|>Option.getinletprefix=Stdlib.String.substr0(Re.indexresult)inletsuffix_start=Re.indexresult+String.lengthmatched_strinletsuffix=Stdlib.String.substrsuffix_start(String.lengthstr-suffix_start)inRe.setLastIndexregexpsuffix_start;prefix^replacement^replace_allsuffixinletreplace_firststr=matchRe.exec~strregexpwith|None->str|Someresult->letmatches=Re.capturesresultinletmatched_str=Stdlib.Array.getmatches0|>Option.getinletprefix=Stdlib.String.substr0(Re.indexresult)inletsuffix_start=Re.indexresult+String.lengthmatched_strinletsuffix=Stdlib.String.substrsuffix_start(String.lengthstr-suffix_start)inprefix^replacement^suffixinifRe.globalregexpthenreplace_allstrelsereplace_firststrletunsafeReplaceBy0~regexp:_~f:__=notImplemented"Js.String""unsafeReplaceBy0"letunsafeReplaceBy1~regexp:_~f:__=notImplemented"Js.String""unsafeReplaceBy1"letunsafeReplaceBy2~regexp:_~f:__=notImplemented"Js.String""unsafeReplaceBy2"letunsafeReplaceBy3~regexp:_~f:__=notImplemented"Js.String""unsafeReplaceBy3"letsearch~regexp:__=notImplemented"Js.String""search"letslice?start?end_str=letstr_length=Stdlib.String.lengthstrinletstart=matchstartwithNone->0|Somes->sinletend_=matchend_withNone->str_length|Somes->sinletstart_idx=Stdlib.max0(Stdlib.minstartstr_length)inletend_idx=Stdlib.maxstart_idx(Stdlib.minend_str_length)inifstart_idx>=end_idxthen""elseStdlib.String.substrstart_idx(end_idx-start_idx)letsplit?sep?limit_str=notImplemented"Js.String""split"letsplitByRe~regexp?limitstr=letrev_arrayarr=arr|>Stdlib.Array.to_list|>Stdlib.List.rev|>Stdlib.Array.of_listinletrecsplit_allstracc=Re.setLastIndexregexp0;matchRe.exec~strregexpwith|SomeresultwhenStdlib.Array.length(Re.capturesresult)=0->Stdlib.Array.append[|Somestr|]acc|>rev_array|None->Stdlib.Array.append[|Somestr|]acc|>rev_array|Someresult->letmatches=Re.capturesresultinletmatched_str=Stdlib.Array.getmatches0|>Option.getinletprefix=String.substr0(Re.indexresult)inletsuffix_start=Re.indexresult+String.lengthmatched_strinletsuffix=String.substrsuffix_start(String.lengthstr-suffix_start)inletsuffix_matches=Stdlib.Array.append[|Someprefix|]accinsplit_allsuffixsuffix_matchesinletsplit_nextstracc=Re.setLastIndexregexp0;matchRe.exec~strregexpwith|None->Stdlib.Array.append[|Somestr|]acc|>rev_array|Someresult->letmatches=Re.capturesresultinletmatched_str=Stdlib.Array.getmatches0|>Option.getinletindex=Re.indexresultinletprefix=String.substr0indexinletsuffix_start=index+String.lengthmatched_strinletsuffix=String.substrsuffix_start(String.lengthstr-suffix_start)inStdlib.Array.append[|Someprefix|](split_allsuffixacc)inifRe.globalregexpthensplit_allstr[||]elsesplit_nextstr[||]letstartsWith~prefix?(start=0)str=letlen_prefix=String.lengthprefixinletlen_str=String.lengthstrinifstart<0||start>len_strthenfalseelseletreccompare_prefixi=i=len_prefix||i<len_str&&prefix.[i]=str.[start+i]&&compare_prefix(i+1)incompare_prefix0letsubstr?(start=0)?lenstr=letstr_length=Stdlib.String.lengthstrinletlen=matchlenwithNone->str_length|Somes->sinletstart_idx=max0(minstartstr_length)inletend_idx=min(start_idx+len)str_lengthinifstart_idx>=end_idxthen""elseStdlib.String.substrstart_idx(end_idx-start_idx)letsubstring?start?end_str=letstr_length=Stdlib.String.lengthstrinletstart=matchstartwithNone->0|Somes->sinletend_=matchend_withNone->str_length|Somes->sinletstart_idx=max0(minstartstr_length)inletend_idx=max0(minend_str_length)inifstart_idx>=end_idxthenStdlib.String.substrend_idx(start_idx-end_idx)elseStdlib.String.substrstart_idx(end_idx-start_idx)lettoLowerCase=Stdlib.String.lowercase_asciilettoLocaleLowerCase_=notImplemented"Js.String""toLocaleLowerCase"lettoUpperCase=Stdlib.String.uppercase_asciilettoLocaleUpperCase_=notImplemented"Js.String""toLocaleUpperCase"lettrimstr=letwhitespace=" \t\n\r"inletis_whitespacec=Stdlib.String.containswhitespacecinletlength=Stdlib.String.lengthstrinletrectrim_startidx=ifidx>=lengththenlengthelseifis_whitespace(Stdlib.String.getstridx)thentrim_start(idx+1)elseidxinletrectrim_endidx=ifidx<=0then0elseifis_whitespace(Stdlib.String.getstr(idx-1))thentrim_end(idx-1)elseidxinletstart_idx=trim_start0inletend_idx=trim_endlengthinifstart_idx>=end_idxthen""elseStdlib.String.substrstart_idx(end_idx-start_idx)letanchor~name:__=notImplemented"Js.String""anchor"letlink~href:__=notImplemented"Js.String""link"endmodulePromise=structtype+'at='aLwt.ttypeerror=exnletmake(fn:resolve:('a->unit)->reject:(exn->unit)->unit):'at=letpromise,resolver=Lwt.task()inletresolvevalue=Lwt.wakeup_laterresolvervalueinletrejectexn=Lwt.wakeup_later_exnresolverexninfn~resolve~reject;promiseletresolve=Lwt.returnletreject=Lwt.failletall(promises:'atarray):'aarrayt=Lwt.mapStdlib.Array.of_list(Lwt.all(Stdlib.Array.to_listpromises))letall2(a,b)=let%lwtres_a=ainlet%lwtres_b=binLwt.return(res_a,res_b)letall3(a,b,c)=let%lwtres_a=ainlet%lwtres_b=binlet%lwtres_c=cinLwt.return(res_a,res_b,res_c)letall4(a,b,c,d)=let%lwtres_a=ainlet%lwtres_b=binlet%lwtres_c=cinlet%lwtres_d=dinLwt.return(res_a,res_b,res_c,res_d)letall5(a,b,c,d,e)=let%lwtres_a=ainlet%lwtres_b=binlet%lwtres_c=cinlet%lwtres_d=dinlet%lwtres_e=einLwt.return(res_a,res_b,res_c,res_d,res_e)letall6(a,b,c,d,e,f)=let%lwtres_a=ainlet%lwtres_b=binlet%lwtres_c=cinlet%lwtres_d=dinlet%lwtres_e=einlet%lwtres_f=finLwt.return(res_a,res_b,res_c,res_d,res_e,res_f)letrace(promises:'atarray):'at=Lwt.pick(Stdlib.Array.to_listpromises)letthen_pfn=Lwt.bindfnpletcatch(handler:exn->'at)(promise:'at):'at=Lwt.catch(fun()->promise)handlerendmoduleDate:sigtypetvalvalueOf:t->floatvalmake:unit->tvalfromFloat:float->tvalfromString:string->tvalmakeWithYM:year:float->month:float->tvalmakeWithYMD:year:float->month:float->date:float->tvalmakeWithYMDH:year:float->month:float->date:float->hours:float->tvalmakeWithYMDHM:year:float->month:float->date:float->hours:float->minutes:float->tvalmakeWithYMDHMS:year:float->month:float->date:float->hours:float->minutes:float->seconds:float->tvalutcWithYM:year:float->month:float->floatvalutcWithYMD:year:float->month:float->date:float->floatvalutcWithYMDH:year:float->month:float->date:float->hours:float->floatvalutcWithYMDHM:year:float->month:float->date:float->hours:float->minutes:float->floatvalutcWithYMDHMS:year:float->month:float->date:float->hours:float->minutes:float->seconds:float->floatvalnow:unit->floatvalparseAsFloat:string->floatvalgetDate:t->floatvalgetDay:t->floatvalgetFullYear:t->floatvalgetHours:t->floatvalgetMilliseconds:t->floatvalgetMinutes:t->floatvalgetMonth:t->floatvalgetSeconds:t->floatvalgetTime:t->floatvalgetTimezoneOffset:t->floatvalgetUTCDate:t->floatvalgetUTCDay:t->floatvalgetUTCFullYear:t->floatvalgetUTCHours:t->floatvalgetUTCMilliseconds:t->floatvalgetUTCMinutes:t->floatvalgetUTCMonth:t->floatvalgetUTCSeconds:t->floatvalsetDate:float->t->floatvalsetFullYear:float->t->floatvalsetFullYearM:year:float->month:float->t->floatvalsetFullYearMD:year:float->month:float->date:float->t->floatvalsetHours:float->t->floatvalsetHoursM:hours:float->minutes:float->t->floatvalsetHoursMS:hours:float->minutes:float->seconds:float->t->floatvalsetHoursMSMs:hours:float->minutes:float->seconds:float->milliseconds:float->t->floatvalsetMilliseconds:float->t->floatvalsetMinutes:float->t->floatvalsetMinutesS:minutes:float->seconds:float->t->floatvalsetMinutesSMs:minutes:float->seconds:float->milliseconds:float->t->floatvalsetMonth:float->t->floatvalsetMonthD:month:float->date:float->t->floatvalsetSeconds:float->t->floatvalsetSecondsMs:seconds:float->milliseconds:float->t->floatvalsetTime:float->t->floatvalsetUTCDate:float->t->floatvalsetUTCFullYear:float->t->floatvalsetUTCFullYearM:year:float->month:float->t->floatvalsetUTCFullYearMD:year:float->month:float->date:float->t->floatvalsetUTCHours:float->t->floatvalsetUTCHoursM:hours:float->minutes:float->t->floatvalsetUTCHoursMS:hours:float->minutes:float->seconds:float->t->floatvalsetUTCHoursMSMs:hours:float->minutes:float->seconds:float->milliseconds:float->t->floatvalsetUTCMilliseconds:float->t->floatvalsetUTCMinutes:float->t->floatvalsetUTCMinutesS:minutes:float->seconds:float->t->floatvalsetUTCMinutesSMs:minutes:float->seconds:float->milliseconds:float->t->floatvalsetUTCMonth:float->t->floatvalsetUTCMonthD:month:float->date:float->t->floatvalsetUTCSeconds:float->t->floatvalsetUTCSecondsMs:seconds:float->milliseconds:float->t->floatvalsetUTCTime:float->t->floatvaltoDateString:t->stringvaltoISOString:t->stringvaltoJSON:t->stringoptionvaltoJSONUnsafe:t->stringvaltoLocaleDateString:t->stringvaltoLocaleString:t->stringvaltoLocaleTimeString:t->stringvaltoString:t->stringvaltoTimeString:t->stringvaltoUTCString:t->stringend=structtypet(** Provide bindings for JS Date *)(** returns the primitive value of this date, equivalent to getTime *)letvalueOf_t=notImplemented"Js.Date""valueOf"(** returns a date representing the current time *)letmake_=notImplemented"Js.Date""make"letfromFloat_=notImplemented"Js.Date""fromFloat"letfromString_=notImplemented"Js.Date""fromString"letmakeWithYM~year:_~month:_=notImplemented"Js.Date""makeWithYM"letmakeWithYMD~year:_~month:_~date:_=notImplemented"Js.Date""makeWithYMD"letmakeWithYMDH~year:_~month:_~date:_~hours:_=notImplemented"Js.Date""makeWithYMDH"letmakeWithYMDHM~year:_~month:_~date:_~hours:_~minutes:_=notImplemented"Js.Date""makeWithYMDHM"letmakeWithYMDHMS~year:_~month:_~date:_~hours:_~minutes:_~seconds:_=notImplemented"Js.Date""makeWithYMDHMS"letutcWithYM~year:_~month:_=notImplemented"Js.Date""utcWithYM"letutcWithYMD~year:_~month:_~date:_=notImplemented"Js.Date""utcWithYMD"letutcWithYMDH~year:_~month:_~date:_~hours:_=notImplemented"Js.Date""utcWithYMDH"letutcWithYMDHM~year:_~month:_~date:_~hours:_~minutes:_=notImplemented"Js.Date""utcWithYMDHM"letutcWithYMDHMS~year:_~month:_~date:_~hours:_~minutes:_~seconds:_=notImplemented"Js.Date""utcWithYMDHMS"(** returns the number of milliseconds since Unix epoch *)letnow_=notImplemented"Js.Date""now"(** returns NaN if passed invalid date string *)letparseAsFloat_=notImplemented"Js.Date""parseAsFloat"(** return the day of the month (1-31) *)letgetDate_=notImplemented"Js.Date""getDate"(** returns the day of the week (0-6) *)letgetDay_=notImplemented"Js.Date""getDay"letgetFullYear_=notImplemented"Js.Date""getFullYear"letgetHours_=notImplemented"Js.Date""getHours"letgetMilliseconds_=notImplemented"Js.Date""getMilliseconds"letgetMinutes_=notImplemented"Js.Date""getMinutes"(** returns the month (0-11) *)letgetMonth_=notImplemented"Js.Date""getMonth"letgetSeconds_=notImplemented"Js.Date""getSeconds"(** returns the number of milliseconds since Unix epoch *)letgetTime_=notImplemented"Js.Date""getTime"letgetTimezoneOffset_=notImplemented"Js.Date""getTimezoneOffset"(** return the day of the month (1-31) *)letgetUTCDate_=notImplemented"Js.Date""getUTCDate"(** returns the day of the week (0-6) *)letgetUTCDay_=notImplemented"Js.Date""getUTCDay"letgetUTCFullYear_=notImplemented"Js.Date""getUTCFullYear"letgetUTCHours_=notImplemented"Js.Date""getUTCHours"letgetUTCMilliseconds_=notImplemented"Js.Date""getUTCMilliseconds"letgetUTCMinutes_=notImplemented"Js.Date""getUTCMinutes"(** returns the month (0-11) *)letgetUTCMonth_=notImplemented"Js.Date""getUTCMonth"letgetUTCSeconds_=notImplemented"Js.Date""getUTCSeconds"letsetDate__=notImplemented"Js.Date""setDate"letsetFullYear_=notImplemented"Js.Date""setFullYear"letsetFullYearM~year:_~month:_=notImplemented"Js.Date""setFullYearM"letsetFullYearMD~year:_~month:_~date:_=notImplemented"Js.Date""setFullYearMD"letsetHours_=notImplemented"Js.Date""setHours"letsetHoursM~hours:_~minutes:_=notImplemented"Js.Date""setHoursM"letsetHoursMS~hours:_~minutes:_=notImplemented"Js.Date""setHoursMS"letsetHoursMSMs~hours:_~minutes:_~seconds:_~milliseconds:__=notImplemented"Js.Date""setHoursMSMs"letsetMilliseconds_=notImplemented"Js.Date""setMilliseconds"letsetMinutes_=notImplemented"Js.Date""setMinutes"letsetMinutesS~minutes:_=notImplemented"Js.Date""setMinutesS"letsetMinutesSMs~minutes:_=notImplemented"Js.Date""setMinutesSMs"letsetMonth_=notImplemented"Js.Date""setMonth"letsetMonthD~month:_~date:__=notImplemented"Js.Date""setMonthD"letsetSeconds_=notImplemented"Js.Date""setSeconds"letsetSecondsMs~seconds:_~milliseconds:__=notImplemented"Js.Date""setSecondsMs"letsetTime_=notImplemented"Js.Date""setTime"letsetUTCDate_=notImplemented"Js.Date""setUTCDate"letsetUTCFullYear_=notImplemented"Js.Date""setUTCFullYear"letsetUTCFullYearM~year:_~month:__=notImplemented"Js.Date""setUTCFullYearM"letsetUTCFullYearMD~year:_~month:_~date:__=notImplemented"Js.Date""setUTCFullYearMD"letsetUTCHours_=notImplemented"Js.Date""setUTCHours"letsetUTCHoursM~hours:_~minutes:_=notImplemented"Js.Date""setUTCHoursM"letsetUTCHoursMS~hours:_~minutes:_=notImplemented"Js.Date""setUTCHoursMS"letsetUTCHoursMSMs~hours:_~minutes:_~seconds:_~milliseconds:__=notImplemented"Js.Date""setUTCHoursMSMs"letsetUTCMilliseconds_=notImplemented"Js.Date""setUTCMilliseconds"letsetUTCMinutes_=notImplemented"Js.Date""setUTCMinutes"letsetUTCMinutesS~minutes:_=notImplemented"Js.Date""setUTCMinutesS"letsetUTCMinutesSMs~minutes:_=notImplemented"Js.Date""setUTCMinutesSMs"letsetUTCMonth_=notImplemented"Js.Date""setUTCMonth"letsetUTCMonthD~month:_~date:__=notImplemented"Js.Date""setUTCMonthD"letsetUTCSeconds_=notImplemented"Js.Date""setUTCSeconds"letsetUTCSecondsMs~seconds:_=notImplemented"Js.Date""setUTCSecondsMs"letsetUTCTime_=notImplemented"Js.Date""setUTCTime"lettoDateStringstring=notImplemented"Js.Date""toDateString"lettoISOStringstring=notImplemented"Js.Date""toISOString"lettoJSONstring=notImplemented"Js.Date""toJSON"lettoJSONUnsafestring=notImplemented"Js.Date""toJSONUnsafe"lettoLocaleDateStringstring=notImplemented"Js.Date""toLocaleDateString"(* TODO: has overloads with somewhat poor browser support *)lettoLocaleStringstring=notImplemented"Js.Date""toLocaleString"(* TODO: has overloads with somewhat poor browser support *)lettoLocaleTimeStringstring=notImplemented"Js.Date""toLocaleTimeString"(* TODO: has overloads with somewhat poor browser support *)lettoStringstring=notImplemented"Js.Date""toString"lettoTimeStringstring=notImplemented"Js.Date""toTimeString"lettoUTCStringstring=notImplemented"Js.Date""toUTCString"endmoduletypeDictionary=sig(* Implemented as an associative list *)type'attypekey=stringvalget:'at->key->'anullablevalunsafeGet:'at->key->'avalset:'at->key->'a->unitvalkeys:'at->keyarrayvalempty:unit->'atvalunsafeDeleteKey:keyt->key->unitvalentries:'at->(key*'a)arrayvalvalues:'at->'aarrayvalfromList:(key*'a)list->'atvalfromArray:(key*'a)array->'atvalmap:f:('a->'b)->'at->'btendmoduleDict:Dictionary=struct(** Provide utilities for JS dictionary object *)typekey=stringtype'at=(key,'a)Hashtbl.tletempty():'at=Hashtbl.create10letentries(dict:'at):(string*'a)array=Hashtbl.fold(funkvacc->(k,v)::acc)dict[]|>Stdlib.Array.of_listletget(dict:'at)(k:key):'aoption=trySome(Hashtbl.finddictk)withNot_found->Noneletmap~(f:'a->'b)(dict:'at)=Hashtbl.fold(funkvacc->Hashtbl.addacck(fv);acc)dict(empty())letset(dict:'at)(k:key)(x:'a):unit=Hashtbl.replacedictkxletfromList(lst:(key*'a)list):'at=letlength=Stdlib.List.lengthlstinletdict=Hashtbl.createlengthinStdlib.List.iter(fun(k,v)->Hashtbl.adddictkv)lst;dictletfromArray(arr:(key*'a)array):'at=letlength=Stdlib.Array.lengtharrinletdict=Hashtbl.createlengthinStdlib.Array.iter(fun(k,v)->Hashtbl.adddictkv)arr;dictletkeys(dict:'at)=Hashtbl.fold(funk_acc->k::acc)dict[]|>Stdlib.Array.of_listletvalues(dict:'at)=Hashtbl.fold(fun_kvalueacc->value::acc)dict[]|>Stdlib.Array.of_listletunsafeGet(dict:'at)(k:key):'a=Hashtbl.finddictkletunsafeDeleteKey(dict:'at)(key:key)=Hashtbl.removedictkeyendmoduleGlobal:sig(** Contains functions available in the global scope
([window] in a browser context) *)typeintervalId(** Identify an interval started by {! setInterval} *)typetimeoutId(** Identify timeout started by {! setTimeout} *)valclearInterval:intervalId->unitvalclearTimeout:timeoutId->unitvalsetInterval:f:(unit->unit)->int->intervalIdvalsetIntervalFloat:f:(unit->unit)->float->intervalIdvalsetTimeout:f:(unit->unit)->int->timeoutIdvalsetTimeoutFloat:f:(unit->unit)->float->timeoutIdvalencodeURI:string->stringvaldecodeURI:string->stringvalencodeURIComponent:string->stringvaldecodeURIComponent:string->stringend=structtypeintervalIdtypetimeoutIdletclearInterval_intervalId=notImplemented"Js.Global""clearInterval"letclearTimeout_timeoutId=notImplemented"Js.Global""clearTimeout"letsetInterval~f:__=notImplemented"Js.Global""setInterval"letsetIntervalFloat~f:__=notImplemented"Js.Global""setInterval"letsetTimeout~f:__=notImplemented"Js.Global""setTimeout"letsetTimeoutFloat~f:__=notImplemented"Js.Global""setTimeout"letencodeURI_string=notImplemented"Js.Global""encodeURI"letdecodeURI_string=notImplemented"Js.Global""decodeURI"letencodeURIComponent_string=notImplemented"Js.Global""encodeURIComponent"letdecodeURIComponent_string=notImplemented"Js.Global""decodeURIComponent"endmoduleTypes=struct(** Provide utilities for manipulating JS types *)typesymbol(**Js symbol type only available in ES6 *)typebigint_val(** Js bigint type only available in ES2020 *)typeobj_valtypeundefined_val(** This type has only one value [undefined] *)typenull_val(** This type has only one value [null] *)typefunction_valtype_t=|Undefined:undefined_valt|Null:null_valt|Boolean:boolt|Number:floatt|String:stringt|Function:function_valt|Object:obj_valt|Symbol:symbolt|BigInt:bigint_valt(** {[
test "x" String = true
]}*)lettest__=notImplemented"Js.Types""test"typetagged_t=|JSFalse|JSTrue|JSNull|JSUndefined|JSNumberoffloat|JSStringofstring|JSFunctionoffunction_val|JSObjectofobj_val|JSSymbolofsymbol|JSBigIntofbigint_valletclassify_=notImplemented"Js.Types""classify"endmoduleJson=struct(* Efficient JSON encoding using JavaScript API *)typettype_kind=|String:String.tkind|Number:floatkind|Object:tDict.tkind|Array:tarraykind|Boolean:boolkind|Null:Types.null_valkindtypetagged_t=|JSONFalse|JSONTrue|JSONNull|JSONStringofstring|JSONNumberoffloat|JSONObjectoftDict.t|JSONArrayoftarrayletclassify(_x:t):tagged_t=notImplemented"Js.Json""classify"lettest_:bool=notImplemented"Js.Json""test"letdecodeStringjson=notImplemented"Js.Json""decodeString"letdecodeNumberjson=notImplemented"Js.Json""decodeNumber"letdecodeObjectjson=notImplemented"Js.Json""decodeObject"letdecodeArrayjson=notImplemented"Js.Json""decodeArray"letdecodeBoolean(json:t)=notImplemented"Js.Json""decodeBoolean"letdecodeNulljson=notImplemented"Js.Json""decodeNull"letparseExn_=notImplemented"Js.Json""parseExn"letstringifyAny_=notImplemented"Js.Json""stringifyAny"letnull_=notImplemented"Js.Json""null"letstring_=notImplemented"Js.Json""string"letnumber_=notImplemented"Js.Json""number"letboolean_=notImplemented"Js.Json""boolean"letobject__=notImplemented"Js.Json""object_"letarray_=notImplemented"Js.Json""array"letstringArray_=notImplemented"Js.Json""stringArray"letnumberArray_=notImplemented"Js.Json""numberArray"letbooleanArray_=notImplemented"Js.Json""booleanArray"letobjectArray_=notImplemented"Js.Json""objectArray"letstringify_=notImplemented"Js.Json""stringify"letstringifyWithSpace_=notImplemented"Js.Json""stringifyWithSpace"letpatch_=notImplemented"Js.Json""patch"letserializeExn(_x:t):string=notImplemented"Js.Json""serializeExn"letdeserializeUnsafe(s:string):'a=notImplemented"Js.Json""mplemented"endmoduleMath:sigval_E:floatval_LN2:floatval_LN10:floatval_LOG2E:floatval_LOG10E:floatval_PI:floatval_SQRT1_2:floatval_SQRT2:floatvalabs_int:int->intvalabs_float:float->floatvalacos:float->floatvalacosh:float->floatvalasin:float->floatvalasinh:float->floatvalatan:float->floatvalatanh:float->floatvalatan2:y:float->x:float->floatvalcbrt:float->floatvalunsafe_ceil_int:float->intvalceil_int:float->intvalceil_float:float->floatvalclz32:int->intvalcos:float->floatvalcosh:float->floatvalexp:float->floatvalexpm1:float->floatvalunsafe_floor_int:float->intvalfloor_int:float->intvalfloor_float:float->floatvalfround:float->floatvalhypot:float->float->floatvalhypotMany:floatarray->floatvalimul:int->int->intvallog:float->floatvallog1p:float->floatvallog10:float->floatvallog2:float->floatvalmax_int:int->int->intvalmaxMany_int:intarray->intvalmax_float:float->float->floatvalmaxMany_float:floatarray->floatvalmin_int:int->int->intvalminMany_int:intarray->intvalmin_float:float->float->floatvalminMany_float:floatarray->floatvalpow_float:base:float->exp:float->floatvalrandom:unit->floatvalrandom_int:int->int->intvalunsafe_round:float->intvalround:float->floatvalsign_int:int->intvalsign_float:float->floatvalsin:float->floatvalsinh:float->floatvalsqrt:float->floatvaltan:float->floatvaltanh:float->floatvalunsafe_trunc:float->intvaltrunc:float->floatend=struct(** JavaScript Math API *)(** Euler's number *)let_E=2.718281828459045(** natural logarithm of 2 *)let_LN2=0.6931471805599453(** natural logarithm of 10 *)let_LN10=2.302585092994046(** base 2 logarithm of E *)let_LOG2E=1.4426950408889634(** base 10 logarithm of E *)let_LOG10E=0.4342944819032518(** Pi... (ratio of the circumference and diameter of a circle) *)let_PI=3.141592653589793(** square root of 1/2 *)let_SQRT1_2=0.7071067811865476(** square root of 2 *)let_SQRT2=1.41421356237(** absolute value *)letabs_int_=notImplemented"Js.Math""abs_int"letabs_float_=notImplemented"Js.Math""abs_float"letacos_=notImplemented"Js.Math""acos"letacosh_=notImplemented"Js.Math""acosh"letasin_=notImplemented"Js.Math""asin"letasinh_=notImplemented"Js.Math""asinh"letatan_=notImplemented"Js.Math""atan"letatanh_=notImplemented"Js.Math""atanh"letatan2~y:_~x:_=notImplemented"Js.Math""atan2"letcbrt_=notImplemented"Js.Math""cbrt"letunsafe_ceil_int_=notImplemented"Js.Math""unsafe_ceil_int"letceil_int_=notImplemented"Js.Math""ceil_int"letceil_float_=notImplemented"Js.Math""ceil_float"letclz32_=notImplemented"Js.Math""clz32"letcos=cosletcosh_=notImplemented"Js.Math""cosh"letexp_=notImplemented"Js.Math""exp"letexpm1_=notImplemented"Js.Math""expm1"letunsafe_floor_int_=notImplemented"Js.Math""unsafe_floor_int"letfloor_int_f=notImplemented"Js.Math""floor_int"letfloor_float_=notImplemented"Js.Math""floor_float"letfround_=notImplemented"Js.Math""fround"lethypot_=notImplemented"Js.Math""hypot"lethypotMany_=notImplemented"Js.Math""hypotMany"letimul_=notImplemented"Js.Math""imul"letlog_=notImplemented"Js.Math""log"letlog1p_=notImplemented"Js.Math""log1p"letlog10_=notImplemented"Js.Math""log10"letlog2_=notImplemented"Js.Math""log2"letmax_int_=notImplemented"Js.Math""max_int"letmaxMany_int_=notImplemented"Js.Math""maxMany_int"letmax_float_=notImplemented"Js.Math""max_float"letmaxMany_float_=notImplemented"Js.Math""maxMany_float"letmin_int_=notImplemented"Js.Math""min_int"letminMany_int_=notImplemented"Js.Math""minMany_int"letmin_float_=notImplemented"Js.Math""min_float"letminMany_float_=notImplemented"Js.Math""minMany_float"letpow_float~base:_~exp:_=notImplemented"Js.Math""pow_float"letrandom_=notImplemented"Js.Math""random"letrandom_int_min_max=notImplemented"Js.Math""random_int"letunsafe_round_=notImplemented"Js.Math""unsafe_round"letround_=notImplemented"Js.Math""round"letsign_int_=notImplemented"Js.Math""sign_int"letsign_float_=notImplemented"Js.Math""sign_float"letsin=sinletsinh_=notImplemented"Js.Math""sinh"letsqrt_=notImplemented"Js.Math""sqrt"lettan_=notImplemented"Js.Math""tan"lettanh_=notImplemented"Js.Math""tanh"letunsafe_trunc_=notImplemented"Js.Math""unsafe_trunc"lettrunc_=notImplemented"Js.Math""trunc"endmoduleObj=struct(** Provide utilities for {!Js.t} *)letempty_=notImplemented"Js.Obj""empty"letassign__=notImplemented"Js.Obj""assign"letkeys_=notImplemented"Js.Obj""keys"endmoduleTyped_array=struct(** Provide bindings for JS typed array *)moduleUint16Array=structtypetendmoduleUint8ClampedArray=structtypetendmoduleFloat32Array=structtypetendendmoduleTypedArray2=struct(** Provide bindings for JS typed array *)endmoduleFloat:sig(** Provides functions for inspecting and manipulating [float]s *)typet=floatval_NaN:tvalisNaN:t->boolvalisFinite:t->boolvaltoExponential:?digits:int->t->stringvaltoFixed:?digits:int->t->stringvaltoPrecision:?digits:int->t->stringvaltoString:?radix:int->t->stringvalfromString:string->tend=structtypet=floatlet_NaN=Stdlib.Float.nanletisNaNfloat=Stdlib.Float.is_nanfloatletisFinitefloat=Stdlib.Float.is_finitefloatlettoExponential?digits:__=notImplemented"Js.Float""toExponential"lettoFixed?digits:__=notImplemented"Js.Float""toFixed"lettoPrecision?digits:__=notImplemented"Js.Float""toPrecision"lettoString?radixf=matchradixwith|None->(* round x rounds x to the nearest integer with ties (fractional values of 0.5) rounded away from zero, regardless of the current rounding direction. If x is an integer, +0., -0., nan, or infinite, x itself is returned.
On 64-bit mingw-w64, this function may be emulated owing to a bug in the C runtime library (CRT) on this platform. *)(* if round(f) == f, print the integer (since string_of_float 1.0 => "1.") *)ifStdlib.Float.equal(Stdlib.Float.roundf)fthenf|>int_of_float|>string_of_intelsePrintf.sprintf"%g"f|Some_->notImplemented"Js.Float""toString ~radix"letfromString=Stdlib.float_of_stringendmoduleInt:sig(** Provides functions for inspecting and manipulating [int]s *)typet=intvaltoExponential:?digits:t->t->stringvaltoPrecision:?digits:t->t->stringvaltoString:?radix:t->t->stringvaltoFloat:t->floatvalequal:t->t->boolvalmax:tvalmin:tend=structtypet=intlettoExponential?digits:__=notImplemented"Js.Int""toExponential"lettoPrecision?digits:__=notImplemented"Js.Int""toPrecision"lettoString?radixint=matchradixwith|None->Stdlib.string_of_intint|Some_->notImplemented"Js.Int""toString ~radix"lettoFloatint=Stdlib.float_of_intintletequal=Stdlib.Int.equalletmax=2147483647letmin=-2147483648endmoduleBigint=struct(** Provide utilities for bigint *)endmoduleVector=struct(** Provide utilities for Vector *)type'at='aarrayletfilterInPlace_=notImplemented"Js.Vector""filterInPlace"letempty_=notImplemented"Js.Vector""empty"letpushBack_=notImplemented"Js.Vector""pushBack"letcopy_=notImplemented"Js.Vector""copy"letmemByRef_=notImplemented"Js.Vector""memByRef"letiter_=notImplemented"Js.Vector""iter"letiteri_=notImplemented"Js.Vector""iteri"lettoList_=notImplemented"Js.Vector""toList"letmap_=notImplemented"Js.Vector""map"letmapi_=notImplemented"Js.Vector""mapi"letfoldLeft_=notImplemented"Js.Vector""foldLeft"letfoldRight_=notImplemented"Js.Vector""foldRight"externallength:'at->int="%array_length"externalget:'at->int->'a="%array_safe_get"externalset:'at->int->'a->unit="%array_safe_set"externalmake:int->'a->'at="caml_make_vect"letinit_=notImplemented"Js.Vector""init"letappend_=notImplemented"Js.Vector""append"externalunsafe_get:'at->int->'a="%array_unsafe_get"externalunsafe_set:'at->int->'a->unit="%array_unsafe_set"endmoduleConsole=structletlog_=()letlog2__=()letlog3___=()letlog4____=()letlogMany_arr=()letinfo=logletinfo2=log2letinfo3=log3letinfo4=log4letinfoMany=logManyleterror=logleterror2=log2leterror3=log3leterror4=log4leterrorMany=logManyletwarn=logletwarn2=log2letwarn3=log3letwarn4=log4letwarnMany=logManylettrace()=()lettimeStart_=()lettimeEnd_=()endletlog=Console.logletlog2=Console.log2letlog3=Console.log3letlog4=Console.log4letlogMany=Console.logManymoduleSet=struct(** Provides bindings for ES6 Set *)type'atendmoduleWeakSet=struct(** Provides bindings for ES6 WeakSet *)type'atendmoduleMap=struct(** Provides bindings for ES6 Map *)type('k,'v)tendmoduleWeakMap=struct(** Provides bindings for ES6 WeakMap *)type('k,'v)tend