feat: typechecking tests

This commit is contained in:
2026-06-27 00:37:01 +02:00
parent a9925ac2ec
commit 408806d17b
28 changed files with 2091 additions and 1456 deletions
+1
View File
@@ -11,6 +11,7 @@ node_modules
dist dist
dist-ssr dist-ssr
tests/generated tests/generated
coverage/
*.local *.local
# Editor directories and files # Editor directories and files
+219 -216
View File
@@ -1,257 +1,260 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<coverage generated="1782440391724" clover="3.2.0"> <coverage generated="1782513273134" clover="3.2.0">
<project timestamp="1782440391724" name="All files"> <project timestamp="1782513273134" name="All files">
<metrics statements="207" coveredstatements="118" conditionals="48" coveredconditionals="23" methods="107" coveredmethods="19" elements="362" coveredelements="160" complexity="0" loc="207" ncloc="207" packages="4" files="11" classes="11"/> <metrics statements="207" coveredstatements="205" conditionals="48" coveredconditionals="48" methods="107" coveredmethods="103" elements="362" coveredelements="356" complexity="0" loc="207" ncloc="207" packages="4" files="12" classes="12"/>
<package name="src"> <package name="src">
<metrics statements="9" coveredstatements="4" conditionals="2" coveredconditionals="0" methods="4" coveredmethods="1"/> <metrics statements="9" coveredstatements="9" conditionals="2" coveredconditionals="2" methods="4" coveredmethods="4"/>
<file name="index.ts" path="/home/anton/Projects/fluent/src/index.ts"> <file name="index.ts" path="/home/anton/Projects/fluent/src/index.ts">
<metrics statements="2" coveredstatements="2" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/> <metrics statements="2" coveredstatements="2" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
<line num="4" count="1" type="stmt"/> <line num="4" count="3" type="stmt"/>
<line num="5" count="1" type="stmt"/> <line num="5" count="3" type="stmt"/>
</file> </file>
<file name="internal.ts" path="/home/anton/Projects/fluent/src/internal.ts"> <file name="internal.ts" path="/home/anton/Projects/fluent/src/internal.ts">
<metrics statements="6" coveredstatements="1" conditionals="2" coveredconditionals="0" methods="4" coveredmethods="1"/> <metrics statements="6" coveredstatements="6" conditionals="2" coveredconditionals="2" methods="4" coveredmethods="4"/>
<line num="8" count="1" type="stmt"/> <line num="8" count="9" type="stmt"/>
<line num="14" count="0" type="stmt"/> <line num="14" count="2" type="stmt"/>
<line num="15" count="0" type="stmt"/> <line num="15" count="2" type="stmt"/>
<line num="23" count="0" type="cond" truecount="0" falsecount="2"/> <line num="23" count="57" type="cond" truecount="2" falsecount="0"/>
<line num="24" count="0" type="stmt"/> <line num="24" count="2" type="stmt"/>
<line num="26" count="0" type="stmt"/> <line num="26" count="4" type="stmt"/>
</file> </file>
<file name="registry.ts" path="/home/anton/Projects/fluent/src/registry.ts"> <file name="registry.ts" path="/home/anton/Projects/fluent/src/registry.ts">
<metrics statements="1" coveredstatements="1" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/> <metrics statements="1" coveredstatements="1" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
<line num="10" count="1" type="stmt"/> <line num="10" count="3" type="stmt"/>
</file> </file>
</package> </package>
<package name="src.base"> <package name="src.base">
<metrics statements="7" coveredstatements="7" conditionals="0" coveredconditionals="0" methods="3" coveredmethods="3"/> <metrics statements="7" coveredstatements="7" conditionals="0" coveredconditionals="0" methods="3" coveredmethods="3"/>
<file name="hkt.ts" path="/home/anton/Projects/fluent/src/base/hkt.ts">
<metrics statements="0" coveredstatements="0" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
</file>
<file name="index.ts" path="/home/anton/Projects/fluent/src/base/index.ts"> <file name="index.ts" path="/home/anton/Projects/fluent/src/base/index.ts">
<metrics statements="6" coveredstatements="6" conditionals="0" coveredconditionals="0" methods="2" coveredmethods="2"/> <metrics statements="6" coveredstatements="6" conditionals="0" coveredconditionals="0" methods="2" coveredmethods="2"/>
<line num="31" count="1" type="stmt"/> <line num="31" count="9" type="stmt"/>
<line num="33" count="2" type="stmt"/> <line num="33" count="251" type="stmt"/>
<line num="35" count="2" type="stmt"/> <line num="35" count="251" type="stmt"/>
<line num="37" count="10" type="stmt"/> <line num="37" count="416" type="stmt"/>
<line num="40" count="2" type="stmt"/> <line num="40" count="251" type="stmt"/>
<line num="43" count="1" type="stmt"/> <line num="43" count="9" type="stmt"/>
</file> </file>
<file name="mixin.ts" path="/home/anton/Projects/fluent/src/base/mixin.ts"> <file name="mixin.ts" path="/home/anton/Projects/fluent/src/base/mixin.ts">
<metrics statements="1" coveredstatements="1" conditionals="0" coveredconditionals="0" methods="1" coveredmethods="1"/> <metrics statements="1" coveredstatements="1" conditionals="0" coveredconditionals="0" methods="1" coveredmethods="1"/>
<line num="24" count="5" type="stmt"/> <line num="24" count="22" type="stmt"/>
</file> </file>
</package> </package>
<package name="src.mixin"> <package name="src.mixin">
<metrics statements="159" coveredstatements="80" conditionals="36" coveredconditionals="13" methods="89" coveredmethods="9"/> <metrics statements="159" coveredstatements="157" conditionals="36" coveredconditionals="36" methods="89" coveredmethods="85"/>
<file name="array.ts" path="/home/anton/Projects/fluent/src/mixin/array.ts"> <file name="array.ts" path="/home/anton/Projects/fluent/src/mixin/array.ts">
<metrics statements="41" coveredstatements="19" conditionals="13" coveredconditionals="4" methods="24" coveredmethods="3"/> <metrics statements="41" coveredstatements="41" conditionals="13" coveredconditionals="13" methods="24" coveredmethods="24"/>
<line num="133" count="2" type="cond" truecount="2" falsecount="0"/> <line num="133" count="80" type="cond" truecount="2" falsecount="0"/>
<line num="463" count="1" type="stmt"/> <line num="467" count="4" type="stmt"/>
<line num="464" count="2" type="cond" truecount="2" falsecount="0"/> <line num="468" count="80" type="cond" truecount="2" falsecount="0"/>
<line num="466" count="1" type="stmt"/> <line num="470" count="52" type="stmt"/>
<line num="467" count="0" type="stmt"/> <line num="471" count="8" type="stmt"/>
<line num="470" count="1" type="stmt"/> <line num="474" count="52" type="stmt"/>
<line num="471" count="0" type="stmt"/> <line num="475" count="2" type="stmt"/>
<line num="472" count="0" type="stmt"/> <line num="476" count="2" type="stmt"/>
<line num="475" count="1" type="stmt"/> <line num="479" count="52" type="stmt"/>
<line num="476" count="0" type="stmt"/> <line num="480" count="3" type="stmt"/>
<line num="477" count="0" type="cond" truecount="0" falsecount="2"/> <line num="481" count="3" type="cond" truecount="2" falsecount="0"/>
<line num="478" count="0" type="stmt"/> <line num="482" count="2" type="stmt"/>
<line num="485" count="1" type="stmt"/> <line num="489" count="52" type="stmt"/>
<line num="486" count="0" type="stmt"/> <line num="490" count="2" type="stmt"/>
<line num="489" count="1" type="stmt"/> <line num="493" count="52" type="stmt"/>
<line num="490" count="0" type="stmt"/> <line num="494" count="2" type="stmt"/>
<line num="492" count="1" type="stmt"/> <line num="496" count="52" type="stmt"/>
<line num="493" count="1" type="stmt"/> <line num="497" count="52" type="stmt"/>
<line num="495" count="0" type="stmt"/> <line num="499" count="2" type="stmt"/>
<line num="496" count="0" type="cond" truecount="0" falsecount="2"/> <line num="500" count="8" type="cond" truecount="2" falsecount="0"/>
<line num="501" count="1" type="stmt"/> <line num="505" count="52" type="stmt"/>
<line num="505" count="1" type="stmt"/> <line num="509" count="2" type="stmt"/>
<line num="507" count="1" type="stmt"/> <line num="511" count="52" type="stmt"/>
<line num="508" count="1" type="stmt"/> <line num="512" count="52" type="stmt"/>
<line num="513" count="0" type="stmt"/> <line num="517" count="2" type="stmt"/>
<line num="517" count="1" type="stmt"/> <line num="521" count="52" type="stmt"/>
<line num="518" count="0" type="stmt"/> <line num="522" count="2" type="stmt"/>
<line num="521" count="1" type="stmt"/> <line num="525" count="52" type="stmt"/>
<line num="528" count="0" type="stmt"/> <line num="532" count="2" type="stmt"/>
<line num="529" count="0" type="stmt"/> <line num="533" count="23" type="stmt"/>
<line num="532" count="1" type="stmt"/> <line num="536" count="52" type="stmt"/>
<line num="533" count="1" type="stmt"/> <line num="537" count="52" type="stmt"/>
<line num="535" count="0" type="cond" truecount="0" falsecount="1"/> <line num="539" count="16" type="cond" truecount="1" falsecount="0"/>
<line num="540" count="0" type="stmt"/> <line num="544" count="1" type="stmt"/>
<line num="541" count="0" type="cond" truecount="0" falsecount="2"/> <line num="545" count="8" type="cond" truecount="2" falsecount="0"/>
<line num="545" count="0" type="cond" truecount="0" falsecount="1"/> <line num="549" count="18" type="cond" truecount="1" falsecount="0"/>
<line num="550" count="0" type="stmt"/> <line num="554" count="11" type="stmt"/>
<line num="553" count="0" type="cond" truecount="0" falsecount="1"/> <line num="557" count="16" type="cond" truecount="1" falsecount="0"/>
<line num="558" count="0" type="stmt"/> <line num="562" count="10" type="stmt"/>
<line num="562" count="1" type="stmt"/> <line num="566" count="52" type="stmt"/>
<line num="563" count="0" type="stmt"/> <line num="567" count="1" type="stmt"/>
</file> </file>
<file name="awaited.ts" path="/home/anton/Projects/fluent/src/mixin/awaited.ts"> <file name="awaited.ts" path="/home/anton/Projects/fluent/src/mixin/awaited.ts">
<metrics statements="26" coveredstatements="2" conditionals="7" coveredconditionals="1" methods="11" coveredmethods="1"/> <metrics statements="26" coveredstatements="24" conditionals="7" coveredconditionals="7" methods="11" coveredmethods="9"/>
<line num="14" count="0" type="stmt"/> <line num="14" count="0" type="stmt"/>
<line num="18" count="0" type="stmt"/> <line num="18" count="0" type="stmt"/>
<line num="48" count="1" type="stmt"/> <line num="48" count="4" type="stmt"/>
<line num="49" count="2" type="cond" truecount="1" falsecount="1"/> <line num="49" count="45" type="cond" truecount="2" falsecount="0"/>
<line num="51" count="0" type="stmt"/> <line num="51" count="3" type="stmt"/>
<line num="52" count="0" type="stmt"/> <line num="52" count="1" type="stmt"/>
<line num="55" count="0" type="stmt"/> <line num="55" count="3" type="stmt"/>
<line num="58" count="0" type="stmt"/> <line num="58" count="1" type="stmt"/>
<line num="59" count="0" type="stmt"/> <line num="59" count="1" type="stmt"/>
<line num="62" count="0" type="stmt"/> <line num="62" count="1" type="stmt"/>
<line num="64" count="0" type="stmt"/> <line num="64" count="1" type="stmt"/>
<line num="66" count="0" type="cond" truecount="0" falsecount="2"/> <line num="66" count="2" type="cond" truecount="2" falsecount="0"/>
<line num="67" count="0" type="stmt"/> <line num="67" count="1" type="stmt"/>
<line num="68" count="0" type="stmt"/> <line num="68" count="1" type="stmt"/>
<line num="69" count="0" type="stmt"/> <line num="69" count="1" type="stmt"/>
<line num="72" count="0" type="stmt"/> <line num="72" count="1" type="stmt"/>
<line num="73" count="0" type="stmt"/> <line num="73" count="1" type="stmt"/>
<line num="74" count="0" type="stmt"/> <line num="74" count="1" type="stmt"/>
<line num="75" count="0" type="stmt"/> <line num="75" count="1" type="stmt"/>
<line num="80" count="0" type="stmt"/> <line num="80" count="1" type="stmt"/>
<line num="84" count="0" type="stmt"/> <line num="84" count="1" type="stmt"/>
<line num="87" count="0" type="stmt"/> <line num="87" count="1" type="stmt"/>
<line num="88" count="0" type="stmt"/> <line num="88" count="1" type="stmt"/>
<line num="94" count="0" type="stmt"/> <line num="94" count="1" type="stmt"/>
<line num="96" count="0" type="stmt"/> <line num="96" count="1" type="stmt"/>
<line num="100" count="0" type="stmt"/> <line num="100" count="1" type="stmt"/>
</file> </file>
<file name="base.ts" path="/home/anton/Projects/fluent/src/mixin/base.ts"> <file name="base.ts" path="/home/anton/Projects/fluent/src/mixin/base.ts">
<metrics statements="6" coveredstatements="3" conditionals="0" coveredconditionals="0" methods="3" coveredmethods="1"/> <metrics statements="6" coveredstatements="6" conditionals="0" coveredconditionals="0" methods="3" coveredmethods="3"/>
<line num="47" count="1" type="stmt"/> <line num="47" count="5" type="stmt"/>
<line num="48" count="2" type="stmt"/> <line num="48" count="52" type="stmt"/>
<line num="49" count="0" type="stmt"/> <line num="49" count="2" type="stmt"/>
<line num="50" count="0" type="stmt"/> <line num="50" count="2" type="stmt"/>
<line num="53" count="2" type="stmt"/> <line num="53" count="52" type="stmt"/>
<line num="54" count="0" type="stmt"/> <line num="54" count="5" type="stmt"/>
</file> </file>
<file name="math.ts" path="/home/anton/Projects/fluent/src/mixin/math.ts"> <file name="math.ts" path="/home/anton/Projects/fluent/src/mixin/math.ts">
<metrics statements="56" coveredstatements="45" conditionals="9" coveredconditionals="5" methods="38" coveredmethods="2"/> <metrics statements="56" coveredstatements="56" conditionals="9" coveredconditionals="9" methods="38" coveredmethods="36"/>
<line num="104" count="1" type="stmt"/> <line num="138" count="5" type="stmt"/>
<line num="106" count="1" type="stmt"/> <line num="140" count="5" type="stmt"/>
<line num="107" count="2" type="cond" truecount="2" falsecount="0"/> <line num="141" count="181" type="cond" truecount="2" falsecount="0"/>
<line num="108" count="1" type="stmt"/> <line num="142" count="128" type="stmt"/>
<line num="109" count="1" type="stmt"/> <line num="143" count="128" type="stmt"/>
<line num="110" count="1" type="stmt"/> <line num="144" count="128" type="stmt"/>
<line num="111" count="1" type="stmt"/> <line num="145" count="128" type="stmt"/>
<line num="112" count="1" type="stmt"/> <line num="146" count="128" type="stmt"/>
<line num="113" count="1" type="stmt"/> <line num="147" count="128" type="stmt"/>
<line num="114" count="1" type="stmt"/> <line num="148" count="128" type="stmt"/>
<line num="115" count="1" type="stmt"/> <line num="149" count="128" type="stmt"/>
<line num="116" count="0" type="cond" truecount="0" falsecount="2"/> <line num="150" count="2" type="cond" truecount="2" falsecount="0"/>
<line num="117" count="0" type="stmt"/>
<line num="118" count="0" type="stmt"/>
<line num="121" count="1" type="stmt"/>
<line num="125" count="0" type="stmt"/>
<line num="128" count="1" type="stmt"/>
<line num="129" count="1" type="stmt"/>
<line num="130" count="1" type="stmt"/>
<line num="131" count="1" type="stmt"/>
<line num="133" count="1" type="stmt"/>
<line num="134" count="1" type="stmt"/>
<line num="135" count="1" type="stmt"/>
<line num="137" count="1" type="stmt"/>
<line num="138" count="0" type="stmt"/>
<line num="139" count="1" type="stmt"/>
<line num="140" count="0" type="stmt"/>
<line num="141" count="1" type="stmt"/>
<line num="142" count="0" type="stmt"/>
<line num="143" count="1" type="stmt"/>
<line num="144" count="0" type="stmt"/>
<line num="146" count="1" type="stmt"/>
<line num="147" count="0" type="stmt"/>
<line num="149" count="1" type="stmt"/>
<line num="150" count="1" type="stmt"/>
<line num="151" count="1" type="stmt"/> <line num="151" count="1" type="stmt"/>
<line num="152" count="1" type="stmt"/> <line num="152" count="1" type="stmt"/>
<line num="153" count="1" type="stmt"/> <line num="155" count="128" type="stmt"/>
<line num="154" count="1" type="stmt"/> <line num="159" count="3" type="stmt"/>
<line num="155" count="1" type="stmt"/> <line num="162" count="128" type="stmt"/>
<line num="157" count="1" type="stmt"/> <line num="163" count="128" type="stmt"/>
<line num="158" count="1" type="stmt"/> <line num="164" count="128" type="stmt"/>
<line num="159" count="1" type="stmt"/> <line num="165" count="128" type="stmt"/>
<line num="160" count="1" type="stmt"/> <line num="167" count="128" type="stmt"/>
<line num="161" count="1" type="stmt"/> <line num="168" count="128" type="stmt"/>
<line num="162" count="1" type="stmt"/> <line num="169" count="128" type="stmt"/>
<line num="164" count="1" type="stmt"/> <line num="171" count="128" type="stmt"/>
<line num="165" count="1" type="stmt"/> <line num="172" count="1" type="stmt"/>
<line num="167" count="1" type="stmt"/> <line num="173" count="128" type="stmt"/>
<line num="168" count="1" type="stmt"/> <line num="174" count="1" type="stmt"/>
<line num="169" count="1" type="stmt"/> <line num="175" count="128" type="stmt"/>
<line num="170" count="0" type="stmt"/> <line num="176" count="3" type="stmt"/>
<line num="171" count="0" type="stmt"/> <line num="177" count="128" type="stmt"/>
<line num="173" count="1" type="cond" truecount="1" falsecount="1"/> <line num="178" count="1" type="stmt"/>
<line num="175" count="7" type="stmt"/> <line num="180" count="128" type="stmt"/>
<line num="177" count="1" type="stmt"/> <line num="181" count="5" type="stmt"/>
<line num="183" count="128" type="stmt"/>
<line num="184" count="128" type="stmt"/>
<line num="185" count="128" type="stmt"/>
<line num="186" count="128" type="stmt"/>
<line num="187" count="128" type="stmt"/>
<line num="188" count="128" type="stmt"/>
<line num="189" count="128" type="stmt"/>
<line num="191" count="128" type="stmt"/>
<line num="192" count="128" type="stmt"/>
<line num="193" count="128" type="stmt"/>
<line num="194" count="128" type="stmt"/>
<line num="195" count="128" type="stmt"/>
<line num="196" count="128" type="stmt"/>
<line num="198" count="128" type="stmt"/>
<line num="199" count="128" type="stmt"/>
<line num="201" count="128" type="stmt"/>
<line num="202" count="128" type="stmt"/>
<line num="203" count="128" type="stmt"/>
<line num="204" count="1" type="stmt"/>
<line num="205" count="1" type="stmt"/>
<line num="207" count="53" type="cond" truecount="2" falsecount="0"/>
<line num="209" count="118" type="stmt"/>
<line num="211" count="31" type="stmt"/>
</file> </file>
<file name="optional.ts" path="/home/anton/Projects/fluent/src/mixin/optional.ts"> <file name="optional.ts" path="/home/anton/Projects/fluent/src/mixin/optional.ts">
<metrics statements="30" coveredstatements="11" conditionals="7" coveredconditionals="3" methods="13" coveredmethods="2"/> <metrics statements="30" coveredstatements="30" conditionals="7" coveredconditionals="7" methods="13" coveredmethods="13"/>
<line num="16" count="2" type="cond" truecount="2" falsecount="0"/> <line num="16" count="58" type="cond" truecount="2" falsecount="0"/>
<line num="164" count="1" type="stmt"/> <line num="164" count="4" type="stmt"/>
<line num="165" count="2" type="cond" truecount="1" falsecount="1"/> <line num="165" count="58" type="cond" truecount="2" falsecount="0"/>
<line num="166" count="0" type="stmt"/> <line num="166" count="10" type="stmt"/>
<line num="167" count="0" type="stmt"/> <line num="167" count="1" type="stmt"/>
<line num="170" count="0" type="stmt"/> <line num="170" count="10" type="stmt"/>
<line num="171" count="0" type="stmt"/> <line num="171" count="1" type="stmt"/>
<line num="173" count="0" type="stmt"/> <line num="173" count="10" type="stmt"/>
<line num="174" count="0" type="stmt"/> <line num="174" count="10" type="stmt"/>
<line num="176" count="0" type="stmt"/> <line num="176" count="2" type="stmt"/>
<line num="180" count="0" type="stmt"/> <line num="180" count="10" type="stmt"/>
<line num="181" count="0" type="stmt"/> <line num="181" count="1" type="stmt"/>
<line num="183" count="0" type="stmt"/> <line num="183" count="10" type="stmt"/>
<line num="184" count="0" type="stmt"/> <line num="184" count="10" type="stmt"/>
<line num="186" count="0" type="stmt"/> <line num="186" count="1" type="stmt"/>
<line num="190" count="2" type="stmt"/> <line num="190" count="48" type="stmt"/>
<line num="191" count="0" type="stmt"/> <line num="191" count="1" type="stmt"/>
<line num="194" count="2" type="stmt"/> <line num="194" count="48" type="stmt"/>
<line num="195" count="0" type="stmt"/> <line num="195" count="1" type="stmt"/>
<line num="198" count="2" type="stmt"/> <line num="198" count="48" type="stmt"/>
<line num="199" count="2" type="stmt"/> <line num="199" count="48" type="stmt"/>
<line num="201" count="0" type="stmt"/> <line num="201" count="2" type="stmt"/>
<line num="205" count="2" type="stmt"/> <line num="205" count="48" type="stmt"/>
<line num="206" count="0" type="stmt"/> <line num="206" count="1" type="stmt"/>
<line num="208" count="2" type="stmt"/> <line num="208" count="48" type="stmt"/>
<line num="209" count="2" type="stmt"/> <line num="209" count="48" type="stmt"/>
<line num="211" count="0" type="stmt"/> <line num="211" count="1" type="stmt"/>
<line num="216" count="2" type="stmt"/> <line num="216" count="58" type="stmt"/>
<line num="220" count="0" type="cond" truecount="0" falsecount="2"/> <line num="220" count="3" type="cond" truecount="2" falsecount="0"/>
<line num="221" count="0" type="stmt"/> <line num="221" count="2" type="stmt"/>
</file> </file>
</package> </package>
<package name="src.mixin.math"> <package name="src.mixin.math">
<metrics statements="32" coveredstatements="27" conditionals="10" coveredconditionals="10" methods="11" coveredmethods="6"/> <metrics statements="32" coveredstatements="32" conditionals="10" coveredconditionals="10" methods="11" coveredmethods="11"/>
<file name="swizzle.ts" path="/home/anton/Projects/fluent/src/mixin/math/swizzle.ts"> <file name="swizzle.ts" path="/home/anton/Projects/fluent/src/mixin/math/swizzle.ts">
<metrics statements="32" coveredstatements="27" conditionals="10" coveredconditionals="10" methods="11" coveredmethods="6"/> <metrics statements="32" coveredstatements="32" conditionals="10" coveredconditionals="10" methods="11" coveredmethods="11"/>
<line num="156" count="1" type="stmt"/> <line num="156" count="5" type="stmt"/>
<line num="163" count="1" type="stmt"/> <line num="163" count="31" type="stmt"/>
<line num="164" count="1" type="stmt"/> <line num="164" count="31" type="stmt"/>
<line num="166" count="1" type="stmt"/> <line num="166" count="31" type="stmt"/>
<line num="167" count="2097152" type="stmt"/> <line num="167" count="10964" type="stmt"/>
<line num="168" count="2396744" type="stmt"/> <line num="168" count="13706" type="stmt"/>
<line num="169" count="2396744" type="cond" truecount="2" falsecount="0"/> <line num="169" count="13706" type="cond" truecount="2" falsecount="0"/>
<line num="170" count="2097151" type="stmt"/> <line num="170" count="10933" type="stmt"/>
<line num="173" count="2097152" type="stmt"/> <line num="173" count="10964" type="stmt"/>
<line num="174" count="2097152" type="stmt"/> <line num="174" count="10964" type="stmt"/>
<line num="175" count="11487560" type="cond" truecount="2" falsecount="0"/> <line num="175" count="38284" type="cond" truecount="2" falsecount="0"/>
<line num="176" count="1435945" type="stmt"/> <line num="176" count="7715" type="stmt"/>
<line num="177" count="10051615" type="cond" truecount="2" falsecount="0"/> <line num="177" count="30569" type="cond" truecount="2" falsecount="0"/>
<line num="178" count="1136352" type="stmt"/> <line num="178" count="4942" type="stmt"/>
<line num="182" count="960800" type="stmt"/> <line num="182" count="6022" type="stmt"/>
<line num="183" count="6725600" type="stmt"/> <line num="183" count="23796" type="stmt"/>
<line num="184" count="6565468" type="stmt"/> <line num="184" count="21783" type="stmt"/>
<line num="186" count="960800" type="cond" truecount="4" falsecount="0"/> <line num="186" count="6022" type="cond" truecount="4" falsecount="0"/>
<line num="187" count="21840" type="stmt"/> <line num="187" count="5892" type="stmt"/>
<line num="188" count="152880" type="stmt"/> <line num="188" count="23352" type="stmt"/>
<line num="189" count="145632" type="stmt"/> <line num="189" count="21684" type="stmt"/>
<line num="190" count="21840" type="stmt"/> <line num="190" count="5892" type="stmt"/>
<line num="193" count="0" type="stmt"/> <line num="193" count="8" type="stmt"/>
<line num="196" count="2396744" type="stmt"/> <line num="196" count="13706" type="stmt"/>
<line num="198" count="1" type="stmt"/> <line num="198" count="31" type="stmt"/>
<line num="200" count="0" type="stmt"/> <line num="200" count="1" type="stmt"/>
<line num="203" count="1" type="stmt"/> <line num="203" count="31" type="stmt"/>
<line num="205" count="0" type="stmt"/> <line num="205" count="1" type="stmt"/>
<line num="208" count="1" type="stmt"/> <line num="208" count="31" type="stmt"/>
<line num="210" count="0" type="stmt"/> <line num="210" count="1" type="stmt"/>
<line num="213" count="1" type="stmt"/> <line num="213" count="31" type="stmt"/>
<line num="215" count="0" type="stmt"/> <line num="215" count="1" type="stmt"/>
</file> </file>
</package> </package>
</project> </project>
File diff suppressed because one or more lines are too long
+40 -40
View File
@@ -23,30 +23,30 @@
<div class='clearfix'> <div class='clearfix'>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">50.4% </span> <span class="strong">98.37% </span>
<span class="quiet">Statements</span> <span class="quiet">Statements</span>
<span class='fraction'>124/246</span> <span class='fraction'>242/246</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">47.91% </span> <span class="strong">100% </span>
<span class="quiet">Branches</span> <span class="quiet">Branches</span>
<span class='fraction'>23/48</span> <span class='fraction'>48/48</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">17.75% </span> <span class="strong">96.26% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>19/107</span> <span class='fraction'>103/107</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">57% </span> <span class="strong">99.03% </span>
<span class="quiet">Lines</span> <span class="quiet">Lines</span>
<span class='fraction'>118/207</span> <span class='fraction'>205/207</span>
</div> </div>
@@ -61,7 +61,7 @@
</div> </div>
</template> </template>
</div> </div>
<div class='status-line medium'></div> <div class='status-line high'></div>
<div class="pad1"> <div class="pad1">
<table class="coverage-summary"> <table class="coverage-summary">
<thead> <thead>
@@ -79,18 +79,18 @@
</tr> </tr>
</thead> </thead>
<tbody><tr> <tbody><tr>
<td class="file low" data-value="src"><a href="src/index.html">src</a></td> <td class="file high" data-value="src"><a href="src/index.html">src</a></td>
<td data-value="44.44" class="pic low"> <td data-value="100" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 44%"></div><div class="cover-empty" style="width: 56%"></div></div> <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
</td> </td>
<td data-value="44.44" class="pct low">44.44%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="9" class="abs low">4/9</td> <td data-value="9" class="abs high">9/9</td>
<td data-value="0" class="pct low">0%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs low">0/2</td> <td data-value="2" class="abs high">2/2</td>
<td data-value="25" class="pct low">25%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="4" class="abs low">1/4</td> <td data-value="4" class="abs high">4/4</td>
<td data-value="44.44" class="pct low">44.44%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="9" class="abs low">4/9</td> <td data-value="9" class="abs high">9/9</td>
</tr> </tr>
<tr> <tr>
@@ -109,33 +109,33 @@
</tr> </tr>
<tr> <tr>
<td class="file low" data-value="src/mixin"><a href="src/mixin/index.html">src/mixin</a></td> <td class="file high" data-value="src/mixin"><a href="src/mixin/index.html">src/mixin</a></td>
<td data-value="42.26" class="pic low"> <td data-value="97.93" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 42%"></div><div class="cover-empty" style="width: 58%"></div></div> <div class="chart"><div class="cover-fill" style="width: 97%"></div><div class="cover-empty" style="width: 3%"></div></div>
</td> </td>
<td data-value="42.26" class="pct low">42.26%</td> <td data-value="97.93" class="pct high">97.93%</td>
<td data-value="194" class="abs low">82/194</td> <td data-value="194" class="abs high">190/194</td>
<td data-value="36.11" class="pct low">36.11%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="36" class="abs low">13/36</td> <td data-value="36" class="abs high">36/36</td>
<td data-value="10.11" class="pct low">10.11%</td> <td data-value="95.5" class="pct high">95.5%</td>
<td data-value="89" class="abs low">9/89</td> <td data-value="89" class="abs high">85/89</td>
<td data-value="50.31" class="pct medium">50.31%</td> <td data-value="98.74" class="pct high">98.74%</td>
<td data-value="159" class="abs medium">80/159</td> <td data-value="159" class="abs high">157/159</td>
</tr> </tr>
<tr> <tr>
<td class="file high" data-value="src/mixin/math"><a href="src/mixin/math/index.html">src/mixin/math</a></td> <td class="file high" data-value="src/mixin/math"><a href="src/mixin/math/index.html">src/mixin/math</a></td>
<td data-value="86.11" class="pic high"> <td data-value="100" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 86%"></div><div class="cover-empty" style="width: 14%"></div></div> <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
</td> </td>
<td data-value="86.11" class="pct high">86.11%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="36" class="abs high">31/36</td> <td data-value="36" class="abs high">36/36</td>
<td data-value="100" class="pct high">100%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="10" class="abs high">10/10</td> <td data-value="10" class="abs high">10/10</td>
<td data-value="54.54" class="pct medium">54.54%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="11" class="abs medium">6/11</td> <td data-value="11" class="abs high">11/11</td>
<td data-value="84.37" class="pct high">84.37%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="32" class="abs high">27/32</td> <td data-value="32" class="abs high">32/32</td>
</tr> </tr>
</tbody> </tbody>
@@ -146,7 +146,7 @@
<div class='footer quiet pad2 space-top1 center small'> <div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2026-06-26T02:19:51.712Z at 2026-06-26T22:34:33.124Z
</div> </div>
<script src="prettify.js"></script> <script src="prettify.js"></script>
<script> <script>
+16 -1
View File
@@ -79,6 +79,21 @@
</tr> </tr>
</thead> </thead>
<tbody><tr> <tbody><tr>
<td class="file empty" data-value="hkt.ts"><a href="hkt.ts.html">hkt.ts</a></td>
<td data-value="0" class="pic empty">
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
</td>
<td data-value="0" class="pct empty">0%</td>
<td data-value="0" class="abs empty">0/0</td>
<td data-value="0" class="pct empty">0%</td>
<td data-value="0" class="abs empty">0/0</td>
<td data-value="0" class="pct empty">0%</td>
<td data-value="0" class="abs empty">0/0</td>
<td data-value="0" class="pct empty">0%</td>
<td data-value="0" class="abs empty">0/0</td>
</tr>
<tr>
<td class="file high" data-value="index.ts"><a href="index.ts.html">index.ts</a></td> <td class="file high" data-value="index.ts"><a href="index.ts.html">index.ts</a></td>
<td data-value="100" class="pic high"> <td data-value="100" class="pic high">
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div> <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
@@ -116,7 +131,7 @@
<div class='footer quiet pad2 space-top1 center small'> <div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2026-06-26T02:19:51.712Z at 2026-06-26T22:34:33.124Z
</div> </div>
<script src="../../prettify.js"></script> <script src="../../prettify.js"></script>
<script> <script>
+7 -7
View File
@@ -137,19 +137,19 @@
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">9x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">2x</span> <span class="cline-any cline-yes">251x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">2x</span> <span class="cline-any cline-yes">251x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">10x</span> <span class="cline-any cline-yes">416x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">2x</span> <span class="cline-any cline-yes">251x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">9x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { DefaultRegistry, Methods, Registry } from "../registry"; <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { DefaultRegistry, Methods, Registry } from "../registry";
import type { shim } from "./mixin"; import type { shim } from "./mixin";
@@ -202,7 +202,7 @@ export function makeFluent&lt;const Reg extends Registry&gt;(
<div class='footer quiet pad2 space-top1 center small'> <div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2026-06-26T02:19:51.712Z at 2026-06-26T22:34:33.124Z
</div> </div>
<script src="../../prettify.js"></script> <script src="../../prettify.js"></script>
<script> <script>
+2 -2
View File
@@ -144,7 +144,7 @@
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">5x</span> <span class="cline-any cline-yes">22x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
@@ -244,7 +244,7 @@ export type Instansiate&lt;
<div class='footer quiet pad2 space-top1 center small'> <div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2026-06-26T02:19:51.712Z at 2026-06-26T22:34:33.124Z
</div> </div>
<script src="../../prettify.js"></script> <script src="../../prettify.js"></script>
<script> <script>
+21 -21
View File
@@ -23,30 +23,30 @@
<div class='clearfix'> <div class='clearfix'>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">44.44% </span> <span class="strong">100% </span>
<span class="quiet">Statements</span> <span class="quiet">Statements</span>
<span class='fraction'>4/9</span> <span class='fraction'>9/9</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">0% </span> <span class="strong">100% </span>
<span class="quiet">Branches</span> <span class="quiet">Branches</span>
<span class='fraction'>0/2</span> <span class='fraction'>2/2</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">25% </span> <span class="strong">100% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>1/4</span> <span class='fraction'>4/4</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">44.44% </span> <span class="strong">100% </span>
<span class="quiet">Lines</span> <span class="quiet">Lines</span>
<span class='fraction'>4/9</span> <span class='fraction'>9/9</span>
</div> </div>
@@ -61,7 +61,7 @@
</div> </div>
</template> </template>
</div> </div>
<div class='status-line low'></div> <div class='status-line high'></div>
<div class="pad1"> <div class="pad1">
<table class="coverage-summary"> <table class="coverage-summary">
<thead> <thead>
@@ -94,18 +94,18 @@
</tr> </tr>
<tr> <tr>
<td class="file low" data-value="internal.ts"><a href="internal.ts.html">internal.ts</a></td> <td class="file high" data-value="internal.ts"><a href="internal.ts.html">internal.ts</a></td>
<td data-value="16.66" class="pic low"> <td data-value="100" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 16%"></div><div class="cover-empty" style="width: 84%"></div></div> <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
</td> </td>
<td data-value="16.66" class="pct low">16.66%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="6" class="abs low">1/6</td> <td data-value="6" class="abs high">6/6</td>
<td data-value="0" class="pct low">0%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs low">0/2</td> <td data-value="2" class="abs high">2/2</td>
<td data-value="25" class="pct low">25%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="4" class="abs low">1/4</td> <td data-value="4" class="abs high">4/4</td>
<td data-value="16.66" class="pct low">16.66%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="6" class="abs low">1/6</td> <td data-value="6" class="abs high">6/6</td>
</tr> </tr>
<tr> <tr>
@@ -131,7 +131,7 @@
<div class='footer quiet pad2 space-top1 center small'> <div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2026-06-26T02:19:51.712Z at 2026-06-26T22:34:33.124Z
</div> </div>
<script src="../prettify.js"></script> <script src="../prettify.js"></script>
<script> <script>
+3 -3
View File
@@ -71,8 +71,8 @@
<a name='L6'></a><a href='#L6'>6</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span> <a name='L6'></a><a href='#L6'>6</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { makeFluent } from "./base"; <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { makeFluent } from "./base";
import { DEFAULT_REGISTRY } from "./registry"; import { DEFAULT_REGISTRY } from "./registry";
&nbsp; &nbsp;
@@ -85,7 +85,7 @@ export const $ = fluent;
<div class='footer quiet pad2 space-top1 center small'> <div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2026-06-26T02:19:51.712Z at 2026-06-26T22:34:33.124Z
</div> </div>
<script src="../prettify.js"></script> <script src="../prettify.js"></script>
<script> <script>
+23 -23
View File
@@ -23,30 +23,30 @@
<div class='clearfix'> <div class='clearfix'>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">16.66% </span> <span class="strong">100% </span>
<span class="quiet">Statements</span> <span class="quiet">Statements</span>
<span class='fraction'>1/6</span> <span class='fraction'>6/6</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">0% </span> <span class="strong">100% </span>
<span class="quiet">Branches</span> <span class="quiet">Branches</span>
<span class='fraction'>0/2</span> <span class='fraction'>2/2</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">25% </span> <span class="strong">100% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>1/4</span> <span class='fraction'>4/4</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">16.66% </span> <span class="strong">100% </span>
<span class="quiet">Lines</span> <span class="quiet">Lines</span>
<span class='fraction'>1/6</span> <span class='fraction'>6/6</span>
</div> </div>
@@ -61,7 +61,7 @@
</div> </div>
</template> </template>
</div> </div>
<div class='status-line low'></div> <div class='status-line high'></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
@@ -129,14 +129,14 @@
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">9x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
@@ -144,10 +144,10 @@
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-yes">57x</span>
<span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-yes">4x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
@@ -193,20 +193,20 @@ export const never = undefined as never;
export type MaxDepth = 20; export type MaxDepth = 20;
&nbsp; &nbsp;
export class AssertionError extends Error { export class AssertionError extends Error {
<span class="fstat-no" title="function not covered" > public c</span>onstructor(msg?: string) { public constructor(msg?: string) {
<span class="cstat-no" title="statement not covered" > super(msg);</span> super(msg);
<span class="cstat-no" title="statement not covered" > this.name = "AssertionError";</span> this.name = "AssertionError";
} }
} }
&nbsp; &nbsp;
export function <span class="fstat-no" title="function not covered" >assert(</span> export function assert(
condition: unknown, condition: unknown,
msg?: string, msg?: string,
): asserts condition { ): asserts condition {
<span class="cstat-no" title="statement not covered" > if (!Boolean(condition))</span> if (!Boolean(condition))
<span class="cstat-no" title="statement not covered" > throw new AssertionError(</span> throw new AssertionError(
["Assertion error", msg] ["Assertion error", msg]
.<span class="fstat-no" title="function not covered" >filter((v</span>) =&gt; <span class="cstat-no" title="statement not covered" >v !== undefined)</span> .filter((v) =&gt; v !== undefined)
.join(": "), .join(": "),
); );
} }
@@ -247,7 +247,7 @@ export interface HidePrototype {
<div class='footer quiet pad2 space-top1 center small'> <div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2026-06-26T02:19:51.712Z at 2026-06-26T22:34:33.124Z
</div> </div>
<script src="../prettify.js"></script> <script src="../prettify.js"></script>
<script> <script>
File diff suppressed because it is too large Load Diff
+68 -68
View File
@@ -23,30 +23,30 @@
<div class='clearfix'> <div class='clearfix'>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">10.34% </span> <span class="strong">93.1% </span>
<span class="quiet">Statements</span> <span class="quiet">Statements</span>
<span class='fraction'>3/29</span> <span class='fraction'>27/29</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">14.28% </span> <span class="strong">100% </span>
<span class="quiet">Branches</span> <span class="quiet">Branches</span>
<span class='fraction'>1/7</span> <span class='fraction'>7/7</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">9.09% </span> <span class="strong">81.81% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>1/11</span> <span class='fraction'>9/11</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">7.69% </span> <span class="strong">92.3% </span>
<span class="quiet">Lines</span> <span class="quiet">Lines</span>
<span class='fraction'>2/26</span> <span class='fraction'>24/26</span>
</div> </div>
@@ -61,7 +61,7 @@
</div> </div>
</template> </template>
</div> </div>
<div class='status-line low'></div> <div class='status-line high'></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
@@ -246,59 +246,59 @@
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">4x</span>
<span class="cline-any cline-yes">45x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">2x</span> <span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
@@ -383,58 +383,58 @@ interface BaseFluent&lt;T&gt; {
} }
&nbsp; &nbsp;
export const AsyncMixin = Mixin&lt;AsyncMixin&gt;((value, $, fluent) =&gt; { export const AsyncMixin = Mixin&lt;AsyncMixin&gt;((value, $, fluent) =&gt; {
<span class="missing-if-branch" title="else path not taken" >E</span>if (!(value instanceof Promise)) return; if (!(value instanceof Promise)) return;
&nbsp; &nbsp;
<span class="cstat-no" title="statement not covered" > $.<span class="fstat-no" title="function not covered" >then = (c</span>allback: (value: unknown) =&gt; unknown) =&gt; {</span> $.then = (callback: (value: unknown) =&gt; unknown) =&gt; {
<span class="cstat-no" title="statement not covered" > return fluent(value.then(callback));</span> return fluent(value.then(callback));
}; };
&nbsp; &nbsp;
<span class="cstat-no" title="statement not covered" > Object.defineProperty($, "awaited", {</span> Object.defineProperty($, "awaited", {
enumerable: true, enumerable: true,
<span class="fstat-no" title="function not covered" > get() {</span> get() {
let v: Promise&lt;BaseFluent&lt;unknown&gt;&gt; = <span class="cstat-no" title="statement not covered" >value.<span class="fstat-no" title="function not covered" >then((v</span>) =&gt;</span> let v: Promise&lt;BaseFluent&lt;unknown&gt;&gt; = value.then((v) =&gt;
<span class="cstat-no" title="statement not covered" > fluent(v),</span> fluent(v),
); );
&nbsp; &nbsp;
const path: PropertyKey[] = <span class="cstat-no" title="statement not covered" >[];</span> const path: PropertyKey[] = [];
// eslint-disable-next-line no-empty-pattern // eslint-disable-next-line no-empty-pattern
const proxy = <span class="cstat-no" title="statement not covered" >new <span class="fstat-no" title="function not covered" >Proxy((.</span>..[]: unknown[]) =&gt; <span class="cstat-no" title="statement not covered" >proxy, {</span></span> const proxy = new Proxy((...[]: unknown[]) =&gt; proxy, {
<span class="fstat-no" title="function not covered" > get: (_</span>, key) =&gt; { get: (_, key) =&gt; {
<span class="cstat-no" title="statement not covered" > if (key === "value")</span> if (key === "value")
<span class="cstat-no" title="statement not covered" > return v.<span class="fstat-no" title="function not covered" >then((v</span>) =&gt; <span class="cstat-no" title="statement not covered" >v.value)</span>;</span> return v.then((v) =&gt; v.value);
<span class="cstat-no" title="statement not covered" > path.push(key);</span> path.push(key);
<span class="cstat-no" title="statement not covered" > return proxy;</span> return proxy;
}, },
<span class="fstat-no" title="function not covered" > apply: (t</span>arget, thisArg, args: unknown[]) =&gt; { apply: (target, thisArg, args: unknown[]) =&gt; {
<span class="cstat-no" title="statement not covered" > v = v.<span class="fstat-no" title="function not covered" >then((v</span>) =&gt; {</span> v = v.then((v) =&gt; {
let obj: unknown = <span class="cstat-no" title="statement not covered" >v;</span> let obj: unknown = v;
<span class="cstat-no" title="statement not covered" > for (const node of path) {</span> for (const node of path) {
<span class="cstat-no" title="statement not covered" > assert(</span> assert(
typeof obj === "object" &amp;&amp; typeof obj === "object" &amp;&amp;
obj !== null &amp;&amp; obj !== null &amp;&amp;
node in obj, node in obj,
); );
<span class="cstat-no" title="statement not covered" > assertType&lt;Record&lt;PropertyKey, unknown&gt;&gt;(</span> assertType&lt;Record&lt;PropertyKey, unknown&gt;&gt;(
obj, obj,
); );
&nbsp; &nbsp;
<span class="cstat-no" title="statement not covered" > obj = obj[node];</span> obj = obj[node];
} }
&nbsp; &nbsp;
<span class="cstat-no" title="statement not covered" > assert(typeof obj === "function");</span> assert(typeof obj === "function");
<span class="cstat-no" title="statement not covered" > assertType&lt;</span> assertType&lt;
( (
...args: unknown[] ...args: unknown[]
) =&gt; BaseFluent&lt;unknown&gt; ) =&gt; BaseFluent&lt;unknown&gt;
&gt;(obj); &gt;(obj);
&nbsp; &nbsp;
<span class="cstat-no" title="statement not covered" > return obj(...args);</span> return obj(...args);
}); });
<span class="cstat-no" title="statement not covered" > return target.apply(thisArg, args);</span> return target.apply(thisArg, args);
}, },
}); });
&nbsp; &nbsp;
<span class="cstat-no" title="statement not covered" > return proxy;</span> return proxy;
}, },
}); });
}); });
@@ -446,7 +446,7 @@ if (import.meta.vitest) {
const $ = makeFluent(registry); const $ = makeFluent(registry);
&nbsp; &nbsp;
test(".awaited", async () =&gt; { test(".awaited", async () =&gt; {
const value = 10; const value = 10 as const;
const promise = new Promise&lt;number&gt;((r) =&gt; { const promise = new Promise&lt;number&gt;((r) =&gt; {
r(value); r(value);
}); });
@@ -478,7 +478,7 @@ if (import.meta.vitest) {
<div class='footer quiet pad2 space-top1 center small'> <div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2026-06-26T02:19:51.712Z at 2026-06-26T22:34:33.124Z
</div> </div>
<script src="../../prettify.js"></script> <script src="../../prettify.js"></script>
<script> <script>
+18 -18
View File
@@ -23,9 +23,9 @@
<div class='clearfix'> <div class='clearfix'>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">50% </span> <span class="strong">100% </span>
<span class="quiet">Statements</span> <span class="quiet">Statements</span>
<span class='fraction'>3/6</span> <span class='fraction'>6/6</span>
</div> </div>
@@ -37,16 +37,16 @@
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">33.33% </span> <span class="strong">100% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>1/3</span> <span class='fraction'>3/3</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">50% </span> <span class="strong">100% </span>
<span class="quiet">Lines</span> <span class="quiet">Lines</span>
<span class='fraction'>3/6</span> <span class='fraction'>6/6</span>
</div> </div>
@@ -61,7 +61,7 @@
</div> </div>
</template> </template>
</div> </div>
<div class='status-line medium'></div> <div class='status-line high'></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
@@ -195,14 +195,14 @@
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">52x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-yes">2x</span> <span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">2x</span> <span class="cline-any cline-yes">52x</span>
<span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
@@ -282,13 +282,13 @@ export interface Base extends Mixin.HKT {
} }
&nbsp; &nbsp;
export const Base = Mixin&lt;Base&gt;((value, $, fluent) =&gt; { export const Base = Mixin&lt;Base&gt;((value, $, fluent) =&gt; {
$.<span class="fstat-no" title="function not covered" >tap = (c</span>allback: (value: unknown) =&gt; void) =&gt; { $.tap = (callback: (value: unknown) =&gt; void) =&gt; {
<span class="cstat-no" title="statement not covered" > callback(value);</span> callback(value);
<span class="cstat-no" title="statement not covered" > return fluent(value);</span> return fluent(value);
}; };
&nbsp; &nbsp;
$.<span class="fstat-no" title="function not covered" >transform = (c</span>allback: (value: unknown) =&gt; unknown) =&gt; { $.transform = (callback: (value: unknown) =&gt; unknown) =&gt; {
<span class="cstat-no" title="statement not covered" > return fluent(callback(value));</span> return fluent(callback(value));
}; };
}); });
&nbsp; &nbsp;
@@ -328,7 +328,7 @@ if (import.meta.vitest) {
<div class='footer quiet pad2 space-top1 center small'> <div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2026-06-26T02:19:51.712Z at 2026-06-26T22:34:33.124Z
</div> </div>
<script src="../../prettify.js"></script> <script src="../../prettify.js"></script>
<script> <script>
+63 -63
View File
@@ -23,30 +23,30 @@
<div class='clearfix'> <div class='clearfix'>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">42.26% </span> <span class="strong">97.93% </span>
<span class="quiet">Statements</span> <span class="quiet">Statements</span>
<span class='fraction'>82/194</span> <span class='fraction'>190/194</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">36.11% </span> <span class="strong">100% </span>
<span class="quiet">Branches</span> <span class="quiet">Branches</span>
<span class='fraction'>13/36</span> <span class='fraction'>36/36</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">10.11% </span> <span class="strong">95.5% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>9/89</span> <span class='fraction'>85/89</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">50.31% </span> <span class="strong">98.74% </span>
<span class="quiet">Lines</span> <span class="quiet">Lines</span>
<span class='fraction'>80/159</span> <span class='fraction'>157/159</span>
</div> </div>
@@ -61,7 +61,7 @@
</div> </div>
</template> </template>
</div> </div>
<div class='status-line low'></div> <div class='status-line high'></div>
<div class="pad1"> <div class="pad1">
<table class="coverage-summary"> <table class="coverage-summary">
<thead> <thead>
@@ -79,78 +79,78 @@
</tr> </tr>
</thead> </thead>
<tbody><tr> <tbody><tr>
<td class="file low" data-value="array.ts"><a href="array.ts.html">array.ts</a></td> <td class="file high" data-value="array.ts"><a href="array.ts.html">array.ts</a></td>
<td data-value="44.44" class="pic low"> <td data-value="100" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 44%"></div><div class="cover-empty" style="width: 56%"></div></div> <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
</td> </td>
<td data-value="44.44" class="pct low">44.44%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="45" class="abs low">20/45</td> <td data-value="45" class="abs high">45/45</td>
<td data-value="30.76" class="pct low">30.76%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="13" class="abs low">4/13</td> <td data-value="13" class="abs high">13/13</td>
<td data-value="12.5" class="pct low">12.5%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="24" class="abs low">3/24</td> <td data-value="24" class="abs high">24/24</td>
<td data-value="46.34" class="pct low">46.34%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="41" class="abs low">19/41</td> <td data-value="41" class="abs high">41/41</td>
</tr> </tr>
<tr> <tr>
<td class="file low" data-value="awaited.ts"><a href="awaited.ts.html">awaited.ts</a></td> <td class="file high" data-value="awaited.ts"><a href="awaited.ts.html">awaited.ts</a></td>
<td data-value="10.34" class="pic low"> <td data-value="93.1" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 10%"></div><div class="cover-empty" style="width: 90%"></div></div> <div class="chart"><div class="cover-fill" style="width: 93%"></div><div class="cover-empty" style="width: 7%"></div></div>
</td> </td>
<td data-value="10.34" class="pct low">10.34%</td> <td data-value="93.1" class="pct high">93.1%</td>
<td data-value="29" class="abs low">3/29</td> <td data-value="29" class="abs high">27/29</td>
<td data-value="14.28" class="pct low">14.28%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="7" class="abs low">1/7</td> <td data-value="7" class="abs high">7/7</td>
<td data-value="9.09" class="pct low">9.09%</td> <td data-value="81.81" class="pct high">81.81%</td>
<td data-value="11" class="abs low">1/11</td> <td data-value="11" class="abs high">9/11</td>
<td data-value="7.69" class="pct low">7.69%</td> <td data-value="92.3" class="pct high">92.3%</td>
<td data-value="26" class="abs low">2/26</td> <td data-value="26" class="abs high">24/26</td>
</tr> </tr>
<tr> <tr>
<td class="file medium" data-value="base.ts"><a href="base.ts.html">base.ts</a></td> <td class="file high" data-value="base.ts"><a href="base.ts.html">base.ts</a></td>
<td data-value="50" class="pic medium"> <td data-value="100" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 50%"></div><div class="cover-empty" style="width: 50%"></div></div> <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
</td> </td>
<td data-value="50" class="pct medium">50%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="6" class="abs medium">3/6</td> <td data-value="6" class="abs high">6/6</td>
<td data-value="100" class="pct high">100%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">0/0</td> <td data-value="0" class="abs high">0/0</td>
<td data-value="33.33" class="pct low">33.33%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="3" class="abs low">1/3</td> <td data-value="3" class="abs high">3/3</td>
<td data-value="50" class="pct medium">50%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="6" class="abs medium">3/6</td> <td data-value="6" class="abs high">6/6</td>
</tr> </tr>
<tr> <tr>
<td class="file medium" data-value="math.ts"><a href="math.ts.html">math.ts</a></td> <td class="file high" data-value="math.ts"><a href="math.ts.html">math.ts</a></td>
<td data-value="54.21" class="pic medium"> <td data-value="97.59" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 54%"></div><div class="cover-empty" style="width: 46%"></div></div> <div class="chart"><div class="cover-fill" style="width: 97%"></div><div class="cover-empty" style="width: 3%"></div></div>
</td> </td>
<td data-value="54.21" class="pct medium">54.21%</td> <td data-value="97.59" class="pct high">97.59%</td>
<td data-value="83" class="abs medium">45/83</td> <td data-value="83" class="abs high">81/83</td>
<td data-value="55.55" class="pct medium">55.55%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="9" class="abs medium">5/9</td> <td data-value="9" class="abs high">9/9</td>
<td data-value="5.26" class="pct low">5.26%</td> <td data-value="94.73" class="pct high">94.73%</td>
<td data-value="38" class="abs low">2/38</td> <td data-value="38" class="abs high">36/38</td>
<td data-value="80.35" class="pct high">80.35%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="56" class="abs high">45/56</td> <td data-value="56" class="abs high">56/56</td>
</tr> </tr>
<tr> <tr>
<td class="file low" data-value="optional.ts"><a href="optional.ts.html">optional.ts</a></td> <td class="file high" data-value="optional.ts"><a href="optional.ts.html">optional.ts</a></td>
<td data-value="35.48" class="pic low"> <td data-value="100" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 35%"></div><div class="cover-empty" style="width: 65%"></div></div> <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
</td> </td>
<td data-value="35.48" class="pct low">35.48%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="31" class="abs low">11/31</td> <td data-value="31" class="abs high">31/31</td>
<td data-value="42.85" class="pct low">42.85%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="7" class="abs low">3/7</td> <td data-value="7" class="abs high">7/7</td>
<td data-value="15.38" class="pct low">15.38%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="13" class="abs low">2/13</td> <td data-value="13" class="abs high">13/13</td>
<td data-value="36.66" class="pct low">36.66%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="30" class="abs low">11/30</td> <td data-value="30" class="abs high">30/30</td>
</tr> </tr>
</tbody> </tbody>
@@ -161,7 +161,7 @@
<div class='footer quiet pad2 space-top1 center small'> <div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2026-06-26T02:19:51.712Z at 2026-06-26T22:34:33.124Z
</div> </div>
<script src="../../prettify.js"></script> <script src="../../prettify.js"></script>
<script> <script>
File diff suppressed because it is too large Load Diff
+15 -15
View File
@@ -23,9 +23,9 @@
<div class='clearfix'> <div class='clearfix'>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">86.11% </span> <span class="strong">100% </span>
<span class="quiet">Statements</span> <span class="quiet">Statements</span>
<span class='fraction'>31/36</span> <span class='fraction'>36/36</span>
</div> </div>
@@ -37,16 +37,16 @@
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">54.54% </span> <span class="strong">100% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>6/11</span> <span class='fraction'>11/11</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">84.37% </span> <span class="strong">100% </span>
<span class="quiet">Lines</span> <span class="quiet">Lines</span>
<span class='fraction'>27/32</span> <span class='fraction'>32/32</span>
</div> </div>
@@ -80,17 +80,17 @@
</thead> </thead>
<tbody><tr> <tbody><tr>
<td class="file high" data-value="swizzle.ts"><a href="swizzle.ts.html">swizzle.ts</a></td> <td class="file high" data-value="swizzle.ts"><a href="swizzle.ts.html">swizzle.ts</a></td>
<td data-value="86.11" class="pic high"> <td data-value="100" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 86%"></div><div class="cover-empty" style="width: 14%"></div></div> <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
</td> </td>
<td data-value="86.11" class="pct high">86.11%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="36" class="abs high">31/36</td> <td data-value="36" class="abs high">36/36</td>
<td data-value="100" class="pct high">100%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="10" class="abs high">10/10</td> <td data-value="10" class="abs high">10/10</td>
<td data-value="54.54" class="pct medium">54.54%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="11" class="abs medium">6/11</td> <td data-value="11" class="abs high">11/11</td>
<td data-value="84.37" class="pct high">84.37%</td> <td data-value="100" class="pct high">100%</td>
<td data-value="32" class="abs high">27/32</td> <td data-value="32" class="abs high">32/32</td>
</tr> </tr>
</tbody> </tbody>
@@ -101,7 +101,7 @@
<div class='footer quiet pad2 space-top1 center small'> <div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2026-06-26T02:19:51.712Z at 2026-06-26T22:34:33.124Z
</div> </div>
<script src="../../../prettify.js"></script> <script src="../../../prettify.js"></script>
<script> <script>
+217 -64
View File
@@ -23,9 +23,9 @@
<div class='clearfix'> <div class='clearfix'>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">86.11% </span> <span class="strong">100% </span>
<span class="quiet">Statements</span> <span class="quiet">Statements</span>
<span class='fraction'>31/36</span> <span class='fraction'>36/36</span>
</div> </div>
@@ -37,16 +37,16 @@
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">54.54% </span> <span class="strong">100% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>6/11</span> <span class='fraction'>11/11</span>
</div> </div>
<div class='fl pad1y space-right2'> <div class='fl pad1y space-right2'>
<span class="strong">84.37% </span> <span class="strong">100% </span>
<span class="quiet">Lines</span> <span class="quiet">Lines</span>
<span class='fraction'>27/32</span> <span class='fraction'>32/32</span>
</div> </div>
@@ -335,7 +335,58 @@
<a name='L270'></a><a href='#L270'>270</a> <a name='L270'></a><a href='#L270'>270</a>
<a name='L271'></a><a href='#L271'>271</a> <a name='L271'></a><a href='#L271'>271</a>
<a name='L272'></a><a href='#L272'>272</a> <a name='L272'></a><a href='#L272'>272</a>
<a name='L273'></a><a href='#L273'>273</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span> <a name='L273'></a><a href='#L273'>273</a>
<a name='L274'></a><a href='#L274'>274</a>
<a name='L275'></a><a href='#L275'>275</a>
<a name='L276'></a><a href='#L276'>276</a>
<a name='L277'></a><a href='#L277'>277</a>
<a name='L278'></a><a href='#L278'>278</a>
<a name='L279'></a><a href='#L279'>279</a>
<a name='L280'></a><a href='#L280'>280</a>
<a name='L281'></a><a href='#L281'>281</a>
<a name='L282'></a><a href='#L282'>282</a>
<a name='L283'></a><a href='#L283'>283</a>
<a name='L284'></a><a href='#L284'>284</a>
<a name='L285'></a><a href='#L285'>285</a>
<a name='L286'></a><a href='#L286'>286</a>
<a name='L287'></a><a href='#L287'>287</a>
<a name='L288'></a><a href='#L288'>288</a>
<a name='L289'></a><a href='#L289'>289</a>
<a name='L290'></a><a href='#L290'>290</a>
<a name='L291'></a><a href='#L291'>291</a>
<a name='L292'></a><a href='#L292'>292</a>
<a name='L293'></a><a href='#L293'>293</a>
<a name='L294'></a><a href='#L294'>294</a>
<a name='L295'></a><a href='#L295'>295</a>
<a name='L296'></a><a href='#L296'>296</a>
<a name='L297'></a><a href='#L297'>297</a>
<a name='L298'></a><a href='#L298'>298</a>
<a name='L299'></a><a href='#L299'>299</a>
<a name='L300'></a><a href='#L300'>300</a>
<a name='L301'></a><a href='#L301'>301</a>
<a name='L302'></a><a href='#L302'>302</a>
<a name='L303'></a><a href='#L303'>303</a>
<a name='L304'></a><a href='#L304'>304</a>
<a name='L305'></a><a href='#L305'>305</a>
<a name='L306'></a><a href='#L306'>306</a>
<a name='L307'></a><a href='#L307'>307</a>
<a name='L308'></a><a href='#L308'>308</a>
<a name='L309'></a><a href='#L309'>309</a>
<a name='L310'></a><a href='#L310'>310</a>
<a name='L311'></a><a href='#L311'>311</a>
<a name='L312'></a><a href='#L312'>312</a>
<a name='L313'></a><a href='#L313'>313</a>
<a name='L314'></a><a href='#L314'>314</a>
<a name='L315'></a><a href='#L315'>315</a>
<a name='L316'></a><a href='#L316'>316</a>
<a name='L317'></a><a href='#L317'>317</a>
<a name='L318'></a><a href='#L318'>318</a>
<a name='L319'></a><a href='#L319'>319</a>
<a name='L320'></a><a href='#L320'>320</a>
<a name='L321'></a><a href='#L321'>321</a>
<a name='L322'></a><a href='#L322'>322</a>
<a name='L323'></a><a href='#L323'>323</a>
<a name='L324'></a><a href='#L324'>324</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
@@ -490,6 +541,65 @@
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">31x</span>
<span class="cline-any cline-yes">31x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">31x</span>
<span class="cline-any cline-yes">10964x</span>
<span class="cline-any cline-yes">13706x</span>
<span class="cline-any cline-yes">13706x</span>
<span class="cline-any cline-yes">10933x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">10964x</span>
<span class="cline-any cline-yes">10964x</span>
<span class="cline-any cline-yes">38284x</span>
<span class="cline-any cline-yes">7715x</span>
<span class="cline-any cline-yes">30569x</span>
<span class="cline-any cline-yes">4942x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">6022x</span>
<span class="cline-any cline-yes">23796x</span>
<span class="cline-any cline-yes">21783x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">6022x</span>
<span class="cline-any cline-yes">5892x</span>
<span class="cline-any cline-yes">23352x</span>
<span class="cline-any cline-yes">21684x</span>
<span class="cline-any cline-yes">5892x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">8x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">13706x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">31x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">31x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">31x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">31x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
@@ -497,59 +607,51 @@
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">2097152x</span>
<span class="cline-any cline-yes">2396744x</span>
<span class="cline-any cline-yes">2396744x</span>
<span class="cline-any cline-yes">2097151x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">2097152x</span>
<span class="cline-any cline-yes">2097152x</span>
<span class="cline-any cline-yes">11487560x</span>
<span class="cline-any cline-yes">1435945x</span>
<span class="cline-any cline-yes">10051615x</span>
<span class="cline-any cline-yes">1136352x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">960800x</span>
<span class="cline-any cline-yes">6725600x</span>
<span class="cline-any cline-yes">6565468x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">960800x</span>
<span class="cline-any cline-yes">21840x</span>
<span class="cline-any cline-yes">152880x</span>
<span class="cline-any cline-yes">145632x</span>
<span class="cline-any cline-yes">21840x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">2396744x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
@@ -769,7 +871,7 @@ export function applySwizzle(
$: object, $: object,
fluent: (value: unknown) =&gt; never, fluent: (value: unknown) =&gt; never,
) { ) {
const length = value.length; const length = globalThis.Math.min(value.length, axis.length);
const state = new Array&lt;number&gt;(length).fill(-1); const state = new Array&lt;number&gt;(length).fill(-1);
&nbsp; &nbsp;
main: do { main: do {
@@ -797,37 +899,37 @@ export function applySwizzle(
.filter((x) =&gt; x !== -1) .filter((x) =&gt; x !== -1)
.map((x) =&gt; value[x]); .map((x) =&gt; value[x]);
Object.defineProperty($, key, { Object.defineProperty($, key, {
<span class="fstat-no" title="function not covered" > get: () =&gt; {</span> get: () =&gt; {
// OPTIMIZE? Reduce amount of arrays allocated and held for the lambda..? // OPTIMIZE? Reduce amount of arrays allocated and held for the lambda..?
<span class="cstat-no" title="statement not covered" > return fluent(permutation);</span> return fluent(permutation);
}, },
}); });
} while (state.some((x) =&gt; x !== -1)); } while (state.some((x) =&gt; x !== -1));
&nbsp; &nbsp;
Object.defineProperty($, "x", { Object.defineProperty($, "x", {
<span class="fstat-no" title="function not covered" > get: () =&gt; {</span> get: () =&gt; {
<span class="cstat-no" title="statement not covered" > return fluent(value[0]);</span> return fluent(value[0]);
}, },
}); });
Object.defineProperty($, "y", { Object.defineProperty($, "y", {
<span class="fstat-no" title="function not covered" > get: () =&gt; {</span> get: () =&gt; {
<span class="cstat-no" title="statement not covered" > return fluent(value[1]);</span> return fluent(value[1]);
}, },
}); });
Object.defineProperty($, "z", { Object.defineProperty($, "z", {
<span class="fstat-no" title="function not covered" > get: () =&gt; {</span> get: () =&gt; {
<span class="cstat-no" title="statement not covered" > return fluent(value[2]);</span> return fluent(value[2]);
}, },
}); });
Object.defineProperty($, "w", { Object.defineProperty($, "w", {
<span class="fstat-no" title="function not covered" > get: () =&gt; {</span> get: () =&gt; {
<span class="cstat-no" title="statement not covered" > return fluent(value[3]);</span> return fluent(value[3]);
}, },
}); });
} }
&nbsp; &nbsp;
if (import.meta.vitest) { if (import.meta.vitest) {
const { test, expect } = import.meta.vitest; const { test, expect, expectTypeOf } = import.meta.vitest;
&nbsp; &nbsp;
const registry = [Math] as const; const registry = [Math] as const;
const $ = makeFluent(registry); const $ = makeFluent(registry);
@@ -839,8 +941,11 @@ if (import.meta.vitest) {
const vec = [x, y] as const; const vec = [x, y] as const;
&nbsp; &nbsp;
expect($(vec).xx.value).toMatchObject([x, x]); expect($(vec).xx.value).toMatchObject([x, x]);
expect($(vec).yx.value).toMatchObject([y, x]);
expect($(vec).yy.value).toMatchObject([y, y]); expect($(vec).yy.value).toMatchObject([y, y]);
&nbsp;
const yx = $(vec).yx.value;
expect(yx).toMatchObject([y, x]);
expectTypeOf(yx).toEqualTypeOf&lt;[typeof y, typeof x]&gt;();
&nbsp; &nbsp;
const large = [x, y, x, y] as const; const large = [x, y, x, y] as const;
&nbsp; &nbsp;
@@ -855,28 +960,76 @@ if (import.meta.vitest) {
const x = 5 as const; const x = 5 as const;
const arr = [x] as const; const arr = [x] as const;
&nbsp; &nbsp;
expect($(arr).x.value).toBe(x); const v = $(arr).x.value;
expect(v).toBe(x);
expectTypeOf(v).toEqualTypeOf(x);
}); });
&nbsp; &nbsp;
test(".y", () =&gt; { test(".y", () =&gt; {
const y = 2 as const; const y = 2 as const;
const arr = [y, y] as const; const arr = [y, y] as const;
&nbsp; &nbsp;
expect($(arr).y.value).toBe(y); const v = $(arr).y.value;
expect(v).toBe(y);
expectTypeOf(v).toEqualTypeOf(y);
}); });
&nbsp; &nbsp;
test(".z", () =&gt; { test(".z", () =&gt; {
const z = 9 as const; const z = 9 as const;
const arr = [z, z, z] as const; const arr = [z, z, z] as const;
&nbsp; &nbsp;
expect($(arr).z.value).toBe(z); const v = $(arr).z.value;
expect(v).toBe(z);
expectTypeOf(v).toEqualTypeOf(z);
}); });
&nbsp; &nbsp;
test(".w", () =&gt; { test(".w", () =&gt; {
const w = 0 as const; const w = 0 as const;
const arr = [w, w, w, w] as const; const arr = [w, w, w, w] as const;
&nbsp; &nbsp;
expect($(arr).w.value).toBe(w); const v = $(arr).w.value;
expect(v).toBe(w);
expectTypeOf(v).toEqualTypeOf(w);
});
&nbsp;
test("Next", () =&gt; {
type N = 3;
&nbsp;
expectTypeOf&lt;
Next&lt;N, [undefined, undefined, undefined]&gt;
&gt;().toEqualTypeOf&lt;[0, undefined, undefined]&gt;();
&nbsp;
expectTypeOf&lt;
Next&lt;N, [2, undefined, undefined]&gt;
&gt;().toEqualTypeOf&lt;[undefined, 0, undefined]&gt;();
&nbsp;
expectTypeOf&lt;Next&lt;N, [2, 2, 2]&gt;&gt;().toEqualTypeOf&lt;null&gt;();
});
&nbsp;
test("Key", () =&gt; {
expectTypeOf&lt;Key&lt;[1, 2, undefined]&gt;&gt;().toEqualTypeOf&lt;"yz"&gt;();
expectTypeOf&lt;Key&lt;[1, 1, 1]&gt;&gt;().toEqualTypeOf&lt;"yyy"&gt;();
});
&nbsp;
test("Sequence", () =&gt; {
type In = [1, 2, 3, 4, 5];
type Out = [5, 4, 3, 2, 1];
type Reverse = [4, 3, 2, 1, 0];
&nbsp;
expectTypeOf&lt;Sequence&lt;In, Reverse&gt;&gt;().toEqualTypeOf&lt;Out&gt;();
});
&nbsp;
test("Primative", () =&gt; {
interface Props {
value: [number, number];
meta: { registry: [] };
}
&nbsp;
type V = Primative&lt;[number, number], Props&gt;[1];
&nbsp;
expectTypeOf&lt;V&gt;().toHaveProperty("x");
expectTypeOf&lt;V&gt;().toHaveProperty("y");
expectTypeOf&lt;V&gt;().not.toHaveProperty("z");
}); });
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
@@ -886,7 +1039,7 @@ if (import.meta.vitest) {
<div class='footer quiet pad2 space-top1 center small'> <div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2026-06-26T02:19:51.712Z at 2026-06-26T22:34:33.124Z
</div> </div>
<script src="../../../prettify.js"></script> <script src="../../../prettify.js"></script>
<script> <script>
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -101,7 +101,7 @@
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span>
@@ -157,7 +157,7 @@ export type Methods&lt;
<div class='footer quiet pad2 space-top1 center small'> <div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2026-06-26T02:19:51.712Z at 2026-06-26T22:34:33.124Z
</div> </div>
<script src="../prettify.js"></script> <script src="../prettify.js"></script>
<script> <script>
+18 -1
View File
@@ -3,7 +3,7 @@ import tseslint from "typescript-eslint";
import { defineConfig, globalIgnores } from "eslint/config"; import { defineConfig, globalIgnores } from "eslint/config";
export default defineConfig([ export default defineConfig([
globalIgnores(["dist", "tests/generated"]), globalIgnores(["dist", "tests/generated", "coverage"]),
{ {
files: ["**/*.{ts,tsx}"], files: ["**/*.{ts,tsx}"],
extends: [ extends: [
@@ -53,4 +53,21 @@ export default defineConfig([
}, },
}, },
}, },
{
ignores: ["tests"],
extends: [tseslint.configs.base],
rules: {
"@typescript-eslint/no-restricted-imports": [
"error",
{
paths: [
{
name: "vitest",
message: "Use import.meta.vitest instead",
},
],
},
],
},
},
]); ]);
+1 -1
View File
@@ -4,7 +4,7 @@
"version": "0.0.0", "version": "0.0.0",
"type": "module", "type": "module",
"scripts": { "scripts": {
"test": "gen-jet src/ --test-file-extension .doc.test --header 'import { test, expect, vi } from \"vitest\"; import { $ } from \"../../src\"' && mkdir -p ./tests/generated && mv ./src/**/*.doc.test.ts tests/generated && vitest --run --reporter=tree --coverage", "test": "gen-jet src/ --test-file-extension .doc.test --header 'import { test, expect, vi } from \"vitest\"; import { $ } from \"../../src\"' && mkdir -p ./tests/generated && mv ./src/**/*.doc.test.ts tests/generated && vitest --run --reporter=tree --coverage --typecheck",
"build": "tsc -b && esbuild --minify --bundle src/index.ts --outdir=dist --define:import.meta.vitest=undefined", "build": "tsc -b && esbuild --minify --bundle src/index.ts --outdir=dist --define:import.meta.vitest=undefined",
"fmt": "prettier --write .", "fmt": "prettier --write .",
"lint": "eslint .", "lint": "eslint .",
+29
View File
@@ -18,3 +18,32 @@ export namespace HKT {
(T & { _t: t })["new"] (T & { _t: t })["new"]
>; >;
} }
if (import.meta.vitest) {
const { test, expectTypeOf } = import.meta.vitest;
interface Identity extends HKT {
new: (t: HKT.T<this>) => typeof t;
}
interface ReplaceWith<T extends number> extends HKT<number, T> {
new: () => T;
}
test("Identity <T> = T", () => {
type V = 10;
expectTypeOf<HKT.Apply<Identity, V>>().toEqualTypeOf<V>();
expectTypeOf<
HKT.Apply<Identity, Identity>
>().toEqualTypeOf<Identity>();
});
test("Generic <T><U> = T", () => {
type V = 10;
expectTypeOf<
HKT.Apply<ReplaceWith<V>, 14>
>().toEqualTypeOf<V>();
});
}
+43 -27
View File
@@ -336,6 +336,10 @@ export interface Array extends Mixin.HKT {
* @param index The index of the current element in the array * @param index The index of the current element in the array
* @param array The array being iterated * @param array The array being iterated
*/ */
callback: (
value: U,
...args: IterArgs<T>
) => U,
) => Return<U, typeof t>; ) => Return<U, typeof t>;
} & HidePrototype; } & HidePrototype;
/** /**
@@ -565,7 +569,7 @@ export const Array = Mixin<Array>((value, $, fluent) => {
}); });
if (import.meta.vitest) { if (import.meta.vitest) {
const { test, expect, vi } = import.meta.vitest; const { test, expect, expectTypeOf, vi } = import.meta.vitest;
const registry = [Array] as const; const registry = [Array] as const;
const $ = makeFluent(registry); const $ = makeFluent(registry);
@@ -573,10 +577,20 @@ if (import.meta.vitest) {
test("at()", () => { test("at()", () => {
const arr = [1, 2, 3] as const; const arr = [1, 2, 3] as const;
expect($(arr).at(0).value).toBe(arr[0]); const first = $(arr).at(0).value;
expect(first).toBe(arr[0]);
expectTypeOf(first).toEqualTypeOf(arr[0]);
expect($(arr).at(5).value).toBe(undefined); expect($(arr).at(5).value).toBe(undefined);
expect($(arr).at(-1).value).toBe(arr[arr.length - 1]); const last = $(arr).at(-1).value;
expect(last).toBe(arr[arr.length - 1]);
expectTypeOf(last).toEqualTypeOf<
typeof arr extends readonly [...unknown[], infer Last]
? Last
: never
>();
expect($(arr).at(-5).value).toBe(undefined); expect($(arr).at(-5).value).toBe(undefined);
}); });
@@ -598,13 +612,13 @@ if (import.meta.vitest) {
}); });
test("extend()", () => { test("extend()", () => {
const arr = [1, 2]; const arr = [1, 2] as const;
const copies = 2; const copies = 2 as const;
const expected: number[] = new globalThis.Array<number[]>( const expected: number[] = new globalThis.Array<number[]>(
copies + 1, copies + 1,
) )
.fill(arr) .fill([...arr])
.flat(1); .flat(1);
expect($(arr).extend(copies).value).toMatchObject(expected); expect($(arr).extend(copies).value).toMatchObject(expected);
@@ -615,9 +629,10 @@ if (import.meta.vitest) {
const arr = [1, 2, 3, 4, 5] as const; const arr = [1, 2, 3, 4, 5] as const;
const isEven = vi.fn((v: number) => v % 2 === 0); const isEven = vi.fn((v: number) => v % 2 === 0);
expect($(arr).map(isEven).value).toMatchObject( const v = $(arr).map(isEven).value;
arr.map(isEven), expect(v).toMatchObject(arr.map(isEven));
); expectTypeOf(v).toExtend<boolean[]>();
expectTypeOf(v).not.toEqualTypeOf<boolean[]>();
for (let i = 0; i < arr.length; i++) for (let i = 0; i < arr.length; i++)
expect(isEven).toHaveBeenNthCalledWith( expect(isEven).toHaveBeenNthCalledWith(
@@ -632,9 +647,10 @@ if (import.meta.vitest) {
const arr = [5, 4, 3, 2, 1] as const; const arr = [5, 4, 3, 2, 1] as const;
const isEven = vi.fn((v: number) => v % 2 === 0); const isEven = vi.fn((v: number) => v % 2 === 0);
expect($(arr).filter(isEven).value).toMatchObject( const v = $(arr).filter(isEven).value;
arr.filter(isEven), expect(v).toMatchObject(arr.filter(isEven));
); expectTypeOf(v).toExtend<readonly number[]>();
expectTypeOf(v).not.toEqualTypeOf<readonly number[]>();
for (let i = 0; i < arr.length; i++) for (let i = 0; i < arr.length; i++)
expect(isEven).toHaveBeenNthCalledWith( expect(isEven).toHaveBeenNthCalledWith(
@@ -645,9 +661,12 @@ if (import.meta.vitest) {
); );
const dirty = [1, null, 6, undefined, 2] as const; const dirty = [1, null, 6, undefined, 2] as const;
expect($(dirty).filter.some().value).toMatchObject( const clean = $(dirty).filter.some().value;
expect(clean).toMatchObject(
dirty.filter((v) => v !== null && v !== undefined), dirty.filter((v) => v !== null && v !== undefined),
); );
expectTypeOf(clean).toExtend<readonly number[]>();
expectTypeOf(clean).not.toEqualTypeOf<readonly number[]>();
}); });
test("reduce()", () => { test("reduce()", () => {
@@ -693,7 +712,9 @@ if (import.meta.vitest) {
test("length()", () => { test("length()", () => {
const arr = [3, 3, 3] as const; const arr = [3, 3, 3] as const;
expect($(arr).length().value).toBe(arr.length); const v = $(arr).length().value;
expect(v).toBe(arr.length);
expectTypeOf(v).toEqualTypeOf(arr.length);
}); });
test("sort()", () => { test("sort()", () => {
@@ -701,9 +722,10 @@ if (import.meta.vitest) {
const callback = (a: number) => (a % 2 === 0 ? -1 : 1); const callback = (a: number) => (a % 2 === 0 ? -1 : 1);
expect($(numbers).sort(callback).value).toMatchObject( const v = $(numbers).sort(callback).value;
numbers.toSorted(callback), expect(v).toMatchObject(numbers.toSorted(callback));
); expectTypeOf(v).toExtend<readonly number[]>();
expectTypeOf(v).not.toEqualTypeOf<readonly number[]>();
expect($(numbers).sort.ascending().value).toMatchObject( expect($(numbers).sort.ascending().value).toMatchObject(
numbers.toSorted((a, b) => a - b), numbers.toSorted((a, b) => a - b),
@@ -736,15 +758,9 @@ if (import.meta.vitest) {
test("reverse()", () => { test("reverse()", () => {
const array = [1, 2, 3, 4, 5] as const; const array = [1, 2, 3, 4, 5] as const;
expect($(array).reverse().value).toMatchObject( const v = $(array).reverse().value;
array.toReversed(), expect(v).toMatchObject(array.toReversed());
); expectTypeOf(v).toExtend<readonly number[]>();
}); expectTypeOf(v).not.toEqualTypeOf<readonly number[]>();
test("length()", () => {
const length = 3;
const array = new globalThis.Array<number>(length).fill(5);
expect($(array).length().value).toBe(length);
}); });
} }
+1 -1
View File
@@ -109,7 +109,7 @@ if (import.meta.vitest) {
const $ = makeFluent(registry); const $ = makeFluent(registry);
test(".awaited", async () => { test(".awaited", async () => {
const value = 10; const value = 10 as const;
const promise = new Promise<number>((r) => { const promise = new Promise<number>((r) => {
r(value); r(value);
}); });
+77 -19
View File
@@ -6,15 +6,44 @@ import {
type Props, type Props,
type Return, type Return,
} from "../base/mixin"; } from "../base/mixin";
import { assertType } from "../internal"; import { assertType, type MaxDepth } from "../internal";
import { applySwizzle, type Swizzle } from "./math/swizzle"; import { applySwizzle, type Swizzle } from "./math/swizzle";
type Vec<
T,
N extends number,
TOut extends T[] = [],
> = TOut["length"] extends N
? TOut
: TOut["length"] extends MaxDepth
? T[]
: Vec<T, N, [...TOut, T]>;
type Inc<N extends number> = [...Vec<null, N>, null]["length"];
type Sign<T extends number> = T extends 0 type Sign<T extends number> = T extends 0
? 0 ? 0
: `${T}` extends `-${number}` : `${T}` extends `-${number}`
? -1 ? -1
: 1; : 1;
type Negate<T extends number> = T extends 0
? 0
: `${T}` extends `-${infer N extends number}`
? N
: `-${T}` extends `${infer N extends number}`
? N
: number;
type Floor<T extends number> =
`${T}` extends `${infer N extends number}.${number}` ? N : T;
type Ceil<T extends number> =
`${T}` extends `${infer N extends number}.${number}` ? Inc<N> : T;
type Round<T extends number> =
`${T}` extends `${infer N extends number}.${0 | 1 | 2 | 3 | 4}${number | ""}`
? N
: Ceil<T>;
export interface Math extends Mixin.HKT { export interface Math extends Mixin.HKT {
new: (t: HKT.T<this>) => Input<typeof t> extends infer T new: (t: HKT.T<this>) => Input<typeof t> extends infer T
? T extends number ? T extends number
@@ -38,18 +67,23 @@ export interface Math extends Mixin.HKT {
) => Return<number, typeof t>; ) => Return<number, typeof t>;
log: (base?: number) => Return<number, typeof t>; log: (base?: number) => Return<number, typeof t>;
isEqualApprox: ( comparesTo: (
other: number, other: number,
delta?: number, delta?: number,
) => Return<boolean, typeof t>; ) => Return<boolean, typeof t>;
floor: () => Return<number, typeof t>; floor: () => Return<Floor<T>, typeof t>;
ceil: () => Return<number, typeof t>; ceil: () => Return<Ceil<T>, typeof t>;
round: () => Return<number, typeof t>; round: () => Return<Round<T>, typeof t>;
fround: () => Return<number, typeof t>; fround: () => Return<number, typeof t>;
abs: () => Return<number, typeof t>; abs: () => Return<
negate: () => Return<number, typeof t>; `${T}` extends `-${infer N extends number}`
? N
: T,
typeof t
>;
negate: () => Return<Negate<T>, typeof t>;
sign: () => Return<Sign<T>, typeof t>; sign: () => Return<Sign<T>, typeof t>;
min: ( min: (
@@ -118,7 +152,7 @@ export const Math = Mixin<Math>((value, $, fluent) => {
return fluent(M.log(value)); return fluent(M.log(value));
}; };
$.isEqualApprox = ( $.comparesTo = (
other: number, other: number,
delta: number = Number.EPSILON, delta: number = Number.EPSILON,
) => { ) => {
@@ -179,7 +213,7 @@ export const Math = Mixin<Math>((value, $, fluent) => {
}); });
if (import.meta.vitest) { if (import.meta.vitest) {
const { test, expect } = import.meta.vitest; const { test, expect, expectTypeOf } = import.meta.vitest;
const registry = [Math] as const; const registry = [Math] as const;
const $ = makeFluent(registry); const $ = makeFluent(registry);
@@ -204,38 +238,62 @@ if (import.meta.vitest) {
expect($(1000).log(10).value).toBeCloseTo(M.log10(1000)); expect($(1000).log(10).value).toBeCloseTo(M.log10(1000));
}); });
test("equalApprox()", () => { test("comparesTo()", () => {
const a = 0.1 + 0.2; const a = 0.1 + 0.2;
const target = 0.3; const target = 0.3;
expect($(a).isEqualApprox(target).value).toBe(true); expect($(a).comparesTo(target).value).toBe(true);
expect($(a).isEqualApprox(1, 1).value).toBe(true); expect($(a).comparesTo(1, 1).value).toBe(true);
expect( expect(
$(a).isEqualApprox(target + Number.EPSILON * 2).value, $(a).comparesTo(target + Number.EPSILON * 2).value,
).toBe(false); ).toBe(false);
}); });
t("floor", 1.7, 1); test("floor()", () => {
t("ceil", 1.7, 2); expect($(1).floor().value).toBe(1);
expect($(1.7).floor().value).toBe(1);
expectTypeOf($(5.8).floor().value).toEqualTypeOf<5>();
expectTypeOf($(5).floor().value).toEqualTypeOf<5>();
});
test("ceil()", () => {
expect($(1).ceil().value).toBe(1);
expect($(1.7).ceil().value).toBe(2);
expectTypeOf($(5).ceil().value).toEqualTypeOf<5>();
expectTypeOf($(5.8).ceil().value).toEqualTypeOf<6>();
});
test("round()", () => { test("round()", () => {
expect($(1.3).round().value).toBe(1); expect($(1.3).round().value).toBe(1);
expect($(4.5).round().value).toBe(5); expect($(4.5).round().value).toBe(5);
expectTypeOf($(1.3).round().value).toEqualTypeOf<1>();
expectTypeOf($(4.5).round().value).toEqualTypeOf<5>();
}); });
t("fround", 6.45, M.fround(6.45)); t("fround", 6.45, M.fround(6.45));
test("abs()", () => { test("abs()", () => {
const v = 4; const positive = 4 as const;
const negative = -4 as const;
expect($(v).abs().value).toBe(v); const a = $(positive).abs().value;
expect($(-v).abs().value).toBe(v); expect(a).toBe(positive);
expectTypeOf(a).toEqualTypeOf(positive);
const b = $(negative).abs().value;
expect(b).toBe(positive);
expectTypeOf(b).toEqualTypeOf(positive);
}); });
test("negate()", () => { test("negate()", () => {
const v = 7; const v = 7 as const;
expect($(v).negate().value).toBe(-v); expect($(v).negate().value).toBe(-v);
expect($(v).negate().negate().value).toBe(v); expect($(v).negate().negate().value).toBe(v);
expectTypeOf($(4).negate().value).toEqualTypeOf<-4>();
expectTypeOf($(-4).negate().value).toEqualTypeOf<4>();
}); });
test("sign()", () => { test("sign()", () => {
expect($(-4).sign().value).toBe(-1); expect($(-4).sign().value).toBe(-1);

Some files were not shown because too many files have changed in this diff Show More