diff --git a/.gitignore b/.gitignore index a547bf3..62d1799 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ lerna-debug.log* node_modules dist dist-ssr +tests/generated *.local # Editor directories and files diff --git a/coverage/clover.xml b/coverage/clover.xml index 17dc5a4..3921e50 100644 --- a/coverage/clover.xml +++ b/coverage/clover.xml @@ -1,29 +1,38 @@ - - - + + + - + + + + + + - - + + - + + + + + - - - - - - + + + + + + @@ -31,121 +40,218 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + - - - - + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json index 6d5ee24..0580267 100644 --- a/coverage/coverage-final.json +++ b/coverage/coverage-final.json @@ -1,8 +1,12 @@ -{"/home/anton/Projects/fluent/src/internal.ts": {"path":"/home/anton/Projects/fluent/src/internal.ts","statementMap":{"0":{"start":{"line":8,"column":21},"end":{"line":8,"column":null}},"1":{"start":{"line":14,"column":2},"end":{"line":14,"column":null}},"2":{"start":{"line":15,"column":2},"end":{"line":15,"column":null}},"3":{"start":{"line":23,"column":1},"end":{"line":28,"column":null}},"4":{"start":{"line":24,"column":2},"end":{"line":28,"column":null}},"5":{"start":{"line":26,"column":19},"end":{"line":26,"column":34}}},"fnMap":{"0":{"name":"constructor","decl":{"start":{"line":13,"column":1},"end":{"line":13,"column":8}},"loc":{"start":{"line":13,"column":34},"end":{"line":16,"column":null}},"line":13},"1":{"name":"assert","decl":{"start":{"line":19,"column":16},"end":{"line":19,"column":null}},"loc":{"start":{"line":22,"column":21},"end":{"line":29,"column":null}},"line":22},"2":{"name":"(anonymous_2)","decl":{"start":{"line":26,"column":5},"end":{"line":26,"column":13}},"loc":{"start":{"line":26,"column":19},"end":{"line":26,"column":34}},"line":26},"3":{"name":"assertType","decl":{"start":{"line":32,"column":16},"end":{"line":32,"column":30}},"loc":{"start":{"line":32,"column":60},"end":{"line":34,"column":null}},"line":32}},"branchMap":{"0":{"loc":{"start":{"line":23,"column":1},"end":{"line":28,"column":null}},"type":"if","locations":[{"start":{"line":23,"column":1},"end":{"line":28,"column":null}},{"start":{},"end":{}}],"line":23}},"s":{"0":4,"1":0,"2":0,"3":53,"4":0,"5":0},"f":{"0":0,"1":53,"2":0,"3":125},"b":{"0":[0,53]},"meta":{"lastBranch":1,"lastFunction":4,"lastStatement":6,"seen":{"s:8:21:8:Infinity":0,"f:13:1:13:8":0,"s:14:2:14:Infinity":1,"s:15:2:15:Infinity":2,"f:19:16:19:Infinity":1,"b:23:1:28:Infinity:undefined:undefined:undefined:undefined":0,"s:23:1:28:Infinity":3,"s:24:2:28:Infinity":4,"f:26:5:26:13":2,"s:26:19:26:34":5,"f:32:16:32:30":3},"fnNames":{}}} -,"/home/anton/Projects/fluent/src/base/index.ts": {"path":"/home/anton/Projects/fluent/src/base/index.ts","statementMap":{"0":{"start":{"line":18,"column":7},"end":{"line":28,"column":null}},"1":{"start":{"line":20,"column":12},"end":{"line":20,"column":null}},"2":{"start":{"line":22,"column":2},"end":{"line":25,"column":null}},"3":{"start":{"line":24,"column":3},"end":{"line":24,"column":null}},"4":{"start":{"line":27,"column":2},"end":{"line":27,"column":null}},"5":{"start":{"line":30,"column":1},"end":{"line":30,"column":null}}},"fnMap":{"0":{"name":"makeFluent","decl":{"start":{"line":15,"column":16},"end":{"line":15,"column":null}},"loc":{"start":{"line":17,"column":2},"end":{"line":31,"column":null}},"line":17},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":7},"end":{"line":18,"column":26}},"loc":{"start":{"line":18,"column":39},"end":{"line":28,"column":null}},"line":18}},"branchMap":{},"s":{"0":4,"1":66,"2":66,"3":71,"4":66,"5":4},"f":{"0":4,"1":66},"b":{},"meta":{"lastBranch":0,"lastFunction":2,"lastStatement":6,"seen":{"f:15:16:15:Infinity":0,"s:18:7:28:Infinity":0,"f:18:7:18:26":1,"s:20:12:20:Infinity":1,"s:22:2:25:Infinity":2,"s:24:3:24:Infinity":3,"s:27:2:27:Infinity":4,"s:30:1:30:Infinity":5},"fnNames":{}}} +{"/home/anton/Projects/fluent/src/index.ts": {"path":"/home/anton/Projects/fluent/src/index.ts","statementMap":{"0":{"start":{"line":4,"column":13},"end":{"line":4,"column":null}},"1":{"start":{"line":5,"column":17},"end":{"line":5,"column":null}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1},"f":{},"b":{},"meta":{"lastBranch":0,"lastFunction":0,"lastStatement":2,"seen":{"s:4:13:4:Infinity":0,"s:5:17:5:Infinity":1},"fnNames":{}}} +,"/home/anton/Projects/fluent/src/internal.ts": {"path":"/home/anton/Projects/fluent/src/internal.ts","statementMap":{"0":{"start":{"line":8,"column":21},"end":{"line":8,"column":null}},"1":{"start":{"line":14,"column":2},"end":{"line":14,"column":null}},"2":{"start":{"line":15,"column":2},"end":{"line":15,"column":null}},"3":{"start":{"line":23,"column":1},"end":{"line":28,"column":null}},"4":{"start":{"line":24,"column":2},"end":{"line":28,"column":null}},"5":{"start":{"line":26,"column":19},"end":{"line":26,"column":34}}},"fnMap":{"0":{"name":"constructor","decl":{"start":{"line":13,"column":1},"end":{"line":13,"column":8}},"loc":{"start":{"line":13,"column":34},"end":{"line":16,"column":null}},"line":13},"1":{"name":"assert","decl":{"start":{"line":19,"column":16},"end":{"line":19,"column":null}},"loc":{"start":{"line":22,"column":21},"end":{"line":29,"column":null}},"line":22},"2":{"name":"(anonymous_2)","decl":{"start":{"line":26,"column":5},"end":{"line":26,"column":13}},"loc":{"start":{"line":26,"column":19},"end":{"line":26,"column":34}},"line":26},"3":{"name":"assertType","decl":{"start":{"line":32,"column":16},"end":{"line":32,"column":30}},"loc":{"start":{"line":32,"column":60},"end":{"line":34,"column":null}},"line":32}},"branchMap":{"0":{"loc":{"start":{"line":23,"column":1},"end":{"line":28,"column":null}},"type":"if","locations":[{"start":{"line":23,"column":1},"end":{"line":28,"column":null}},{"start":{},"end":{}}],"line":23}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0},"f":{"0":0,"1":0,"2":0,"3":8},"b":{"0":[0,0]},"meta":{"lastBranch":1,"lastFunction":4,"lastStatement":6,"seen":{"s:8:21:8:Infinity":0,"f:13:1:13:8":0,"s:14:2:14:Infinity":1,"s:15:2:15:Infinity":2,"f:19:16:19:Infinity":1,"b:23:1:28:Infinity:undefined:undefined:undefined:undefined":0,"s:23:1:28:Infinity":3,"s:24:2:28:Infinity":4,"f:26:5:26:13":2,"s:26:19:26:34":5,"f:32:16:32:30":3},"fnNames":{}}} +,"/home/anton/Projects/fluent/src/registry.ts": {"path":"/home/anton/Projects/fluent/src/registry.ts","statementMap":{"0":{"start":{"line":10,"column":32},"end":{"line":16,"column":null}}},"fnMap":{},"branchMap":{},"s":{"0":1},"f":{},"b":{},"meta":{"lastBranch":0,"lastFunction":0,"lastStatement":1,"seen":{"s:10:32:16:Infinity":0},"fnNames":{}}} +,"/home/anton/Projects/fluent/src/base/index.ts": {"path":"/home/anton/Projects/fluent/src/base/index.ts","statementMap":{"0":{"start":{"line":31,"column":7},"end":{"line":41,"column":null}},"1":{"start":{"line":33,"column":12},"end":{"line":33,"column":null}},"2":{"start":{"line":35,"column":2},"end":{"line":38,"column":null}},"3":{"start":{"line":37,"column":3},"end":{"line":37,"column":null}},"4":{"start":{"line":40,"column":2},"end":{"line":40,"column":null}},"5":{"start":{"line":43,"column":1},"end":{"line":43,"column":null}}},"fnMap":{"0":{"name":"makeFluent","decl":{"start":{"line":28,"column":16},"end":{"line":28,"column":null}},"loc":{"start":{"line":30,"column":2},"end":{"line":44,"column":null}},"line":30},"1":{"name":"(anonymous_1)","decl":{"start":{"line":31,"column":7},"end":{"line":31,"column":26}},"loc":{"start":{"line":31,"column":39},"end":{"line":41,"column":null}},"line":31}},"branchMap":{},"s":{"0":1,"1":2,"2":2,"3":10,"4":2,"5":1},"f":{"0":1,"1":2},"b":{},"meta":{"lastBranch":0,"lastFunction":2,"lastStatement":6,"seen":{"f:28:16:28:Infinity":0,"s:31:7:41:Infinity":0,"f:31:7:31:26":1,"s:33:12:33:Infinity":1,"s:35:2:38:Infinity":2,"s:37:3:37:Infinity":3,"s:40:2:40:Infinity":4,"s:43:1:43:Infinity":5},"fnNames":{}}} ,"/home/anton/Projects/fluent/src/base/mixin.ts": {"path":"/home/anton/Projects/fluent/src/base/mixin.ts","statementMap":{"0":{"start":{"line":24,"column":1},"end":{"line":27,"column":null}}},"fnMap":{"0":{"name":"Mixin","decl":{"start":{"line":23,"column":16},"end":{"line":23,"column":42}},"loc":{"start":{"line":23,"column":65},"end":{"line":28,"column":null}},"line":23}},"branchMap":{},"s":{"0":5},"f":{"0":5},"b":{},"meta":{"lastBranch":0,"lastFunction":1,"lastStatement":1,"seen":{"f:23:16:23:42":0,"s:24:1:27:Infinity":0},"fnNames":{}}} -,"/home/anton/Projects/fluent/src/mixin/array.ts": {"path":"/home/anton/Projects/fluent/src/mixin/array.ts","statementMap":{"0":{"start":{"line":133,"column":1},"end":{"line":133,"column":null}},"1":{"start":{"line":315,"column":13},"end":{"line":417,"column":null}},"2":{"start":{"line":316,"column":1},"end":{"line":316,"column":null}},"3":{"start":{"line":316,"column":22},"end":{"line":316,"column":null}},"4":{"start":{"line":318,"column":1},"end":{"line":320,"column":null}},"5":{"start":{"line":319,"column":2},"end":{"line":319,"column":null}},"6":{"start":{"line":322,"column":1},"end":{"line":325,"column":null}},"7":{"start":{"line":323,"column":2},"end":{"line":323,"column":null}},"8":{"start":{"line":324,"column":2},"end":{"line":324,"column":null}},"9":{"start":{"line":327,"column":1},"end":{"line":333,"column":null}},"10":{"start":{"line":328,"column":2},"end":{"line":328,"column":null}},"11":{"start":{"line":329,"column":2},"end":{"line":329,"column":null}},"12":{"start":{"line":329,"column":19},"end":{"line":329,"column":null}},"13":{"start":{"line":330,"column":2},"end":{"line":332,"column":null}},"14":{"start":{"line":335,"column":1},"end":{"line":337,"column":null}},"15":{"start":{"line":336,"column":2},"end":{"line":336,"column":null}},"16":{"start":{"line":339,"column":1},"end":{"line":341,"column":null}},"17":{"start":{"line":340,"column":2},"end":{"line":340,"column":null}},"18":{"start":{"line":342,"column":1},"end":{"line":342,"column":null}},"19":{"start":{"line":343,"column":1},"end":{"line":349,"column":null}},"20":{"start":{"line":345,"column":3},"end":{"line":347,"column":null}},"21":{"start":{"line":346,"column":24},"end":{"line":346,"column":53}},"22":{"start":{"line":351,"column":1},"end":{"line":356,"column":null}},"23":{"start":{"line":355,"column":2},"end":{"line":355,"column":null}},"24":{"start":{"line":357,"column":1},"end":{"line":357,"column":null}},"25":{"start":{"line":358,"column":1},"end":{"line":365,"column":null}},"26":{"start":{"line":363,"column":3},"end":{"line":363,"column":null}},"27":{"start":{"line":367,"column":1},"end":{"line":369,"column":null}},"28":{"start":{"line":368,"column":2},"end":{"line":368,"column":null}},"29":{"start":{"line":371,"column":1},"end":{"line":381,"column":null}},"30":{"start":{"line":378,"column":2},"end":{"line":380,"column":null}},"31":{"start":{"line":379,"column":28},"end":{"line":379,"column":49}},"32":{"start":{"line":382,"column":1},"end":{"line":382,"column":null}},"33":{"start":{"line":383,"column":1},"end":{"line":412,"column":null}},"34":{"start":{"line":385,"column":34},"end":{"line":387,"column":null}},"35":{"start":{"line":390,"column":3},"end":{"line":394,"column":null}},"36":{"start":{"line":392,"column":5},"end":{"line":392,"column":null}},"37":{"start":{"line":397,"column":34},"end":{"line":399,"column":null}},"38":{"start":{"line":402,"column":3},"end":{"line":402,"column":null}},"39":{"start":{"line":402,"column":42},"end":{"line":402,"column":57}},"40":{"start":{"line":405,"column":34},"end":{"line":407,"column":null}},"41":{"start":{"line":410,"column":3},"end":{"line":410,"column":null}},"42":{"start":{"line":410,"column":42},"end":{"line":410,"column":57}},"43":{"start":{"line":414,"column":1},"end":{"line":416,"column":null}},"44":{"start":{"line":415,"column":2},"end":{"line":415,"column":null}}},"fnMap":{"0":{"name":"isArray","decl":{"start":{"line":132,"column":9},"end":{"line":132,"column":17}},"loc":{"start":{"line":132,"column":54},"end":{"line":134,"column":null}},"line":132},"1":{"name":"(anonymous_1)","decl":{"start":{"line":315,"column":21},"end":{"line":315,"column":35}},"loc":{"start":{"line":315,"column":56},"end":{"line":417,"column":1}},"line":315},"2":{"name":"(anonymous_2)","decl":{"start":{"line":318,"column":3},"end":{"line":318,"column":9}},"loc":{"start":{"line":318,"column":27},"end":{"line":320,"column":null}},"line":318},"3":{"name":"(anonymous_3)","decl":{"start":{"line":322,"column":3},"end":{"line":322,"column":11}},"loc":{"start":{"line":322,"column":53},"end":{"line":325,"column":null}},"line":322},"4":{"name":"(anonymous_4)","decl":{"start":{"line":327,"column":3},"end":{"line":327,"column":13}},"loc":{"start":{"line":327,"column":31},"end":{"line":333,"column":null}},"line":327},"5":{"name":"(anonymous_5)","decl":{"start":{"line":335,"column":3},"end":{"line":335,"column":10}},"loc":{"start":{"line":335,"column":55},"end":{"line":337,"column":null}},"line":335},"6":{"name":"(anonymous_6)","decl":{"start":{"line":339,"column":3},"end":{"line":339,"column":13}},"loc":{"start":{"line":339,"column":58},"end":{"line":341,"column":null}},"line":339},"7":{"name":"(anonymous_7)","decl":{"start":{"line":344,"column":2},"end":{"line":344,"column":14}},"loc":{"start":{"line":344,"column":14},"end":{"line":348,"column":null}},"line":344},"8":{"name":"(anonymous_8)","decl":{"start":{"line":346,"column":10},"end":{"line":346,"column":18}},"loc":{"start":{"line":346,"column":24},"end":{"line":346,"column":53}},"line":346},"9":{"name":"(anonymous_9)","decl":{"start":{"line":351,"column":3},"end":{"line":351,"column":null}},"loc":{"start":{"line":354,"column":6},"end":{"line":356,"column":null}},"line":354},"10":{"name":"(anonymous_10)","decl":{"start":{"line":359,"column":2},"end":{"line":359,"column":null}},"loc":{"start":{"line":362,"column":7},"end":{"line":364,"column":null}},"line":362},"11":{"name":"(anonymous_11)","decl":{"start":{"line":367,"column":3},"end":{"line":367,"column":18}},"loc":{"start":{"line":367,"column":18},"end":{"line":369,"column":null}},"line":367},"12":{"name":"(anonymous_12)","decl":{"start":{"line":371,"column":3},"end":{"line":371,"column":null}},"loc":{"start":{"line":377,"column":6},"end":{"line":381,"column":null}},"line":377},"13":{"name":"(anonymous_13)","decl":{"start":{"line":379,"column":9},"end":{"line":379,"column":19}},"loc":{"start":{"line":379,"column":28},"end":{"line":379,"column":49}},"line":379},"14":{"name":"(anonymous_14)","decl":{"start":{"line":384,"column":2},"end":{"line":384,"column":null}},"loc":{"start":{"line":389,"column":7},"end":{"line":395,"column":null}},"line":389},"15":{"name":"(anonymous_15)","decl":{"start":{"line":385,"column":3},"end":{"line":385,"column":34}},"loc":{"start":{"line":385,"column":34},"end":{"line":387,"column":null}},"line":385},"16":{"name":"(anonymous_16)","decl":{"start":{"line":391,"column":10},"end":{"line":391,"column":20}},"loc":{"start":{"line":392,"column":5},"end":{"line":392,"column":null}},"line":392},"17":{"name":"(anonymous_17)","decl":{"start":{"line":396,"column":2},"end":{"line":396,"column":null}},"loc":{"start":{"line":401,"column":7},"end":{"line":403,"column":null}},"line":401},"18":{"name":"(anonymous_18)","decl":{"start":{"line":397,"column":3},"end":{"line":397,"column":34}},"loc":{"start":{"line":397,"column":34},"end":{"line":399,"column":null}},"line":397},"19":{"name":"(anonymous_19)","decl":{"start":{"line":402,"column":23},"end":{"line":402,"column":33}},"loc":{"start":{"line":402,"column":42},"end":{"line":402,"column":57}},"line":402},"20":{"name":"(anonymous_20)","decl":{"start":{"line":404,"column":2},"end":{"line":404,"column":null}},"loc":{"start":{"line":409,"column":7},"end":{"line":411,"column":null}},"line":409},"21":{"name":"(anonymous_21)","decl":{"start":{"line":405,"column":3},"end":{"line":405,"column":34}},"loc":{"start":{"line":405,"column":34},"end":{"line":407,"column":null}},"line":405},"22":{"name":"(anonymous_22)","decl":{"start":{"line":410,"column":23},"end":{"line":410,"column":33}},"loc":{"start":{"line":410,"column":42},"end":{"line":410,"column":57}},"line":410},"23":{"name":"(anonymous_23)","decl":{"start":{"line":414,"column":3},"end":{"line":414,"column":19}},"loc":{"start":{"line":414,"column":19},"end":{"line":416,"column":null}},"line":414}},"branchMap":{"0":{"loc":{"start":{"line":133,"column":8},"end":{"line":133,"column":null}},"type":"binary-expr","locations":[{"start":{"line":133,"column":8},"end":{"line":133,"column":33}},{"start":{"line":133,"column":33},"end":{"line":133,"column":null}}],"line":133},"1":{"loc":{"start":{"line":316,"column":1},"end":{"line":316,"column":null}},"type":"if","locations":[{"start":{"line":316,"column":1},"end":{"line":316,"column":null}},{"start":{},"end":{}}],"line":316},"2":{"loc":{"start":{"line":329,"column":2},"end":{"line":329,"column":null}},"type":"if","locations":[{"start":{"line":329,"column":2},"end":{"line":329,"column":null}},{"start":{},"end":{}}],"line":329},"3":{"loc":{"start":{"line":346,"column":24},"end":{"line":346,"column":53}},"type":"binary-expr","locations":[{"start":{"line":346,"column":24},"end":{"line":346,"column":38}},{"start":{"line":346,"column":38},"end":{"line":346,"column":53}}],"line":346},"4":{"loc":{"start":{"line":385,"column":3},"end":{"line":387,"column":null}},"type":"default-arg","locations":[{"start":{"line":385,"column":3},"end":{"line":387,"column":null}}],"line":385},"5":{"loc":{"start":{"line":392,"column":5},"end":{"line":392,"column":null}},"type":"cond-expr","locations":[{"start":{"line":392,"column":25},"end":{"line":392,"column":30}},{"start":{"line":392,"column":30},"end":{"line":392,"column":null}}],"line":392},"6":{"loc":{"start":{"line":397,"column":3},"end":{"line":399,"column":null}},"type":"default-arg","locations":[{"start":{"line":397,"column":3},"end":{"line":399,"column":null}}],"line":397},"7":{"loc":{"start":{"line":405,"column":3},"end":{"line":407,"column":null}},"type":"default-arg","locations":[{"start":{"line":405,"column":3},"end":{"line":407,"column":null}}],"line":405}},"s":{"0":36,"1":1,"2":36,"3":7,"4":29,"5":4,"6":29,"7":1,"8":1,"9":29,"10":1,"11":1,"12":0,"13":1,"14":29,"15":1,"16":29,"17":1,"18":29,"19":29,"20":1,"21":5,"22":29,"23":1,"24":29,"25":29,"26":1,"27":29,"28":1,"29":29,"30":1,"31":8,"32":29,"33":29,"34":16,"35":1,"36":8,"37":18,"38":2,"39":11,"40":16,"41":2,"42":10,"43":29,"44":0},"f":{"0":36,"1":36,"2":4,"3":1,"4":1,"5":1,"6":1,"7":1,"8":5,"9":1,"10":1,"11":1,"12":1,"13":8,"14":1,"15":16,"16":8,"17":2,"18":18,"19":11,"20":2,"21":16,"22":10,"23":0},"b":{"0":[36,29],"1":[7,29],"2":[0,1],"3":[5,4],"4":[16],"5":[3,5],"6":[18],"7":[16]},"meta":{"lastBranch":8,"lastFunction":24,"lastStatement":45,"seen":{"f:132:9:132:17":0,"s:133:1:133:Infinity":0,"b:133:8:133:33:133:33:133:Infinity":0,"s:315:13:417:Infinity":1,"f:315:21:315:35":1,"b:316:1:316:Infinity:undefined:undefined:undefined:undefined":1,"s:316:1:316:Infinity":2,"s:316:22:316:Infinity":3,"s:318:1:320:Infinity":4,"f:318:3:318:9":2,"s:319:2:319:Infinity":5,"s:322:1:325:Infinity":6,"f:322:3:322:11":3,"s:323:2:323:Infinity":7,"s:324:2:324:Infinity":8,"s:327:1:333:Infinity":9,"f:327:3:327:13":4,"s:328:2:328:Infinity":10,"b:329:2:329:Infinity:undefined:undefined:undefined:undefined":2,"s:329:2:329:Infinity":11,"s:329:19:329:Infinity":12,"s:330:2:332:Infinity":13,"s:335:1:337:Infinity":14,"f:335:3:335:10":5,"s:336:2:336:Infinity":15,"s:339:1:341:Infinity":16,"f:339:3:339:13":6,"s:340:2:340:Infinity":17,"s:342:1:342:Infinity":18,"s:343:1:349:Infinity":19,"f:344:2:344:14":7,"s:345:3:347:Infinity":20,"f:346:10:346:18":8,"s:346:24:346:53":21,"b:346:24:346:38:346:38:346:53":3,"s:351:1:356:Infinity":22,"f:351:3:351:Infinity":9,"s:355:2:355:Infinity":23,"s:357:1:357:Infinity":24,"s:358:1:365:Infinity":25,"f:359:2:359:Infinity":10,"s:363:3:363:Infinity":26,"s:367:1:369:Infinity":27,"f:367:3:367:18":11,"s:368:2:368:Infinity":28,"s:371:1:381:Infinity":29,"f:371:3:371:Infinity":12,"s:378:2:380:Infinity":30,"f:379:9:379:19":13,"s:379:28:379:49":31,"s:382:1:382:Infinity":32,"s:383:1:412:Infinity":33,"f:384:2:384:Infinity":14,"b:385:3:387:Infinity":4,"f:385:3:385:34":15,"s:385:34:387:Infinity":34,"s:390:3:394:Infinity":35,"f:391:10:391:20":16,"s:392:5:392:Infinity":36,"b:392:25:392:30:392:30:392:Infinity":5,"f:396:2:396:Infinity":17,"b:397:3:399:Infinity":6,"f:397:3:397:34":18,"s:397:34:399:Infinity":37,"s:402:3:402:Infinity":38,"f:402:23:402:33":19,"s:402:42:402:57":39,"f:404:2:404:Infinity":20,"b:405:3:407:Infinity":7,"f:405:3:405:34":21,"s:405:34:407:Infinity":40,"s:410:3:410:Infinity":41,"f:410:23:410:33":22,"s:410:42:410:57":42,"s:414:1:416:Infinity":43,"f:414:3:414:19":23,"s:415:2:415:Infinity":44},"fnNames":{}}} -,"/home/anton/Projects/fluent/src/mixin/awaited.ts": {"path":"/home/anton/Projects/fluent/src/mixin/awaited.ts","statementMap":{"0":{"start":{"line":14,"column":2},"end":{"line":14,"column":null}},"1":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"2":{"start":{"line":48,"column":13},"end":{"line":103,"column":null}},"3":{"start":{"line":49,"column":1},"end":{"line":49,"column":null}},"4":{"start":{"line":49,"column":34},"end":{"line":49,"column":null}},"5":{"start":{"line":51,"column":1},"end":{"line":53,"column":null}},"6":{"start":{"line":52,"column":2},"end":{"line":52,"column":null}},"7":{"start":{"line":55,"column":1},"end":{"line":102,"column":null}},"8":{"start":{"line":58,"column":41},"end":{"line":60,"column":null}},"9":{"start":{"line":59,"column":4},"end":{"line":59,"column":null}},"10":{"start":{"line":62,"column":31},"end":{"line":62,"column":null}},"11":{"start":{"line":64,"column":17},"end":{"line":98,"column":null}},"12":{"start":{"line":64,"column":49},"end":{"line":64,"column":56}},"13":{"start":{"line":66,"column":5},"end":{"line":67,"column":null}},"14":{"start":{"line":67,"column":6},"end":{"line":67,"column":null}},"15":{"start":{"line":67,"column":27},"end":{"line":67,"column":34}},"16":{"start":{"line":68,"column":5},"end":{"line":68,"column":null}},"17":{"start":{"line":69,"column":5},"end":{"line":69,"column":null}},"18":{"start":{"line":72,"column":5},"end":{"line":95,"column":null}},"19":{"start":{"line":73,"column":25},"end":{"line":73,"column":null}},"20":{"start":{"line":74,"column":6},"end":{"line":85,"column":null}},"21":{"start":{"line":75,"column":7},"end":{"line":79,"column":null}},"22":{"start":{"line":80,"column":7},"end":{"line":82,"column":null}},"23":{"start":{"line":84,"column":7},"end":{"line":84,"column":null}},"24":{"start":{"line":87,"column":6},"end":{"line":87,"column":null}},"25":{"start":{"line":88,"column":6},"end":{"line":92,"column":null}},"26":{"start":{"line":94,"column":6},"end":{"line":94,"column":null}},"27":{"start":{"line":96,"column":5},"end":{"line":96,"column":null}},"28":{"start":{"line":100,"column":3},"end":{"line":100,"column":null}}},"fnMap":{"0":{"name":"constructor","decl":{"start":{"line":13,"column":1},"end":{"line":13,"column":8}},"loc":{"start":{"line":13,"column":30},"end":{"line":15,"column":null}},"line":13},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":13},"end":{"line":17,"column":21}},"loc":{"start":{"line":17,"column":21},"end":{"line":23,"column":null}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":48,"column":26},"end":{"line":48,"column":45}},"loc":{"start":{"line":48,"column":66},"end":{"line":103,"column":1}},"line":48},"3":{"name":"(anonymous_3)","decl":{"start":{"line":51,"column":3},"end":{"line":51,"column":11}},"loc":{"start":{"line":51,"column":53},"end":{"line":53,"column":null}},"line":51},"4":{"name":"get","decl":{"start":{"line":57,"column":2},"end":{"line":57,"column":8}},"loc":{"start":{"line":57,"column":8},"end":{"line":101,"column":null}},"line":57},"5":{"name":"(anonymous_5)","decl":{"start":{"line":58,"column":47},"end":{"line":58,"column":53}},"loc":{"start":{"line":59,"column":4},"end":{"line":59,"column":null}},"line":59},"6":{"name":"(anonymous_6)","decl":{"start":{"line":64,"column":21},"end":{"line":64,"column":28}},"loc":{"start":{"line":64,"column":49},"end":{"line":64,"column":56}},"line":64},"7":{"name":"(anonymous_7)","decl":{"start":{"line":65,"column":4},"end":{"line":65,"column":10}},"loc":{"start":{"line":65,"column":21},"end":{"line":70,"column":null}},"line":65},"8":{"name":"(anonymous_8)","decl":{"start":{"line":67,"column":15},"end":{"line":67,"column":21}},"loc":{"start":{"line":67,"column":27},"end":{"line":67,"column":34}},"line":67},"9":{"name":"(anonymous_9)","decl":{"start":{"line":71,"column":4},"end":{"line":71,"column":12}},"loc":{"start":{"line":71,"column":49},"end":{"line":97,"column":null}},"line":71},"10":{"name":"(anonymous_10)","decl":{"start":{"line":72,"column":11},"end":{"line":72,"column":17}},"loc":{"start":{"line":72,"column":23},"end":{"line":95,"column":6}},"line":72}},"branchMap":{"0":{"loc":{"start":{"line":49,"column":1},"end":{"line":49,"column":null}},"type":"if","locations":[{"start":{"line":49,"column":1},"end":{"line":49,"column":null}},{"start":{},"end":{}}],"line":49},"1":{"loc":{"start":{"line":66,"column":5},"end":{"line":67,"column":null}},"type":"if","locations":[{"start":{"line":66,"column":5},"end":{"line":67,"column":null}},{"start":{},"end":{}}],"line":66},"2":{"loc":{"start":{"line":76,"column":8},"end":{"line":78,"column":null}},"type":"binary-expr","locations":[{"start":{"line":76,"column":8},"end":{"line":76,"column":null}},{"start":{"line":77,"column":9},"end":{"line":77,"column":null}},{"start":{"line":78,"column":9},"end":{"line":78,"column":null}}],"line":76}},"s":{"0":0,"1":0,"2":1,"3":5,"4":2,"5":3,"6":1,"7":3,"8":1,"9":1,"10":1,"11":1,"12":1,"13":2,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1},"f":{"0":0,"1":0,"2":5,"3":1,"4":1,"5":1,"6":1,"7":2,"8":1,"9":1,"10":1},"b":{"0":[2,3],"1":[1,1],"2":[1,1,1]},"meta":{"lastBranch":3,"lastFunction":11,"lastStatement":29,"seen":{"f:13:1:13:8":0,"s:14:2:14:Infinity":0,"f:17:13:17:21":1,"s:18:2:18:Infinity":1,"s:48:13:103:Infinity":2,"f:48:26:48:45":2,"b:49:1:49:Infinity:undefined:undefined:undefined:undefined":0,"s:49:1:49:Infinity":3,"s:49:34:49:Infinity":4,"s:51:1:53:Infinity":5,"f:51:3:51:11":3,"s:52:2:52:Infinity":6,"s:55:1:102:Infinity":7,"f:57:2:57:8":4,"s:58:41:60:Infinity":8,"f:58:47:58:53":5,"s:59:4:59:Infinity":9,"s:62:31:62:Infinity":10,"s:64:17:98:Infinity":11,"f:64:21:64:28":6,"s:64:49:64:56":12,"f:65:4:65:10":7,"b:66:5:67:Infinity:undefined:undefined:undefined:undefined":1,"s:66:5:67:Infinity":13,"s:67:6:67:Infinity":14,"f:67:15:67:21":8,"s:67:27:67:34":15,"s:68:5:68:Infinity":16,"s:69:5:69:Infinity":17,"f:71:4:71:12":9,"s:72:5:95:Infinity":18,"f:72:11:72:17":10,"s:73:25:73:Infinity":19,"s:74:6:85:Infinity":20,"s:75:7:79:Infinity":21,"b:76:8:76:Infinity:77:9:77:Infinity:78:9:78:Infinity":2,"s:80:7:82:Infinity":22,"s:84:7:84:Infinity":23,"s:87:6:87:Infinity":24,"s:88:6:92:Infinity":25,"s:94:6:94:Infinity":26,"s:96:5:96:Infinity":27,"s:100:3:100:Infinity":28},"fnNames":{}}} -,"/home/anton/Projects/fluent/src/mixin/base.ts": {"path":"/home/anton/Projects/fluent/src/mixin/base.ts","statementMap":{"0":{"start":{"line":43,"column":13},"end":{"line":52,"column":null}},"1":{"start":{"line":44,"column":1},"end":{"line":47,"column":null}},"2":{"start":{"line":45,"column":2},"end":{"line":45,"column":null}},"3":{"start":{"line":46,"column":2},"end":{"line":46,"column":null}},"4":{"start":{"line":49,"column":1},"end":{"line":51,"column":null}},"5":{"start":{"line":50,"column":2},"end":{"line":50,"column":null}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":43,"column":20},"end":{"line":43,"column":33}},"loc":{"start":{"line":43,"column":54},"end":{"line":52,"column":1}},"line":43},"1":{"name":"(anonymous_1)","decl":{"start":{"line":44,"column":3},"end":{"line":44,"column":10}},"loc":{"start":{"line":44,"column":49},"end":{"line":47,"column":null}},"line":44},"2":{"name":"(anonymous_2)","decl":{"start":{"line":49,"column":3},"end":{"line":49,"column":16}},"loc":{"start":{"line":49,"column":58},"end":{"line":51,"column":null}},"line":49}},"branchMap":{},"s":{"0":2,"1":12,"2":1,"3":1,"4":12,"5":4},"f":{"0":12,"1":1,"2":4},"b":{},"meta":{"lastBranch":0,"lastFunction":3,"lastStatement":6,"seen":{"s:43:13:52:Infinity":0,"f:43:20:43:33":0,"s:44:1:47:Infinity":1,"f:44:3:44:10":1,"s:45:2:45:Infinity":2,"s:46:2:46:Infinity":3,"s:49:1:51:Infinity":4,"f:49:3:49:16":2,"s:50:2:50:Infinity":5},"fnNames":{}}} -,"/home/anton/Projects/fluent/src/mixin/optional.ts": {"path":"/home/anton/Projects/fluent/src/mixin/optional.ts","statementMap":{"0":{"start":{"line":16,"column":1},"end":{"line":16,"column":null}},"1":{"start":{"line":157,"column":13},"end":{"line":216,"column":null}},"2":{"start":{"line":158,"column":1},"end":{"line":207,"column":null}},"3":{"start":{"line":159,"column":2},"end":{"line":161,"column":null}},"4":{"start":{"line":160,"column":3},"end":{"line":160,"column":null}},"5":{"start":{"line":163,"column":2},"end":{"line":165,"column":null}},"6":{"start":{"line":164,"column":3},"end":{"line":164,"column":null}},"7":{"start":{"line":166,"column":2},"end":{"line":166,"column":null}},"8":{"start":{"line":167,"column":2},"end":{"line":171,"column":null}},"9":{"start":{"line":169,"column":4},"end":{"line":169,"column":null}},"10":{"start":{"line":173,"column":2},"end":{"line":175,"column":null}},"11":{"start":{"line":174,"column":3},"end":{"line":174,"column":null}},"12":{"start":{"line":176,"column":2},"end":{"line":176,"column":null}},"13":{"start":{"line":177,"column":2},"end":{"line":181,"column":null}},"14":{"start":{"line":179,"column":4},"end":{"line":179,"column":null}},"15":{"start":{"line":183,"column":2},"end":{"line":185,"column":null}},"16":{"start":{"line":184,"column":3},"end":{"line":184,"column":null}},"17":{"start":{"line":187,"column":2},"end":{"line":189,"column":null}},"18":{"start":{"line":188,"column":3},"end":{"line":188,"column":null}},"19":{"start":{"line":191,"column":2},"end":{"line":191,"column":null}},"20":{"start":{"line":192,"column":2},"end":{"line":196,"column":null}},"21":{"start":{"line":194,"column":4},"end":{"line":194,"column":null}},"22":{"start":{"line":198,"column":2},"end":{"line":200,"column":null}},"23":{"start":{"line":199,"column":3},"end":{"line":199,"column":null}},"24":{"start":{"line":201,"column":2},"end":{"line":201,"column":null}},"25":{"start":{"line":202,"column":2},"end":{"line":206,"column":null}},"26":{"start":{"line":204,"column":4},"end":{"line":204,"column":null}},"27":{"start":{"line":209,"column":1},"end":{"line":215,"column":null}},"28":{"start":{"line":213,"column":2},"end":{"line":213,"column":null}},"29":{"start":{"line":213,"column":23},"end":{"line":213,"column":null}},"30":{"start":{"line":214,"column":2},"end":{"line":214,"column":null}}},"fnMap":{"0":{"name":"isNone","decl":{"start":{"line":15,"column":9},"end":{"line":15,"column":19}},"loc":{"start":{"line":15,"column":39},"end":{"line":17,"column":null}},"line":15},"1":{"name":"(anonymous_1)","decl":{"start":{"line":157,"column":24},"end":{"line":157,"column":41}},"loc":{"start":{"line":157,"column":62},"end":{"line":216,"column":1}},"line":157},"2":{"name":"(anonymous_2)","decl":{"start":{"line":159,"column":4},"end":{"line":159,"column":16}},"loc":{"start":{"line":159,"column":16},"end":{"line":161,"column":null}},"line":159},"3":{"name":"(anonymous_3)","decl":{"start":{"line":163,"column":4},"end":{"line":163,"column":10}},"loc":{"start":{"line":163,"column":32},"end":{"line":165,"column":null}},"line":163},"4":{"name":"(anonymous_4)","decl":{"start":{"line":168,"column":3},"end":{"line":168,"column":10}},"loc":{"start":{"line":168,"column":48},"end":{"line":170,"column":null}},"line":168},"5":{"name":"(anonymous_5)","decl":{"start":{"line":173,"column":4},"end":{"line":173,"column":19}},"loc":{"start":{"line":173,"column":19},"end":{"line":175,"column":null}},"line":173},"6":{"name":"(anonymous_6)","decl":{"start":{"line":178,"column":3},"end":{"line":178,"column":10}},"loc":{"start":{"line":178,"column":27},"end":{"line":180,"column":null}},"line":178},"7":{"name":"(anonymous_7)","decl":{"start":{"line":183,"column":4},"end":{"line":183,"column":11}},"loc":{"start":{"line":183,"column":49},"end":{"line":185,"column":null}},"line":183},"8":{"name":"(anonymous_8)","decl":{"start":{"line":187,"column":4},"end":{"line":187,"column":15}},"loc":{"start":{"line":187,"column":15},"end":{"line":189,"column":null}},"line":187},"9":{"name":"(anonymous_9)","decl":{"start":{"line":193,"column":3},"end":{"line":193,"column":15}},"loc":{"start":{"line":193,"column":15},"end":{"line":195,"column":null}},"line":193},"10":{"name":"(anonymous_10)","decl":{"start":{"line":198,"column":4},"end":{"line":198,"column":14}},"loc":{"start":{"line":198,"column":31},"end":{"line":200,"column":null}},"line":198},"11":{"name":"(anonymous_11)","decl":{"start":{"line":203,"column":3},"end":{"line":203,"column":10}},"loc":{"start":{"line":203,"column":27},"end":{"line":205,"column":null}},"line":203},"12":{"name":"(anonymous_12)","decl":{"start":{"line":209,"column":3},"end":{"line":209,"column":null}},"loc":{"start":{"line":212,"column":6},"end":{"line":215,"column":null}},"line":212}},"branchMap":{"0":{"loc":{"start":{"line":16,"column":8},"end":{"line":16,"column":null}},"type":"binary-expr","locations":[{"start":{"line":16,"column":8},"end":{"line":16,"column":22}},{"start":{"line":16,"column":22},"end":{"line":16,"column":null}}],"line":16},"1":{"loc":{"start":{"line":158,"column":1},"end":{"line":207,"column":null}},"type":"if","locations":[{"start":{"line":158,"column":1},"end":{"line":207,"column":null}},{"start":{"line":182,"column":8},"end":{"line":207,"column":null}}],"line":158},"2":{"loc":{"start":{"line":211,"column":2},"end":{"line":211,"column":null}},"type":"default-arg","locations":[{"start":{"line":211,"column":13},"end":{"line":211,"column":null}}],"line":211},"3":{"loc":{"start":{"line":213,"column":2},"end":{"line":213,"column":null}},"type":"if","locations":[{"start":{"line":213,"column":2},"end":{"line":213,"column":null}},{"start":{},"end":{}}],"line":213}},"s":{"0":18,"1":1,"2":18,"3":5,"4":1,"5":5,"6":1,"7":5,"8":5,"9":1,"10":5,"11":0,"12":5,"13":5,"14":0,"15":13,"16":1,"17":13,"18":1,"19":13,"20":13,"21":1,"22":13,"23":0,"24":13,"25":13,"26":0,"27":18,"28":3,"29":1,"30":2},"f":{"0":18,"1":18,"2":1,"3":1,"4":1,"5":0,"6":0,"7":1,"8":1,"9":1,"10":0,"11":0,"12":3},"b":{"0":[18,13],"1":[5,13],"2":[3],"3":[1,2]},"meta":{"lastBranch":4,"lastFunction":13,"lastStatement":31,"seen":{"f:15:9:15:19":0,"s:16:1:16:Infinity":0,"b:16:8:16:22:16:22:16:Infinity":0,"s:157:13:216:Infinity":1,"f:157:24:157:41":1,"b:158:1:207:Infinity:182:8:207:Infinity":1,"s:158:1:207:Infinity":2,"s:159:2:161:Infinity":3,"f:159:4:159:16":2,"s:160:3:160:Infinity":4,"s:163:2:165:Infinity":5,"f:163:4:163:10":3,"s:164:3:164:Infinity":6,"s:166:2:166:Infinity":7,"s:167:2:171:Infinity":8,"f:168:3:168:10":4,"s:169:4:169:Infinity":9,"s:173:2:175:Infinity":10,"f:173:4:173:19":5,"s:174:3:174:Infinity":11,"s:176:2:176:Infinity":12,"s:177:2:181:Infinity":13,"f:178:3:178:10":6,"s:179:4:179:Infinity":14,"s:183:2:185:Infinity":15,"f:183:4:183:11":7,"s:184:3:184:Infinity":16,"s:187:2:189:Infinity":17,"f:187:4:187:15":8,"s:188:3:188:Infinity":18,"s:191:2:191:Infinity":19,"s:192:2:196:Infinity":20,"f:193:3:193:15":9,"s:194:4:194:Infinity":21,"s:198:2:200:Infinity":22,"f:198:4:198:14":10,"s:199:3:199:Infinity":23,"s:201:2:201:Infinity":24,"s:202:2:206:Infinity":25,"f:203:3:203:10":11,"s:204:4:204:Infinity":26,"s:209:1:215:Infinity":27,"f:209:3:209:Infinity":12,"b:211:13:211:Infinity":2,"b:213:2:213:Infinity:undefined:undefined:undefined:undefined":3,"s:213:2:213:Infinity":28,"s:213:23:213:Infinity":29,"s:214:2:214:Infinity":30},"fnNames":{}}} +,"/home/anton/Projects/fluent/src/mixin/array.ts": {"path":"/home/anton/Projects/fluent/src/mixin/array.ts","statementMap":{"0":{"start":{"line":133,"column":1},"end":{"line":133,"column":null}},"1":{"start":{"line":463,"column":13},"end":{"line":565,"column":null}},"2":{"start":{"line":464,"column":1},"end":{"line":464,"column":null}},"3":{"start":{"line":464,"column":22},"end":{"line":464,"column":null}},"4":{"start":{"line":466,"column":1},"end":{"line":468,"column":null}},"5":{"start":{"line":467,"column":2},"end":{"line":467,"column":null}},"6":{"start":{"line":470,"column":1},"end":{"line":473,"column":null}},"7":{"start":{"line":471,"column":2},"end":{"line":471,"column":null}},"8":{"start":{"line":472,"column":2},"end":{"line":472,"column":null}},"9":{"start":{"line":475,"column":1},"end":{"line":483,"column":null}},"10":{"start":{"line":476,"column":2},"end":{"line":476,"column":null}},"11":{"start":{"line":477,"column":2},"end":{"line":477,"column":null}},"12":{"start":{"line":477,"column":19},"end":{"line":477,"column":null}},"13":{"start":{"line":478,"column":2},"end":{"line":482,"column":null}},"14":{"start":{"line":485,"column":1},"end":{"line":487,"column":null}},"15":{"start":{"line":486,"column":2},"end":{"line":486,"column":null}},"16":{"start":{"line":489,"column":1},"end":{"line":491,"column":null}},"17":{"start":{"line":490,"column":2},"end":{"line":490,"column":null}},"18":{"start":{"line":492,"column":1},"end":{"line":492,"column":null}},"19":{"start":{"line":493,"column":1},"end":{"line":499,"column":null}},"20":{"start":{"line":495,"column":3},"end":{"line":497,"column":null}},"21":{"start":{"line":496,"column":24},"end":{"line":496,"column":53}},"22":{"start":{"line":501,"column":1},"end":{"line":506,"column":null}},"23":{"start":{"line":505,"column":2},"end":{"line":505,"column":null}},"24":{"start":{"line":507,"column":1},"end":{"line":507,"column":null}},"25":{"start":{"line":508,"column":1},"end":{"line":515,"column":null}},"26":{"start":{"line":513,"column":3},"end":{"line":513,"column":null}},"27":{"start":{"line":517,"column":1},"end":{"line":519,"column":null}},"28":{"start":{"line":518,"column":2},"end":{"line":518,"column":null}},"29":{"start":{"line":521,"column":1},"end":{"line":531,"column":null}},"30":{"start":{"line":528,"column":2},"end":{"line":530,"column":null}},"31":{"start":{"line":529,"column":28},"end":{"line":529,"column":49}},"32":{"start":{"line":532,"column":1},"end":{"line":532,"column":null}},"33":{"start":{"line":533,"column":1},"end":{"line":560,"column":null}},"34":{"start":{"line":535,"column":34},"end":{"line":537,"column":null}},"35":{"start":{"line":540,"column":3},"end":{"line":542,"column":null}},"36":{"start":{"line":541,"column":30},"end":{"line":541,"column":55}},"37":{"start":{"line":545,"column":34},"end":{"line":547,"column":null}},"38":{"start":{"line":550,"column":3},"end":{"line":550,"column":null}},"39":{"start":{"line":550,"column":42},"end":{"line":550,"column":57}},"40":{"start":{"line":553,"column":34},"end":{"line":555,"column":null}},"41":{"start":{"line":558,"column":3},"end":{"line":558,"column":null}},"42":{"start":{"line":558,"column":42},"end":{"line":558,"column":57}},"43":{"start":{"line":562,"column":1},"end":{"line":564,"column":null}},"44":{"start":{"line":563,"column":2},"end":{"line":563,"column":null}}},"fnMap":{"0":{"name":"isArray","decl":{"start":{"line":132,"column":9},"end":{"line":132,"column":17}},"loc":{"start":{"line":132,"column":54},"end":{"line":134,"column":null}},"line":132},"1":{"name":"(anonymous_1)","decl":{"start":{"line":463,"column":21},"end":{"line":463,"column":35}},"loc":{"start":{"line":463,"column":56},"end":{"line":565,"column":1}},"line":463},"2":{"name":"(anonymous_2)","decl":{"start":{"line":466,"column":3},"end":{"line":466,"column":9}},"loc":{"start":{"line":466,"column":27},"end":{"line":468,"column":null}},"line":466},"3":{"name":"(anonymous_3)","decl":{"start":{"line":470,"column":3},"end":{"line":470,"column":11}},"loc":{"start":{"line":470,"column":53},"end":{"line":473,"column":null}},"line":470},"4":{"name":"(anonymous_4)","decl":{"start":{"line":475,"column":3},"end":{"line":475,"column":13}},"loc":{"start":{"line":475,"column":31},"end":{"line":483,"column":null}},"line":475},"5":{"name":"(anonymous_5)","decl":{"start":{"line":485,"column":3},"end":{"line":485,"column":10}},"loc":{"start":{"line":485,"column":55},"end":{"line":487,"column":null}},"line":485},"6":{"name":"(anonymous_6)","decl":{"start":{"line":489,"column":3},"end":{"line":489,"column":13}},"loc":{"start":{"line":489,"column":58},"end":{"line":491,"column":null}},"line":489},"7":{"name":"(anonymous_7)","decl":{"start":{"line":494,"column":2},"end":{"line":494,"column":14}},"loc":{"start":{"line":494,"column":14},"end":{"line":498,"column":null}},"line":494},"8":{"name":"(anonymous_8)","decl":{"start":{"line":496,"column":10},"end":{"line":496,"column":18}},"loc":{"start":{"line":496,"column":24},"end":{"line":496,"column":53}},"line":496},"9":{"name":"(anonymous_9)","decl":{"start":{"line":501,"column":3},"end":{"line":501,"column":null}},"loc":{"start":{"line":504,"column":6},"end":{"line":506,"column":null}},"line":504},"10":{"name":"(anonymous_10)","decl":{"start":{"line":509,"column":2},"end":{"line":509,"column":null}},"loc":{"start":{"line":512,"column":7},"end":{"line":514,"column":null}},"line":512},"11":{"name":"(anonymous_11)","decl":{"start":{"line":517,"column":3},"end":{"line":517,"column":18}},"loc":{"start":{"line":517,"column":18},"end":{"line":519,"column":null}},"line":517},"12":{"name":"(anonymous_12)","decl":{"start":{"line":521,"column":3},"end":{"line":521,"column":null}},"loc":{"start":{"line":527,"column":6},"end":{"line":531,"column":null}},"line":527},"13":{"name":"(anonymous_13)","decl":{"start":{"line":529,"column":9},"end":{"line":529,"column":19}},"loc":{"start":{"line":529,"column":28},"end":{"line":529,"column":49}},"line":529},"14":{"name":"(anonymous_14)","decl":{"start":{"line":534,"column":2},"end":{"line":534,"column":null}},"loc":{"start":{"line":539,"column":7},"end":{"line":543,"column":null}},"line":539},"15":{"name":"(anonymous_15)","decl":{"start":{"line":535,"column":3},"end":{"line":535,"column":34}},"loc":{"start":{"line":535,"column":34},"end":{"line":537,"column":null}},"line":535},"16":{"name":"(anonymous_16)","decl":{"start":{"line":541,"column":10},"end":{"line":541,"column":20}},"loc":{"start":{"line":541,"column":30},"end":{"line":541,"column":55}},"line":541},"17":{"name":"(anonymous_17)","decl":{"start":{"line":544,"column":2},"end":{"line":544,"column":null}},"loc":{"start":{"line":549,"column":7},"end":{"line":551,"column":null}},"line":549},"18":{"name":"(anonymous_18)","decl":{"start":{"line":545,"column":3},"end":{"line":545,"column":34}},"loc":{"start":{"line":545,"column":34},"end":{"line":547,"column":null}},"line":545},"19":{"name":"(anonymous_19)","decl":{"start":{"line":550,"column":23},"end":{"line":550,"column":33}},"loc":{"start":{"line":550,"column":42},"end":{"line":550,"column":57}},"line":550},"20":{"name":"(anonymous_20)","decl":{"start":{"line":552,"column":2},"end":{"line":552,"column":null}},"loc":{"start":{"line":557,"column":7},"end":{"line":559,"column":null}},"line":557},"21":{"name":"(anonymous_21)","decl":{"start":{"line":553,"column":3},"end":{"line":553,"column":34}},"loc":{"start":{"line":553,"column":34},"end":{"line":555,"column":null}},"line":553},"22":{"name":"(anonymous_22)","decl":{"start":{"line":558,"column":23},"end":{"line":558,"column":33}},"loc":{"start":{"line":558,"column":42},"end":{"line":558,"column":57}},"line":558},"23":{"name":"(anonymous_23)","decl":{"start":{"line":562,"column":3},"end":{"line":562,"column":19}},"loc":{"start":{"line":562,"column":19},"end":{"line":564,"column":null}},"line":562}},"branchMap":{"0":{"loc":{"start":{"line":133,"column":8},"end":{"line":133,"column":null}},"type":"binary-expr","locations":[{"start":{"line":133,"column":8},"end":{"line":133,"column":33}},{"start":{"line":133,"column":33},"end":{"line":133,"column":null}}],"line":133},"1":{"loc":{"start":{"line":464,"column":1},"end":{"line":464,"column":null}},"type":"if","locations":[{"start":{"line":464,"column":1},"end":{"line":464,"column":null}},{"start":{},"end":{}}],"line":464},"2":{"loc":{"start":{"line":477,"column":2},"end":{"line":477,"column":null}},"type":"if","locations":[{"start":{"line":477,"column":2},"end":{"line":477,"column":null}},{"start":{},"end":{}}],"line":477},"3":{"loc":{"start":{"line":496,"column":24},"end":{"line":496,"column":53}},"type":"binary-expr","locations":[{"start":{"line":496,"column":24},"end":{"line":496,"column":38}},{"start":{"line":496,"column":38},"end":{"line":496,"column":53}}],"line":496},"4":{"loc":{"start":{"line":535,"column":3},"end":{"line":537,"column":null}},"type":"default-arg","locations":[{"start":{"line":535,"column":3},"end":{"line":537,"column":null}}],"line":535},"5":{"loc":{"start":{"line":541,"column":30},"end":{"line":541,"column":55}},"type":"cond-expr","locations":[{"start":{"line":541,"column":48},"end":{"line":541,"column":53}},{"start":{"line":541,"column":53},"end":{"line":541,"column":55}}],"line":541},"6":{"loc":{"start":{"line":545,"column":3},"end":{"line":547,"column":null}},"type":"default-arg","locations":[{"start":{"line":545,"column":3},"end":{"line":547,"column":null}}],"line":545},"7":{"loc":{"start":{"line":553,"column":3},"end":{"line":555,"column":null}},"type":"default-arg","locations":[{"start":{"line":553,"column":3},"end":{"line":555,"column":null}}],"line":553}},"s":{"0":2,"1":1,"2":2,"3":1,"4":1,"5":0,"6":1,"7":0,"8":0,"9":1,"10":0,"11":0,"12":0,"13":0,"14":1,"15":0,"16":1,"17":0,"18":1,"19":1,"20":0,"21":0,"22":1,"23":1,"24":1,"25":1,"26":0,"27":1,"28":0,"29":1,"30":0,"31":0,"32":1,"33":1,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":1,"44":0},"f":{"0":2,"1":2,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":1,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0},"b":{"0":[2,1],"1":[1,1],"2":[0,0],"3":[0,0],"4":[0],"5":[0,0],"6":[0],"7":[0]},"meta":{"lastBranch":8,"lastFunction":24,"lastStatement":45,"seen":{"f:132:9:132:17":0,"s:133:1:133:Infinity":0,"b:133:8:133:33:133:33:133:Infinity":0,"s:463:13:565:Infinity":1,"f:463:21:463:35":1,"b:464:1:464:Infinity:undefined:undefined:undefined:undefined":1,"s:464:1:464:Infinity":2,"s:464:22:464:Infinity":3,"s:466:1:468:Infinity":4,"f:466:3:466:9":2,"s:467:2:467:Infinity":5,"s:470:1:473:Infinity":6,"f:470:3:470:11":3,"s:471:2:471:Infinity":7,"s:472:2:472:Infinity":8,"s:475:1:483:Infinity":9,"f:475:3:475:13":4,"s:476:2:476:Infinity":10,"b:477:2:477:Infinity:undefined:undefined:undefined:undefined":2,"s:477:2:477:Infinity":11,"s:477:19:477:Infinity":12,"s:478:2:482:Infinity":13,"s:485:1:487:Infinity":14,"f:485:3:485:10":5,"s:486:2:486:Infinity":15,"s:489:1:491:Infinity":16,"f:489:3:489:13":6,"s:490:2:490:Infinity":17,"s:492:1:492:Infinity":18,"s:493:1:499:Infinity":19,"f:494:2:494:14":7,"s:495:3:497:Infinity":20,"f:496:10:496:18":8,"s:496:24:496:53":21,"b:496:24:496:38:496:38:496:53":3,"s:501:1:506:Infinity":22,"f:501:3:501:Infinity":9,"s:505:2:505:Infinity":23,"s:507:1:507:Infinity":24,"s:508:1:515:Infinity":25,"f:509:2:509:Infinity":10,"s:513:3:513:Infinity":26,"s:517:1:519:Infinity":27,"f:517:3:517:18":11,"s:518:2:518:Infinity":28,"s:521:1:531:Infinity":29,"f:521:3:521:Infinity":12,"s:528:2:530:Infinity":30,"f:529:9:529:19":13,"s:529:28:529:49":31,"s:532:1:532:Infinity":32,"s:533:1:560:Infinity":33,"f:534:2:534:Infinity":14,"b:535:3:537:Infinity":4,"f:535:3:535:34":15,"s:535:34:537:Infinity":34,"s:540:3:542:Infinity":35,"f:541:10:541:20":16,"s:541:30:541:55":36,"b:541:48:541:53:541:53:541:55":5,"f:544:2:544:Infinity":17,"b:545:3:547:Infinity":6,"f:545:3:545:34":18,"s:545:34:547:Infinity":37,"s:550:3:550:Infinity":38,"f:550:23:550:33":19,"s:550:42:550:57":39,"f:552:2:552:Infinity":20,"b:553:3:555:Infinity":7,"f:553:3:553:34":21,"s:553:34:555:Infinity":40,"s:558:3:558:Infinity":41,"f:558:23:558:33":22,"s:558:42:558:57":42,"s:562:1:564:Infinity":43,"f:562:3:562:19":23,"s:563:2:563:Infinity":44},"fnNames":{}}} +,"/home/anton/Projects/fluent/src/mixin/awaited.ts": {"path":"/home/anton/Projects/fluent/src/mixin/awaited.ts","statementMap":{"0":{"start":{"line":14,"column":2},"end":{"line":14,"column":null}},"1":{"start":{"line":18,"column":2},"end":{"line":18,"column":null}},"2":{"start":{"line":48,"column":13},"end":{"line":103,"column":null}},"3":{"start":{"line":49,"column":1},"end":{"line":49,"column":null}},"4":{"start":{"line":49,"column":34},"end":{"line":49,"column":null}},"5":{"start":{"line":51,"column":1},"end":{"line":53,"column":null}},"6":{"start":{"line":52,"column":2},"end":{"line":52,"column":null}},"7":{"start":{"line":55,"column":1},"end":{"line":102,"column":null}},"8":{"start":{"line":58,"column":41},"end":{"line":60,"column":null}},"9":{"start":{"line":59,"column":4},"end":{"line":59,"column":null}},"10":{"start":{"line":62,"column":31},"end":{"line":62,"column":null}},"11":{"start":{"line":64,"column":17},"end":{"line":98,"column":null}},"12":{"start":{"line":64,"column":49},"end":{"line":64,"column":56}},"13":{"start":{"line":66,"column":5},"end":{"line":67,"column":null}},"14":{"start":{"line":67,"column":6},"end":{"line":67,"column":null}},"15":{"start":{"line":67,"column":27},"end":{"line":67,"column":34}},"16":{"start":{"line":68,"column":5},"end":{"line":68,"column":null}},"17":{"start":{"line":69,"column":5},"end":{"line":69,"column":null}},"18":{"start":{"line":72,"column":5},"end":{"line":95,"column":null}},"19":{"start":{"line":73,"column":25},"end":{"line":73,"column":null}},"20":{"start":{"line":74,"column":6},"end":{"line":85,"column":null}},"21":{"start":{"line":75,"column":7},"end":{"line":79,"column":null}},"22":{"start":{"line":80,"column":7},"end":{"line":82,"column":null}},"23":{"start":{"line":84,"column":7},"end":{"line":84,"column":null}},"24":{"start":{"line":87,"column":6},"end":{"line":87,"column":null}},"25":{"start":{"line":88,"column":6},"end":{"line":92,"column":null}},"26":{"start":{"line":94,"column":6},"end":{"line":94,"column":null}},"27":{"start":{"line":96,"column":5},"end":{"line":96,"column":null}},"28":{"start":{"line":100,"column":3},"end":{"line":100,"column":null}}},"fnMap":{"0":{"name":"constructor","decl":{"start":{"line":13,"column":1},"end":{"line":13,"column":8}},"loc":{"start":{"line":13,"column":30},"end":{"line":15,"column":null}},"line":13},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":13},"end":{"line":17,"column":21}},"loc":{"start":{"line":17,"column":21},"end":{"line":23,"column":null}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":48,"column":26},"end":{"line":48,"column":45}},"loc":{"start":{"line":48,"column":66},"end":{"line":103,"column":1}},"line":48},"3":{"name":"(anonymous_3)","decl":{"start":{"line":51,"column":3},"end":{"line":51,"column":11}},"loc":{"start":{"line":51,"column":53},"end":{"line":53,"column":null}},"line":51},"4":{"name":"get","decl":{"start":{"line":57,"column":2},"end":{"line":57,"column":8}},"loc":{"start":{"line":57,"column":8},"end":{"line":101,"column":null}},"line":57},"5":{"name":"(anonymous_5)","decl":{"start":{"line":58,"column":47},"end":{"line":58,"column":53}},"loc":{"start":{"line":59,"column":4},"end":{"line":59,"column":null}},"line":59},"6":{"name":"(anonymous_6)","decl":{"start":{"line":64,"column":21},"end":{"line":64,"column":28}},"loc":{"start":{"line":64,"column":49},"end":{"line":64,"column":56}},"line":64},"7":{"name":"(anonymous_7)","decl":{"start":{"line":65,"column":4},"end":{"line":65,"column":10}},"loc":{"start":{"line":65,"column":21},"end":{"line":70,"column":null}},"line":65},"8":{"name":"(anonymous_8)","decl":{"start":{"line":67,"column":15},"end":{"line":67,"column":21}},"loc":{"start":{"line":67,"column":27},"end":{"line":67,"column":34}},"line":67},"9":{"name":"(anonymous_9)","decl":{"start":{"line":71,"column":4},"end":{"line":71,"column":12}},"loc":{"start":{"line":71,"column":49},"end":{"line":97,"column":null}},"line":71},"10":{"name":"(anonymous_10)","decl":{"start":{"line":72,"column":11},"end":{"line":72,"column":17}},"loc":{"start":{"line":72,"column":23},"end":{"line":95,"column":6}},"line":72}},"branchMap":{"0":{"loc":{"start":{"line":49,"column":1},"end":{"line":49,"column":null}},"type":"if","locations":[{"start":{"line":49,"column":1},"end":{"line":49,"column":null}},{"start":{},"end":{}}],"line":49},"1":{"loc":{"start":{"line":66,"column":5},"end":{"line":67,"column":null}},"type":"if","locations":[{"start":{"line":66,"column":5},"end":{"line":67,"column":null}},{"start":{},"end":{}}],"line":66},"2":{"loc":{"start":{"line":76,"column":8},"end":{"line":78,"column":null}},"type":"binary-expr","locations":[{"start":{"line":76,"column":8},"end":{"line":76,"column":null}},{"start":{"line":77,"column":9},"end":{"line":77,"column":null}},{"start":{"line":78,"column":9},"end":{"line":78,"column":null}}],"line":76}},"s":{"0":0,"1":0,"2":1,"3":2,"4":2,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0},"f":{"0":0,"1":0,"2":2,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0},"b":{"0":[2,0],"1":[0,0],"2":[0,0,0]},"meta":{"lastBranch":3,"lastFunction":11,"lastStatement":29,"seen":{"f:13:1:13:8":0,"s:14:2:14:Infinity":0,"f:17:13:17:21":1,"s:18:2:18:Infinity":1,"s:48:13:103:Infinity":2,"f:48:26:48:45":2,"b:49:1:49:Infinity:undefined:undefined:undefined:undefined":0,"s:49:1:49:Infinity":3,"s:49:34:49:Infinity":4,"s:51:1:53:Infinity":5,"f:51:3:51:11":3,"s:52:2:52:Infinity":6,"s:55:1:102:Infinity":7,"f:57:2:57:8":4,"s:58:41:60:Infinity":8,"f:58:47:58:53":5,"s:59:4:59:Infinity":9,"s:62:31:62:Infinity":10,"s:64:17:98:Infinity":11,"f:64:21:64:28":6,"s:64:49:64:56":12,"f:65:4:65:10":7,"b:66:5:67:Infinity:undefined:undefined:undefined:undefined":1,"s:66:5:67:Infinity":13,"s:67:6:67:Infinity":14,"f:67:15:67:21":8,"s:67:27:67:34":15,"s:68:5:68:Infinity":16,"s:69:5:69:Infinity":17,"f:71:4:71:12":9,"s:72:5:95:Infinity":18,"f:72:11:72:17":10,"s:73:25:73:Infinity":19,"s:74:6:85:Infinity":20,"s:75:7:79:Infinity":21,"b:76:8:76:Infinity:77:9:77:Infinity:78:9:78:Infinity":2,"s:80:7:82:Infinity":22,"s:84:7:84:Infinity":23,"s:87:6:87:Infinity":24,"s:88:6:92:Infinity":25,"s:94:6:94:Infinity":26,"s:96:5:96:Infinity":27,"s:100:3:100:Infinity":28},"fnNames":{}}} +,"/home/anton/Projects/fluent/src/mixin/base.ts": {"path":"/home/anton/Projects/fluent/src/mixin/base.ts","statementMap":{"0":{"start":{"line":47,"column":13},"end":{"line":56,"column":null}},"1":{"start":{"line":48,"column":1},"end":{"line":51,"column":null}},"2":{"start":{"line":49,"column":2},"end":{"line":49,"column":null}},"3":{"start":{"line":50,"column":2},"end":{"line":50,"column":null}},"4":{"start":{"line":53,"column":1},"end":{"line":55,"column":null}},"5":{"start":{"line":54,"column":2},"end":{"line":54,"column":null}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":47,"column":20},"end":{"line":47,"column":33}},"loc":{"start":{"line":47,"column":54},"end":{"line":56,"column":1}},"line":47},"1":{"name":"(anonymous_1)","decl":{"start":{"line":48,"column":3},"end":{"line":48,"column":10}},"loc":{"start":{"line":48,"column":49},"end":{"line":51,"column":null}},"line":48},"2":{"name":"(anonymous_2)","decl":{"start":{"line":53,"column":3},"end":{"line":53,"column":16}},"loc":{"start":{"line":53,"column":58},"end":{"line":55,"column":null}},"line":53}},"branchMap":{},"s":{"0":1,"1":2,"2":0,"3":0,"4":2,"5":0},"f":{"0":2,"1":0,"2":0},"b":{},"meta":{"lastBranch":0,"lastFunction":3,"lastStatement":6,"seen":{"s:47:13:56:Infinity":0,"f:47:20:47:33":0,"s:48:1:51:Infinity":1,"f:48:3:48:10":1,"s:49:2:49:Infinity":2,"s:50:2:50:Infinity":3,"s:53:1:55:Infinity":4,"f:53:3:53:16":2,"s:54:2:54:Infinity":5},"fnNames":{}}} +,"/home/anton/Projects/fluent/src/mixin/math.ts": {"path":"/home/anton/Projects/fluent/src/mixin/math.ts","statementMap":{"0":{"start":{"line":104,"column":10},"end":{"line":104,"column":null}},"1":{"start":{"line":106,"column":13},"end":{"line":179,"column":null}},"2":{"start":{"line":107,"column":1},"end":{"line":178,"column":null}},"3":{"start":{"line":108,"column":2},"end":{"line":108,"column":null}},"4":{"start":{"line":108,"column":29},"end":{"line":108,"column":null}},"5":{"start":{"line":109,"column":2},"end":{"line":109,"column":null}},"6":{"start":{"line":109,"column":34},"end":{"line":109,"column":null}},"7":{"start":{"line":110,"column":2},"end":{"line":110,"column":null}},"8":{"start":{"line":110,"column":35},"end":{"line":110,"column":null}},"9":{"start":{"line":111,"column":2},"end":{"line":111,"column":null}},"10":{"start":{"line":111,"column":32},"end":{"line":111,"column":null}},"11":{"start":{"line":112,"column":2},"end":{"line":112,"column":null}},"12":{"start":{"line":112,"column":17},"end":{"line":112,"column":null}},"13":{"start":{"line":113,"column":2},"end":{"line":113,"column":null}},"14":{"start":{"line":113,"column":34},"end":{"line":113,"column":null}},"15":{"start":{"line":114,"column":2},"end":{"line":114,"column":null}},"16":{"start":{"line":114,"column":31},"end":{"line":114,"column":null}},"17":{"start":{"line":115,"column":2},"end":{"line":119,"column":null}},"18":{"start":{"line":116,"column":3},"end":{"line":117,"column":null}},"19":{"start":{"line":117,"column":4},"end":{"line":117,"column":null}},"20":{"start":{"line":118,"column":3},"end":{"line":118,"column":null}},"21":{"start":{"line":121,"column":2},"end":{"line":126,"column":null}},"22":{"start":{"line":125,"column":3},"end":{"line":125,"column":null}},"23":{"start":{"line":128,"column":2},"end":{"line":128,"column":null}},"24":{"start":{"line":128,"column":18},"end":{"line":128,"column":null}},"25":{"start":{"line":129,"column":2},"end":{"line":129,"column":null}},"26":{"start":{"line":129,"column":17},"end":{"line":129,"column":null}},"27":{"start":{"line":130,"column":2},"end":{"line":130,"column":null}},"28":{"start":{"line":130,"column":18},"end":{"line":130,"column":null}},"29":{"start":{"line":131,"column":2},"end":{"line":131,"column":null}},"30":{"start":{"line":131,"column":19},"end":{"line":131,"column":null}},"31":{"start":{"line":133,"column":2},"end":{"line":133,"column":null}},"32":{"start":{"line":133,"column":16},"end":{"line":133,"column":null}},"33":{"start":{"line":134,"column":2},"end":{"line":134,"column":null}},"34":{"start":{"line":134,"column":19},"end":{"line":134,"column":null}},"35":{"start":{"line":135,"column":2},"end":{"line":135,"column":null}},"36":{"start":{"line":135,"column":17},"end":{"line":135,"column":null}},"37":{"start":{"line":137,"column":2},"end":{"line":138,"column":null}},"38":{"start":{"line":138,"column":3},"end":{"line":138,"column":null}},"39":{"start":{"line":139,"column":2},"end":{"line":140,"column":null}},"40":{"start":{"line":140,"column":3},"end":{"line":140,"column":null}},"41":{"start":{"line":141,"column":2},"end":{"line":142,"column":null}},"42":{"start":{"line":142,"column":3},"end":{"line":142,"column":null}},"43":{"start":{"line":143,"column":2},"end":{"line":144,"column":null}},"44":{"start":{"line":144,"column":3},"end":{"line":144,"column":null}},"45":{"start":{"line":146,"column":2},"end":{"line":147,"column":null}},"46":{"start":{"line":147,"column":3},"end":{"line":147,"column":null}},"47":{"start":{"line":149,"column":2},"end":{"line":149,"column":null}},"48":{"start":{"line":149,"column":16},"end":{"line":149,"column":null}},"49":{"start":{"line":150,"column":2},"end":{"line":150,"column":null}},"50":{"start":{"line":150,"column":17},"end":{"line":150,"column":null}},"51":{"start":{"line":151,"column":2},"end":{"line":151,"column":null}},"52":{"start":{"line":151,"column":16},"end":{"line":151,"column":null}},"53":{"start":{"line":152,"column":2},"end":{"line":152,"column":null}},"54":{"start":{"line":152,"column":17},"end":{"line":152,"column":null}},"55":{"start":{"line":153,"column":2},"end":{"line":153,"column":null}},"56":{"start":{"line":153,"column":16},"end":{"line":153,"column":null}},"57":{"start":{"line":154,"column":2},"end":{"line":154,"column":null}},"58":{"start":{"line":154,"column":17},"end":{"line":154,"column":null}},"59":{"start":{"line":155,"column":2},"end":{"line":155,"column":null}},"60":{"start":{"line":155,"column":27},"end":{"line":155,"column":null}},"61":{"start":{"line":157,"column":2},"end":{"line":157,"column":null}},"62":{"start":{"line":157,"column":17},"end":{"line":157,"column":null}},"63":{"start":{"line":158,"column":2},"end":{"line":158,"column":null}},"64":{"start":{"line":158,"column":18},"end":{"line":158,"column":null}},"65":{"start":{"line":159,"column":2},"end":{"line":159,"column":null}},"66":{"start":{"line":159,"column":17},"end":{"line":159,"column":null}},"67":{"start":{"line":160,"column":2},"end":{"line":160,"column":null}},"68":{"start":{"line":160,"column":18},"end":{"line":160,"column":null}},"69":{"start":{"line":161,"column":2},"end":{"line":161,"column":null}},"70":{"start":{"line":161,"column":17},"end":{"line":161,"column":null}},"71":{"start":{"line":162,"column":2},"end":{"line":162,"column":null}},"72":{"start":{"line":162,"column":18},"end":{"line":162,"column":null}},"73":{"start":{"line":164,"column":21},"end":{"line":164,"column":null}},"74":{"start":{"line":165,"column":21},"end":{"line":165,"column":null}},"75":{"start":{"line":167,"column":2},"end":{"line":167,"column":null}},"76":{"start":{"line":168,"column":2},"end":{"line":168,"column":null}},"77":{"start":{"line":169,"column":2},"end":{"line":172,"column":null}},"78":{"start":{"line":170,"column":18},"end":{"line":170,"column":null}},"79":{"start":{"line":171,"column":18},"end":{"line":171,"column":null}},"80":{"start":{"line":173,"column":8},"end":{"line":178,"column":null}},"81":{"start":{"line":175,"column":21},"end":{"line":175,"column":42}},"82":{"start":{"line":177,"column":2},"end":{"line":177,"column":null}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":106,"column":20},"end":{"line":106,"column":33}},"loc":{"start":{"line":106,"column":54},"end":{"line":179,"column":1}},"line":106},"1":{"name":"(anonymous_1)","decl":{"start":{"line":108,"column":4},"end":{"line":108,"column":11}},"loc":{"start":{"line":108,"column":29},"end":{"line":108,"column":null}},"line":108},"2":{"name":"(anonymous_2)","decl":{"start":{"line":109,"column":4},"end":{"line":109,"column":16}},"loc":{"start":{"line":109,"column":34},"end":{"line":109,"column":null}},"line":109},"3":{"name":"(anonymous_3)","decl":{"start":{"line":110,"column":4},"end":{"line":110,"column":16}},"loc":{"start":{"line":110,"column":35},"end":{"line":110,"column":null}},"line":110},"4":{"name":"(anonymous_4)","decl":{"start":{"line":111,"column":4},"end":{"line":111,"column":11}},"loc":{"start":{"line":111,"column":32},"end":{"line":111,"column":null}},"line":111},"5":{"name":"(anonymous_5)","decl":{"start":{"line":112,"column":4},"end":{"line":112,"column":17}},"loc":{"start":{"line":112,"column":17},"end":{"line":112,"column":null}},"line":112},"6":{"name":"(anonymous_6)","decl":{"start":{"line":113,"column":4},"end":{"line":113,"column":14}},"loc":{"start":{"line":113,"column":34},"end":{"line":113,"column":null}},"line":113},"7":{"name":"(anonymous_7)","decl":{"start":{"line":114,"column":4},"end":{"line":114,"column":11}},"loc":{"start":{"line":114,"column":31},"end":{"line":114,"column":null}},"line":114},"8":{"name":"(anonymous_8)","decl":{"start":{"line":115,"column":4},"end":{"line":115,"column":11}},"loc":{"start":{"line":115,"column":29},"end":{"line":119,"column":null}},"line":115},"9":{"name":"(anonymous_9)","decl":{"start":{"line":121,"column":4},"end":{"line":121,"column":null}},"loc":{"start":{"line":124,"column":7},"end":{"line":126,"column":null}},"line":124},"10":{"name":"(anonymous_10)","decl":{"start":{"line":128,"column":4},"end":{"line":128,"column":18}},"loc":{"start":{"line":128,"column":18},"end":{"line":128,"column":null}},"line":128},"11":{"name":"(anonymous_11)","decl":{"start":{"line":129,"column":4},"end":{"line":129,"column":17}},"loc":{"start":{"line":129,"column":17},"end":{"line":129,"column":null}},"line":129},"12":{"name":"(anonymous_12)","decl":{"start":{"line":130,"column":4},"end":{"line":130,"column":18}},"loc":{"start":{"line":130,"column":18},"end":{"line":130,"column":null}},"line":130},"13":{"name":"(anonymous_13)","decl":{"start":{"line":131,"column":4},"end":{"line":131,"column":19}},"loc":{"start":{"line":131,"column":19},"end":{"line":131,"column":null}},"line":131},"14":{"name":"(anonymous_14)","decl":{"start":{"line":133,"column":4},"end":{"line":133,"column":16}},"loc":{"start":{"line":133,"column":16},"end":{"line":133,"column":null}},"line":133},"15":{"name":"(anonymous_15)","decl":{"start":{"line":134,"column":4},"end":{"line":134,"column":19}},"loc":{"start":{"line":134,"column":19},"end":{"line":134,"column":null}},"line":134},"16":{"name":"(anonymous_16)","decl":{"start":{"line":135,"column":4},"end":{"line":135,"column":17}},"loc":{"start":{"line":135,"column":17},"end":{"line":135,"column":null}},"line":135},"17":{"name":"(anonymous_17)","decl":{"start":{"line":137,"column":4},"end":{"line":137,"column":11}},"loc":{"start":{"line":138,"column":3},"end":{"line":138,"column":null}},"line":138},"18":{"name":"(anonymous_18)","decl":{"start":{"line":139,"column":4},"end":{"line":139,"column":11}},"loc":{"start":{"line":140,"column":3},"end":{"line":140,"column":null}},"line":140},"19":{"name":"(anonymous_19)","decl":{"start":{"line":141,"column":4},"end":{"line":141,"column":13}},"loc":{"start":{"line":142,"column":3},"end":{"line":142,"column":null}},"line":142},"20":{"name":"(anonymous_20)","decl":{"start":{"line":143,"column":4},"end":{"line":143,"column":15}},"loc":{"start":{"line":144,"column":3},"end":{"line":144,"column":null}},"line":144},"21":{"name":"(anonymous_21)","decl":{"start":{"line":146,"column":4},"end":{"line":146,"column":12}},"loc":{"start":{"line":147,"column":3},"end":{"line":147,"column":null}},"line":147},"22":{"name":"(anonymous_22)","decl":{"start":{"line":149,"column":4},"end":{"line":149,"column":16}},"loc":{"start":{"line":149,"column":16},"end":{"line":149,"column":null}},"line":149},"23":{"name":"(anonymous_23)","decl":{"start":{"line":150,"column":4},"end":{"line":150,"column":17}},"loc":{"start":{"line":150,"column":17},"end":{"line":150,"column":null}},"line":150},"24":{"name":"(anonymous_24)","decl":{"start":{"line":151,"column":4},"end":{"line":151,"column":16}},"loc":{"start":{"line":151,"column":16},"end":{"line":151,"column":null}},"line":151},"25":{"name":"(anonymous_25)","decl":{"start":{"line":152,"column":4},"end":{"line":152,"column":17}},"loc":{"start":{"line":152,"column":17},"end":{"line":152,"column":null}},"line":152},"26":{"name":"(anonymous_26)","decl":{"start":{"line":153,"column":4},"end":{"line":153,"column":16}},"loc":{"start":{"line":153,"column":16},"end":{"line":153,"column":null}},"line":153},"27":{"name":"(anonymous_27)","decl":{"start":{"line":154,"column":4},"end":{"line":154,"column":17}},"loc":{"start":{"line":154,"column":17},"end":{"line":154,"column":null}},"line":154},"28":{"name":"(anonymous_28)","decl":{"start":{"line":155,"column":4},"end":{"line":155,"column":13}},"loc":{"start":{"line":155,"column":27},"end":{"line":155,"column":null}},"line":155},"29":{"name":"(anonymous_29)","decl":{"start":{"line":157,"column":4},"end":{"line":157,"column":17}},"loc":{"start":{"line":157,"column":17},"end":{"line":157,"column":null}},"line":157},"30":{"name":"(anonymous_30)","decl":{"start":{"line":158,"column":4},"end":{"line":158,"column":18}},"loc":{"start":{"line":158,"column":18},"end":{"line":158,"column":null}},"line":158},"31":{"name":"(anonymous_31)","decl":{"start":{"line":159,"column":4},"end":{"line":159,"column":17}},"loc":{"start":{"line":159,"column":17},"end":{"line":159,"column":null}},"line":159},"32":{"name":"(anonymous_32)","decl":{"start":{"line":160,"column":4},"end":{"line":160,"column":18}},"loc":{"start":{"line":160,"column":18},"end":{"line":160,"column":null}},"line":160},"33":{"name":"(anonymous_33)","decl":{"start":{"line":161,"column":4},"end":{"line":161,"column":17}},"loc":{"start":{"line":161,"column":17},"end":{"line":161,"column":null}},"line":161},"34":{"name":"(anonymous_34)","decl":{"start":{"line":162,"column":4},"end":{"line":162,"column":18}},"loc":{"start":{"line":162,"column":18},"end":{"line":162,"column":null}},"line":162},"35":{"name":"(anonymous_35)","decl":{"start":{"line":170,"column":3},"end":{"line":170,"column":18}},"loc":{"start":{"line":170,"column":18},"end":{"line":170,"column":null}},"line":170},"36":{"name":"(anonymous_36)","decl":{"start":{"line":171,"column":3},"end":{"line":171,"column":18}},"loc":{"start":{"line":171,"column":18},"end":{"line":171,"column":null}},"line":171},"37":{"name":"(anonymous_37)","decl":{"start":{"line":175,"column":8},"end":{"line":175,"column":15}},"loc":{"start":{"line":175,"column":21},"end":{"line":175,"column":42}},"line":175}},"branchMap":{"0":{"loc":{"start":{"line":107,"column":1},"end":{"line":178,"column":null}},"type":"if","locations":[{"start":{"line":107,"column":1},"end":{"line":178,"column":null}},{"start":{"line":173,"column":8},"end":{"line":178,"column":null}}],"line":107},"1":{"loc":{"start":{"line":116,"column":3},"end":{"line":117,"column":null}},"type":"if","locations":[{"start":{"line":116,"column":3},"end":{"line":117,"column":null}},{"start":{},"end":{}}],"line":116},"2":{"loc":{"start":{"line":123,"column":3},"end":{"line":123,"column":null}},"type":"default-arg","locations":[{"start":{"line":123,"column":19},"end":{"line":123,"column":null}}],"line":123},"3":{"loc":{"start":{"line":173,"column":8},"end":{"line":178,"column":null}},"type":"if","locations":[{"start":{"line":173,"column":8},"end":{"line":178,"column":null}},{"start":{},"end":{}}],"line":173},"4":{"loc":{"start":{"line":174,"column":2},"end":{"line":175,"column":null}},"type":"binary-expr","locations":[{"start":{"line":174,"column":2},"end":{"line":174,"column":null}},{"start":{"line":175,"column":2},"end":{"line":175,"column":null}}],"line":174}},"s":{"0":1,"1":1,"2":2,"3":1,"4":0,"5":1,"6":0,"7":1,"8":0,"9":1,"10":0,"11":1,"12":0,"13":1,"14":0,"15":1,"16":0,"17":1,"18":0,"19":0,"20":0,"21":1,"22":0,"23":1,"24":0,"25":1,"26":0,"27":1,"28":0,"29":1,"30":0,"31":1,"32":0,"33":1,"34":0,"35":1,"36":0,"37":1,"38":0,"39":1,"40":0,"41":1,"42":0,"43":1,"44":0,"45":1,"46":0,"47":1,"48":0,"49":1,"50":0,"51":1,"52":0,"53":1,"54":0,"55":1,"56":0,"57":1,"58":0,"59":1,"60":0,"61":1,"62":0,"63":1,"64":0,"65":1,"66":0,"67":1,"68":0,"69":1,"70":0,"71":1,"72":0,"73":1,"74":1,"75":1,"76":1,"77":1,"78":0,"79":0,"80":1,"81":7,"82":1},"f":{"0":2,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":7},"b":{"0":[1,1],"1":[0,0],"2":[0],"3":[1,0],"4":[1,1]},"meta":{"lastBranch":5,"lastFunction":38,"lastStatement":83,"seen":{"s:104:10:104:Infinity":0,"s:106:13:179:Infinity":1,"f:106:20:106:33":0,"b:107:1:178:Infinity:173:8:178:Infinity":0,"s:107:1:178:Infinity":2,"s:108:2:108:Infinity":3,"f:108:4:108:11":1,"s:108:29:108:Infinity":4,"s:109:2:109:Infinity":5,"f:109:4:109:16":2,"s:109:34:109:Infinity":6,"s:110:2:110:Infinity":7,"f:110:4:110:16":3,"s:110:35:110:Infinity":8,"s:111:2:111:Infinity":9,"f:111:4:111:11":4,"s:111:32:111:Infinity":10,"s:112:2:112:Infinity":11,"f:112:4:112:17":5,"s:112:17:112:Infinity":12,"s:113:2:113:Infinity":13,"f:113:4:113:14":6,"s:113:34:113:Infinity":14,"s:114:2:114:Infinity":15,"f:114:4:114:11":7,"s:114:31:114:Infinity":16,"s:115:2:119:Infinity":17,"f:115:4:115:11":8,"b:116:3:117:Infinity:undefined:undefined:undefined:undefined":1,"s:116:3:117:Infinity":18,"s:117:4:117:Infinity":19,"s:118:3:118:Infinity":20,"s:121:2:126:Infinity":21,"f:121:4:121:Infinity":9,"b:123:19:123:Infinity":2,"s:125:3:125:Infinity":22,"s:128:2:128:Infinity":23,"f:128:4:128:18":10,"s:128:18:128:Infinity":24,"s:129:2:129:Infinity":25,"f:129:4:129:17":11,"s:129:17:129:Infinity":26,"s:130:2:130:Infinity":27,"f:130:4:130:18":12,"s:130:18:130:Infinity":28,"s:131:2:131:Infinity":29,"f:131:4:131:19":13,"s:131:19:131:Infinity":30,"s:133:2:133:Infinity":31,"f:133:4:133:16":14,"s:133:16:133:Infinity":32,"s:134:2:134:Infinity":33,"f:134:4:134:19":15,"s:134:19:134:Infinity":34,"s:135:2:135:Infinity":35,"f:135:4:135:17":16,"s:135:17:135:Infinity":36,"s:137:2:138:Infinity":37,"f:137:4:137:11":17,"s:138:3:138:Infinity":38,"s:139:2:140:Infinity":39,"f:139:4:139:11":18,"s:140:3:140:Infinity":40,"s:141:2:142:Infinity":41,"f:141:4:141:13":19,"s:142:3:142:Infinity":42,"s:143:2:144:Infinity":43,"f:143:4:143:15":20,"s:144:3:144:Infinity":44,"s:146:2:147:Infinity":45,"f:146:4:146:12":21,"s:147:3:147:Infinity":46,"s:149:2:149:Infinity":47,"f:149:4:149:16":22,"s:149:16:149:Infinity":48,"s:150:2:150:Infinity":49,"f:150:4:150:17":23,"s:150:17:150:Infinity":50,"s:151:2:151:Infinity":51,"f:151:4:151:16":24,"s:151:16:151:Infinity":52,"s:152:2:152:Infinity":53,"f:152:4:152:17":25,"s:152:17:152:Infinity":54,"s:153:2:153:Infinity":55,"f:153:4:153:16":26,"s:153:16:153:Infinity":56,"s:154:2:154:Infinity":57,"f:154:4:154:17":27,"s:154:17:154:Infinity":58,"s:155:2:155:Infinity":59,"f:155:4:155:13":28,"s:155:27:155:Infinity":60,"s:157:2:157:Infinity":61,"f:157:4:157:17":29,"s:157:17:157:Infinity":62,"s:158:2:158:Infinity":63,"f:158:4:158:18":30,"s:158:18:158:Infinity":64,"s:159:2:159:Infinity":65,"f:159:4:159:17":31,"s:159:17:159:Infinity":66,"s:160:2:160:Infinity":67,"f:160:4:160:18":32,"s:160:18:160:Infinity":68,"s:161:2:161:Infinity":69,"f:161:4:161:17":33,"s:161:17:161:Infinity":70,"s:162:2:162:Infinity":71,"f:162:4:162:18":34,"s:162:18:162:Infinity":72,"s:164:21:164:Infinity":73,"s:165:21:165:Infinity":74,"s:167:2:167:Infinity":75,"s:168:2:168:Infinity":76,"s:169:2:172:Infinity":77,"f:170:3:170:18":35,"s:170:18:170:Infinity":78,"f:171:3:171:18":36,"s:171:18:171:Infinity":79,"b:173:8:178:Infinity:undefined:undefined:undefined:undefined":3,"s:173:8:178:Infinity":80,"b:174:2:174:Infinity:175:2:175:Infinity":4,"f:175:8:175:15":37,"s:175:21:175:42":81,"s:177:2:177:Infinity":82},"fnNames":{}}} +,"/home/anton/Projects/fluent/src/mixin/optional.ts": {"path":"/home/anton/Projects/fluent/src/mixin/optional.ts","statementMap":{"0":{"start":{"line":16,"column":1},"end":{"line":16,"column":null}},"1":{"start":{"line":164,"column":13},"end":{"line":223,"column":null}},"2":{"start":{"line":165,"column":1},"end":{"line":214,"column":null}},"3":{"start":{"line":166,"column":2},"end":{"line":168,"column":null}},"4":{"start":{"line":167,"column":3},"end":{"line":167,"column":null}},"5":{"start":{"line":170,"column":2},"end":{"line":172,"column":null}},"6":{"start":{"line":171,"column":3},"end":{"line":171,"column":null}},"7":{"start":{"line":173,"column":2},"end":{"line":173,"column":null}},"8":{"start":{"line":174,"column":2},"end":{"line":178,"column":null}},"9":{"start":{"line":176,"column":4},"end":{"line":176,"column":null}},"10":{"start":{"line":180,"column":2},"end":{"line":182,"column":null}},"11":{"start":{"line":181,"column":3},"end":{"line":181,"column":null}},"12":{"start":{"line":183,"column":2},"end":{"line":183,"column":null}},"13":{"start":{"line":184,"column":2},"end":{"line":188,"column":null}},"14":{"start":{"line":186,"column":4},"end":{"line":186,"column":null}},"15":{"start":{"line":190,"column":2},"end":{"line":192,"column":null}},"16":{"start":{"line":191,"column":3},"end":{"line":191,"column":null}},"17":{"start":{"line":194,"column":2},"end":{"line":196,"column":null}},"18":{"start":{"line":195,"column":3},"end":{"line":195,"column":null}},"19":{"start":{"line":198,"column":2},"end":{"line":198,"column":null}},"20":{"start":{"line":199,"column":2},"end":{"line":203,"column":null}},"21":{"start":{"line":201,"column":4},"end":{"line":201,"column":null}},"22":{"start":{"line":205,"column":2},"end":{"line":207,"column":null}},"23":{"start":{"line":206,"column":3},"end":{"line":206,"column":null}},"24":{"start":{"line":208,"column":2},"end":{"line":208,"column":null}},"25":{"start":{"line":209,"column":2},"end":{"line":213,"column":null}},"26":{"start":{"line":211,"column":4},"end":{"line":211,"column":null}},"27":{"start":{"line":216,"column":1},"end":{"line":222,"column":null}},"28":{"start":{"line":220,"column":2},"end":{"line":220,"column":null}},"29":{"start":{"line":220,"column":23},"end":{"line":220,"column":null}},"30":{"start":{"line":221,"column":2},"end":{"line":221,"column":null}}},"fnMap":{"0":{"name":"isNone","decl":{"start":{"line":15,"column":9},"end":{"line":15,"column":19}},"loc":{"start":{"line":15,"column":39},"end":{"line":17,"column":null}},"line":15},"1":{"name":"(anonymous_1)","decl":{"start":{"line":164,"column":24},"end":{"line":164,"column":41}},"loc":{"start":{"line":164,"column":62},"end":{"line":223,"column":1}},"line":164},"2":{"name":"(anonymous_2)","decl":{"start":{"line":166,"column":4},"end":{"line":166,"column":16}},"loc":{"start":{"line":166,"column":16},"end":{"line":168,"column":null}},"line":166},"3":{"name":"(anonymous_3)","decl":{"start":{"line":170,"column":4},"end":{"line":170,"column":10}},"loc":{"start":{"line":170,"column":32},"end":{"line":172,"column":null}},"line":170},"4":{"name":"(anonymous_4)","decl":{"start":{"line":175,"column":3},"end":{"line":175,"column":10}},"loc":{"start":{"line":175,"column":48},"end":{"line":177,"column":null}},"line":175},"5":{"name":"(anonymous_5)","decl":{"start":{"line":180,"column":4},"end":{"line":180,"column":14}},"loc":{"start":{"line":180,"column":31},"end":{"line":182,"column":null}},"line":180},"6":{"name":"(anonymous_6)","decl":{"start":{"line":185,"column":3},"end":{"line":185,"column":15}},"loc":{"start":{"line":185,"column":15},"end":{"line":187,"column":null}},"line":185},"7":{"name":"(anonymous_7)","decl":{"start":{"line":190,"column":4},"end":{"line":190,"column":11}},"loc":{"start":{"line":190,"column":49},"end":{"line":192,"column":null}},"line":190},"8":{"name":"(anonymous_8)","decl":{"start":{"line":194,"column":4},"end":{"line":194,"column":15}},"loc":{"start":{"line":194,"column":15},"end":{"line":196,"column":null}},"line":194},"9":{"name":"(anonymous_9)","decl":{"start":{"line":200,"column":3},"end":{"line":200,"column":15}},"loc":{"start":{"line":200,"column":15},"end":{"line":202,"column":null}},"line":200},"10":{"name":"(anonymous_10)","decl":{"start":{"line":205,"column":4},"end":{"line":205,"column":19}},"loc":{"start":{"line":205,"column":19},"end":{"line":207,"column":null}},"line":205},"11":{"name":"(anonymous_11)","decl":{"start":{"line":210,"column":3},"end":{"line":210,"column":10}},"loc":{"start":{"line":210,"column":27},"end":{"line":212,"column":null}},"line":210},"12":{"name":"(anonymous_12)","decl":{"start":{"line":216,"column":3},"end":{"line":216,"column":null}},"loc":{"start":{"line":219,"column":6},"end":{"line":222,"column":null}},"line":219}},"branchMap":{"0":{"loc":{"start":{"line":16,"column":8},"end":{"line":16,"column":null}},"type":"binary-expr","locations":[{"start":{"line":16,"column":8},"end":{"line":16,"column":22}},{"start":{"line":16,"column":22},"end":{"line":16,"column":null}}],"line":16},"1":{"loc":{"start":{"line":165,"column":1},"end":{"line":214,"column":null}},"type":"if","locations":[{"start":{"line":165,"column":1},"end":{"line":214,"column":null}},{"start":{"line":189,"column":8},"end":{"line":214,"column":null}}],"line":165},"2":{"loc":{"start":{"line":218,"column":2},"end":{"line":218,"column":null}},"type":"default-arg","locations":[{"start":{"line":218,"column":13},"end":{"line":218,"column":null}}],"line":218},"3":{"loc":{"start":{"line":220,"column":2},"end":{"line":220,"column":null}},"type":"if","locations":[{"start":{"line":220,"column":2},"end":{"line":220,"column":null}},{"start":{},"end":{}}],"line":220}},"s":{"0":2,"1":1,"2":2,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":2,"16":0,"17":2,"18":0,"19":2,"20":2,"21":0,"22":2,"23":0,"24":2,"25":2,"26":0,"27":2,"28":0,"29":0,"30":0},"f":{"0":2,"1":2,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0},"b":{"0":[2,2],"1":[0,2],"2":[0],"3":[0,0]},"meta":{"lastBranch":4,"lastFunction":13,"lastStatement":31,"seen":{"f:15:9:15:19":0,"s:16:1:16:Infinity":0,"b:16:8:16:22:16:22:16:Infinity":0,"s:164:13:223:Infinity":1,"f:164:24:164:41":1,"b:165:1:214:Infinity:189:8:214:Infinity":1,"s:165:1:214:Infinity":2,"s:166:2:168:Infinity":3,"f:166:4:166:16":2,"s:167:3:167:Infinity":4,"s:170:2:172:Infinity":5,"f:170:4:170:10":3,"s:171:3:171:Infinity":6,"s:173:2:173:Infinity":7,"s:174:2:178:Infinity":8,"f:175:3:175:10":4,"s:176:4:176:Infinity":9,"s:180:2:182:Infinity":10,"f:180:4:180:14":5,"s:181:3:181:Infinity":11,"s:183:2:183:Infinity":12,"s:184:2:188:Infinity":13,"f:185:3:185:15":6,"s:186:4:186:Infinity":14,"s:190:2:192:Infinity":15,"f:190:4:190:11":7,"s:191:3:191:Infinity":16,"s:194:2:196:Infinity":17,"f:194:4:194:15":8,"s:195:3:195:Infinity":18,"s:198:2:198:Infinity":19,"s:199:2:203:Infinity":20,"f:200:3:200:15":9,"s:201:4:201:Infinity":21,"s:205:2:207:Infinity":22,"f:205:4:205:19":10,"s:206:3:206:Infinity":23,"s:208:2:208:Infinity":24,"s:209:2:213:Infinity":25,"f:210:3:210:10":11,"s:211:4:211:Infinity":26,"s:216:1:222:Infinity":27,"f:216:3:216:Infinity":12,"b:218:13:218:Infinity":2,"b:220:2:220:Infinity:undefined:undefined:undefined:undefined":3,"s:220:2:220:Infinity":28,"s:220:23:220:Infinity":29,"s:221:2:221:Infinity":30},"fnNames":{}}} +,"/home/anton/Projects/fluent/src/mixin/math/swizzle.ts": {"path":"/home/anton/Projects/fluent/src/mixin/math/swizzle.ts","statementMap":{"0":{"start":{"line":156,"column":13},"end":{"line":156,"column":null}},"1":{"start":{"line":163,"column":16},"end":{"line":163,"column":null}},"2":{"start":{"line":164,"column":15},"end":{"line":164,"column":null}},"3":{"start":{"line":166,"column":1},"end":{"line":196,"column":null}},"4":{"start":{"line":166,"column":7},"end":{"line":196,"column":null}},"5":{"start":{"line":167,"column":2},"end":{"line":171,"column":null}},"6":{"start":{"line":167,"column":15},"end":{"line":167,"column":18}},"7":{"start":{"line":168,"column":3},"end":{"line":168,"column":null}},"8":{"start":{"line":169,"column":3},"end":{"line":170,"column":null}},"9":{"start":{"line":169,"column":27},"end":{"line":169,"column":null}},"10":{"start":{"line":170,"column":8},"end":{"line":170,"column":null}},"11":{"start":{"line":173,"column":21},"end":{"line":173,"column":null}},"12":{"start":{"line":174,"column":2},"end":{"line":180,"column":null}},"13":{"start":{"line":175,"column":3},"end":{"line":179,"column":null}},"14":{"start":{"line":176,"column":4},"end":{"line":176,"column":null}},"15":{"start":{"line":177,"column":10},"end":{"line":179,"column":null}},"16":{"start":{"line":178,"column":4},"end":{"line":178,"column":null}},"17":{"start":{"line":182,"column":14},"end":{"line":185,"column":null}},"18":{"start":{"line":183,"column":18},"end":{"line":183,"column":26}},"19":{"start":{"line":184,"column":15},"end":{"line":184,"column":22}},"20":{"start":{"line":186,"column":2},"end":{"line":186,"column":null}},"21":{"start":{"line":186,"column":35},"end":{"line":186,"column":null}},"22":{"start":{"line":187,"column":22},"end":{"line":189,"column":null}},"23":{"start":{"line":188,"column":18},"end":{"line":188,"column":26}},"24":{"start":{"line":189,"column":15},"end":{"line":189,"column":23}},"25":{"start":{"line":190,"column":2},"end":{"line":195,"column":null}},"26":{"start":{"line":193,"column":4},"end":{"line":193,"column":null}},"27":{"start":{"line":196,"column":28},"end":{"line":196,"column":36}},"28":{"start":{"line":198,"column":1},"end":{"line":202,"column":null}},"29":{"start":{"line":200,"column":3},"end":{"line":200,"column":null}},"30":{"start":{"line":203,"column":1},"end":{"line":207,"column":null}},"31":{"start":{"line":205,"column":3},"end":{"line":205,"column":null}},"32":{"start":{"line":208,"column":1},"end":{"line":212,"column":null}},"33":{"start":{"line":210,"column":3},"end":{"line":210,"column":null}},"34":{"start":{"line":213,"column":1},"end":{"line":217,"column":null}},"35":{"start":{"line":215,"column":3},"end":{"line":215,"column":null}}},"fnMap":{"0":{"name":"applySwizzle","decl":{"start":{"line":158,"column":16},"end":{"line":158,"column":null}},"loc":{"start":{"line":162,"column":2},"end":{"line":218,"column":null}},"line":162},"1":{"name":"(anonymous_1)","decl":{"start":{"line":183,"column":4},"end":{"line":183,"column":12}},"loc":{"start":{"line":183,"column":18},"end":{"line":183,"column":26}},"line":183},"2":{"name":"(anonymous_2)","decl":{"start":{"line":184,"column":4},"end":{"line":184,"column":9}},"loc":{"start":{"line":184,"column":15},"end":{"line":184,"column":22}},"line":184},"3":{"name":"(anonymous_3)","decl":{"start":{"line":188,"column":4},"end":{"line":188,"column":12}},"loc":{"start":{"line":188,"column":18},"end":{"line":188,"column":26}},"line":188},"4":{"name":"(anonymous_4)","decl":{"start":{"line":189,"column":4},"end":{"line":189,"column":9}},"loc":{"start":{"line":189,"column":15},"end":{"line":189,"column":23}},"line":189},"5":{"name":"(anonymous_5)","decl":{"start":{"line":191,"column":3},"end":{"line":191,"column":14}},"loc":{"start":{"line":191,"column":14},"end":{"line":194,"column":null}},"line":191},"6":{"name":"(anonymous_6)","decl":{"start":{"line":196,"column":16},"end":{"line":196,"column":22}},"loc":{"start":{"line":196,"column":28},"end":{"line":196,"column":36}},"line":196},"7":{"name":"(anonymous_7)","decl":{"start":{"line":199,"column":2},"end":{"line":199,"column":13}},"loc":{"start":{"line":199,"column":13},"end":{"line":201,"column":null}},"line":199},"8":{"name":"(anonymous_8)","decl":{"start":{"line":204,"column":2},"end":{"line":204,"column":13}},"loc":{"start":{"line":204,"column":13},"end":{"line":206,"column":null}},"line":204},"9":{"name":"(anonymous_9)","decl":{"start":{"line":209,"column":2},"end":{"line":209,"column":13}},"loc":{"start":{"line":209,"column":13},"end":{"line":211,"column":null}},"line":209},"10":{"name":"(anonymous_10)","decl":{"start":{"line":214,"column":2},"end":{"line":214,"column":13}},"loc":{"start":{"line":214,"column":13},"end":{"line":216,"column":null}},"line":214}},"branchMap":{"0":{"loc":{"start":{"line":169,"column":3},"end":{"line":170,"column":null}},"type":"if","locations":[{"start":{"line":169,"column":3},"end":{"line":170,"column":null}},{"start":{"line":170,"column":8},"end":{"line":170,"column":null}}],"line":169},"1":{"loc":{"start":{"line":175,"column":3},"end":{"line":179,"column":null}},"type":"if","locations":[{"start":{"line":175,"column":3},"end":{"line":179,"column":null}},{"start":{"line":177,"column":10},"end":{"line":179,"column":null}}],"line":175},"2":{"loc":{"start":{"line":177,"column":10},"end":{"line":179,"column":null}},"type":"if","locations":[{"start":{"line":177,"column":10},"end":{"line":179,"column":null}},{"start":{},"end":{}}],"line":177},"3":{"loc":{"start":{"line":186,"column":2},"end":{"line":186,"column":null}},"type":"if","locations":[{"start":{"line":186,"column":2},"end":{"line":186,"column":null}},{"start":{},"end":{}}],"line":186},"4":{"loc":{"start":{"line":186,"column":6},"end":{"line":186,"column":35}},"type":"binary-expr","locations":[{"start":{"line":186,"column":6},"end":{"line":186,"column":25}},{"start":{"line":186,"column":25},"end":{"line":186,"column":35}}],"line":186}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":2097152,"6":2097152,"7":2396744,"8":2396744,"9":299593,"10":2097151,"11":2097152,"12":2097152,"13":11487560,"14":1435945,"15":10051615,"16":1136352,"17":960800,"18":6725600,"19":6565468,"20":960800,"21":938960,"22":21840,"23":152880,"24":145632,"25":21840,"26":0,"27":2396744,"28":1,"29":0,"30":1,"31":0,"32":1,"33":0,"34":1,"35":0},"f":{"0":1,"1":6725600,"2":6565468,"3":152880,"4":145632,"5":0,"6":2396744,"7":0,"8":0,"9":0,"10":0},"b":{"0":[299593,2097151],"1":[1435945,10051615],"2":[1136352,8915263],"3":[938960,21840],"4":[960800,929088]},"meta":{"lastBranch":5,"lastFunction":11,"lastStatement":36,"seen":{"s:156:13:156:Infinity":0,"f:158:16:158:Infinity":0,"s:163:16:163:Infinity":1,"s:164:15:164:Infinity":2,"s:166:1:196:Infinity":3,"s:166:7:196:Infinity":4,"s:167:2:171:Infinity":5,"s:167:15:167:18":6,"s:168:3:168:Infinity":7,"b:169:3:170:Infinity:170:8:170:Infinity":0,"s:169:3:170:Infinity":8,"s:169:27:169:Infinity":9,"s:170:8:170:Infinity":10,"s:173:21:173:Infinity":11,"s:174:2:180:Infinity":12,"b:175:3:179:Infinity:177:10:179:Infinity":1,"s:175:3:179:Infinity":13,"s:176:4:176:Infinity":14,"b:177:10:179:Infinity:undefined:undefined:undefined:undefined":2,"s:177:10:179:Infinity":15,"s:178:4:178:Infinity":16,"s:182:14:185:Infinity":17,"f:183:4:183:12":1,"s:183:18:183:26":18,"f:184:4:184:9":2,"s:184:15:184:22":19,"b:186:2:186:Infinity:undefined:undefined:undefined:undefined":3,"s:186:2:186:Infinity":20,"b:186:6:186:25:186:25:186:35":4,"s:186:35:186:Infinity":21,"s:187:22:189:Infinity":22,"f:188:4:188:12":3,"s:188:18:188:26":23,"f:189:4:189:9":4,"s:189:15:189:23":24,"s:190:2:195:Infinity":25,"f:191:3:191:14":5,"s:193:4:193:Infinity":26,"f:196:16:196:22":6,"s:196:28:196:36":27,"s:198:1:202:Infinity":28,"f:199:2:199:13":7,"s:200:3:200:Infinity":29,"s:203:1:207:Infinity":30,"f:204:2:204:13":8,"s:205:3:205:Infinity":31,"s:208:1:212:Infinity":32,"f:209:2:209:13":9,"s:210:3:210:Infinity":33,"s:213:1:217:Infinity":34,"f:214:2:214:13":10,"s:215:3:215:Infinity":35},"fnNames":{}}} } diff --git a/coverage/index.html b/coverage/index.html index e692d01..8ad5e08 100644 --- a/coverage/index.html +++ b/coverage/index.html @@ -23,30 +23,30 @@
- 90.32% + 50.4% Statements - 112/124 + 124/246
- 93.1% + 47.91% Branches - 27/29 + 23/48
- 84.48% + 17.75% Functions - 49/58 + 19/107
- 90.51% + 57% Lines - 105/116 + 118/207
@@ -61,7 +61,7 @@
-
+
@@ -80,17 +80,17 @@ - - - - - - - - - + + + + + + + + @@ -109,18 +109,33 @@ - - + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -131,7 +146,7 @@ + + + + + + \ No newline at end of file diff --git a/coverage/src/internal.ts.html b/coverage/src/internal.ts.html index 1dc102f..8f0fe05 100644 --- a/coverage/src/internal.ts.html +++ b/coverage/src/internal.ts.html @@ -23,30 +23,30 @@
- 33.33% + 16.66% Statements - 2/6 + 1/6
- 50% + 0% Branches - 1/2 + 0/2
- 50% + 25% Functions - 2/4 + 1/4
- 33.33% + 16.66% Lines - 2/6 + 1/6
@@ -129,7 +129,7 @@       -4x +1x       @@ -144,7 +144,7 @@       -53x +        @@ -190,7 +190,7 @@ export interface Identity extends HKT { // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion export const never = undefined as never;   -export type Constraint<T, U extends T> = U; +export type MaxDepth = 20;   export class AssertionError extends Error { public constructor(msg?: string) { @@ -199,11 +199,11 @@ export class AssertionError extends Error { } }   -export function assert( +export function assert( condition: unknown, msg?: string, ): asserts condition { - Iif (!Boolean(condition)) + if (!Boolean(condition)) throw new AssertionError( ["Assertion error", msg] .filter((v) => v !== undefined) @@ -247,7 +247,7 @@ export interface HidePrototype { + + + + + + \ No newline at end of file diff --git a/coverage/src/mixin/math/index.html b/coverage/src/mixin/math/index.html new file mode 100644 index 0000000..fa20cac --- /dev/null +++ b/coverage/src/mixin/math/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for src/mixin/math + + + + + + + + + +
+
+

All files src/mixin/math

+
+ +
+ 86.11% + Statements + 31/36 +
+ + +
+ 100% + Branches + 10/10 +
+ + +
+ 54.54% + Functions + 6/11 +
+ + +
+ 84.37% + Lines + 27/32 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+
src -
+
+
33.33%2/650%1/250%2/433.33%2/644.44%4/90%0/225%1/444.44%4/9
src/mixin -
+
src/mixin +
92.79%103/11196.29%26/2786.27%44/5193.2%96/10342.26%82/19436.11%13/3610.11%9/8950.31%80/159
src/mixin/math +
+
86.11%31/36100%10/1054.54%6/1184.37%27/32
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
swizzle.ts +
+
86.11%31/36100%10/1054.54%6/1184.37%27/32
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/coverage/src/mixin/math/swizzle.ts.html b/coverage/src/mixin/math/swizzle.ts.html new file mode 100644 index 0000000..382dd01 --- /dev/null +++ b/coverage/src/mixin/math/swizzle.ts.html @@ -0,0 +1,901 @@ + + + + + + Code coverage report for src/mixin/math/swizzle.ts + + + + + + + + + +
+
+

All files / src/mixin/math swizzle.ts

+
+ +
+ 86.11% + Statements + 31/36 +
+ + +
+ 100% + Branches + 10/10 +
+ + +
+ 54.54% + Functions + 6/11 +
+ + +
+ 84.37% + Lines + 27/32 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +1x +1x +  +1x +2097152x +2396744x +2396744x +2097151x +  +  +2097152x +2097152x +11487560x +1435945x +10051615x +1136352x +  +  +  +960800x +6725600x +6565468x +  +960800x +21840x +152880x +145632x +21840x +  +  +  +  +  +2396744x +  +1x +  +  +  +  +1x +  +  +  +  +1x +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { makeFluent } from "../../base";
+import type { Props, Return } from "../../base/mixin";
+import { type MaxDepth } from "../../internal";
+import { Math } from "../math";
+ 
+type Axis = typeof axis;
+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 | undefined> = N extends number
+	? [...Vec<null, N>, null]["length"]
+	: 0;
+type Dec<N extends number> =
+	Vec<null, N> extends [...infer Rest extends null[], null]
+		? Rest["length"]
+		: -1;
+ 
+type Next<
+	N extends number,
+	State extends readonly (number | undefined)[],
+	TOut extends (number | undefined)[] = [],
+> = State extends readonly [
+	infer Current extends number | undefined,
+	...infer Rest extends (number | undefined)[],
+]
+	? Inc<Current> extends infer TInc
+		? TInc extends N
+			? Next<N, Rest, [...TOut, undefined]>
+			: [...TOut, TInc, ...Rest]
+		: never
+	: null;
+ 
+type Key<
+	State extends (number | undefined)[],
+	TOut extends string = "",
+> = State extends readonly [infer Only extends number, ...undefined[]]
+	? `${TOut}${Axis[Only]}`
+	: State extends readonly [
+				infer Current extends number,
+				...infer Rest extends (number | undefined)[],
+		  ]
+		? Key<Rest, `${TOut}${Axis[Current]}`>
+		: never;
+ 
+type IsAscending<
+	State extends (number | undefined)[],
+	Prev extends number | undefined = undefined,
+> = State extends readonly [
+	infer Current extends number,
+	...infer Rest extends number[],
+]
+	? Current extends Inc<Prev>
+		? IsAscending<Rest, Inc<Prev>>
+		: false
+	: State extends readonly []
+		? true
+		: false;
+ 
+type Pretty<T> = { [K in keyof T]: T[K] };
+ 
+type SwizzlePermutations<
+	N extends number,
+	State extends Vec<number | undefined, N> = Vec<undefined, N>,
+	TOut extends Record<string, readonly number[]> = Record<
+		never,
+		never
+	>,
+> =
+	Next<N, State> extends infer TNext
+		? TNext extends Vec<number | undefined, N>
+			? SwizzlePermutations<
+					N,
+					TNext,
+					TOut &
+						(IsAscending<State> extends true
+							? unknown
+							: Record<Key<State>, State>)
+				>
+			: Pretty<TOut & Record<Key<State>, State>>
+		: never;
+ 
+type Sequence<
+	T extends readonly unknown[],
+	Indexes extends (number | undefined)[],
+	TOut extends T[number][] = [],
+> = Indexes extends readonly [
+	infer Current extends number,
+	...infer Rest extends (number | undefined)[],
+]
+	? Sequence<T, Rest, [...TOut, T[Current]]>
+	: TOut;
+ 
+type Primative<
+	T extends readonly unknown[],
+	t extends Props,
+	Axes extends readonly string[] = Axis,
+	Acc = unknown,
+	TOut extends unknown[] = [],
+> = Axes extends readonly [
+	infer Current extends string,
+	...infer Rest extends string[],
+]
+	? Acc &
+			Record<
+				Current,
+				Return<T[TOut["length"]], t>
+			> extends infer TAcc
+		? Primative<T, t, Rest, TAcc, [...TOut, TAcc]>
+		: never
+	: TOut;
+ 
+type SwizzleCache = [
+	{ x: [0] },
+	SwizzlePermutations<2>,
+	SwizzlePermutations<3>,
+	SwizzlePermutations<4>,
+];
+ 
+export type Swizzle<
+	T extends readonly unknown[],
+	t extends Props,
+> = number extends T["length"]
+	? unknown
+	: (
+				Dec<T["length"]> extends infer K extends 0 | 1 | 2 | 3
+					? { k: K; c: SwizzleCache[K] }
+					: SwizzleCache extends [...unknown[], infer Last]
+						? { k: Dec<SwizzleCache["length"]>; c: Last }
+						: never
+		  ) extends {
+				k: infer K extends number;
+				c: infer C extends Record<
+					PropertyKey,
+					(number | undefined)[]
+				>;
+		  }
+		? Omit<
+				{
+					readonly [K in keyof C]: Return<
+						Sequence<T, C[K]>,
+						t
+					>;
+				},
+				Axis[number]
+			> &
+				Primative<T, t>[K]
+		: never;
+ 
+const axis = ["x", "y", "z", "w"] as const;
+ 
+export function applySwizzle(
+	value: number[],
+	$: object,
+	fluent: (value: unknown) => never,
+) {
+	const length = value.length;
+	const state = new Array<number>(length).fill(-1);
+ 
+	main: do {
+		for (let i = 0; i < state.length; i++) {
+			state[i] += 1;
+			if (state[i] >= length) state[i] = -1;
+			else break;
+		}
+ 
+		let reachedEmpty = false;
+		for (const item of state) {
+			if (item === -1) {
+				reachedEmpty = true;
+			} else if (reachedEmpty) {
+				continue main;
+			}
+		}
+ 
+		const key = state
+			.filter((x) => x !== -1)
+			.map((x) => axis[x])
+			.join("");
+		if (key.length <= 1 || key in $) continue;
+		const permutation = state
+			.filter((x) => x !== -1)
+			.map((x) => value[x]);
+		Object.defineProperty($, key, {
+			get: () => {
+				// OPTIMIZE? Reduce amount of arrays allocated and held for the lambda..?
+				return fluent(permutation);
+			},
+		});
+	} while (state.some((x) => x !== -1));
+ 
+	Object.defineProperty($, "x", {
+		get: () => {
+			return fluent(value[0]);
+		},
+	});
+	Object.defineProperty($, "y", {
+		get: () => {
+			return fluent(value[1]);
+		},
+	});
+	Object.defineProperty($, "z", {
+		get: () => {
+			return fluent(value[2]);
+		},
+	});
+	Object.defineProperty($, "w", {
+		get: () => {
+			return fluent(value[3]);
+		},
+	});
+}
+ 
+if (import.meta.vitest) {
+	const { test, expect } = import.meta.vitest;
+ 
+	const registry = [Math] as const;
+	const $ = makeFluent(registry);
+ 
+	test("Swizzling (.xx, .xy, etc.)", () => {
+		const x = 5 as const;
+		const y = 7 as const;
+ 
+		const vec = [x, y] as const;
+ 
+		expect($(vec).xx.value).toMatchObject([x, x]);
+		expect($(vec).yx.value).toMatchObject([y, x]);
+		expect($(vec).yy.value).toMatchObject([y, y]);
+ 
+		const large = [x, y, x, y] as const;
+ 
+		expect($(large).wzyx.value).toMatchObject([y, x, y, x]);
+		expect($(large).xzyw.value).toMatchObject([x, x, y, y]);
+		expect($(large).ywxz.value).toMatchObject([y, y, x, x]);
+		expect($(large).xxxx.value).toMatchObject([x, x, x, x]);
+		expect($(large).wwww.value).toMatchObject([y, y, y, y]);
+	});
+ 
+	test(".x", () => {
+		const x = 5 as const;
+		const arr = [x] as const;
+ 
+		expect($(arr).x.value).toBe(x);
+	});
+ 
+	test(".y", () => {
+		const y = 2 as const;
+		const arr = [y, y] as const;
+ 
+		expect($(arr).y.value).toBe(y);
+	});
+ 
+	test(".z", () => {
+		const z = 9 as const;
+		const arr = [z, z, z] as const;
+ 
+		expect($(arr).z.value).toBe(z);
+	});
+ 
+	test(".w", () => {
+		const w = 0 as const;
+		const arr = [w, w, w, w] as const;
+ 
+		expect($(arr).w.value).toBe(w);
+	});
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/src/mixin/optional.ts.html b/coverage/src/mixin/optional.ts.html index 39070bc..19e9d66 100644 --- a/coverage/src/mixin/optional.ts.html +++ b/coverage/src/mixin/optional.ts.html @@ -23,30 +23,30 @@
- 87.09% + 35.48% Statements - 27/31 + 11/31
- 100% + 42.85% Branches - 7/7 + 3/7
- 69.23% + 15.38% Functions - 9/13 + 2/13
- 86.66% + 36.66% Lines - 26/30 + 11/30
@@ -61,7 +61,7 @@
-
+
1 2 @@ -328,7 +328,14 @@ 263 264 265 -266  +266 +267 +268 +269 +270 +271 +272 +273        @@ -343,204 +350,6 @@       -18x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -18x -5x -1x -  -  -5x -1x -  -5x -5x -  -1x -  -  -  -5x -  -  -5x -5x -  -  -  -  -  -13x -1x -  -  -13x -1x -  -  -13x -13x -  -1x -  -  -  -13x -  -  -13x -13x -  -  -  -  -  -  -18x -  -  -  -3x 2x     @@ -593,6 +402,211 @@       +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +  +  +  +2x +  +  +  +2x +2x +  +  +  +  +  +2x +  +  +2x +2x +  +  +  +  +  +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +   
import { makeFluent } from "../base";
 import type { HKT } from "../base/hkt";
 import {
@@ -680,7 +694,7 @@ export interface Optional extends Mixin.HKT {
 					 * expect(b).toBe(10);
 					 * @from {@link Optional `Optional`}
 					 */
-					or: (<U>(
+					or: (<const U>(
 						fallback: U,
 					) => Return<Some<T> | U, typeof t>) & {
 						/**
@@ -689,11 +703,13 @@ export interface Optional extends Mixin.HKT {
 						 * only computes the fallback if the value is `null` or
 						 * `undefined`
 						 * @param callback
+						 * @from {@link Optional `Optional`}
 						 * @example
+						 * ```ts
 						 * const none = () => null as number | null;
 						 * const some = () => 8 as number | null;
 						 *
-						 * const fallback = () => 22; // mocked
+						 * const fallback = vi.fn(() => 22); // mocked
 						 *
 						 * const a = $(none()).or.else(fallback).value;
 						 * expect(a).toBe(22);
@@ -702,7 +718,7 @@ export interface Optional extends Mixin.HKT {
 						 * expect(b).toBe(8);
 						 *
 						 * expect(fallback).toHaveBeenCalledOnce()
-						 * @from {@link Optional `Optional`}
+						 * ```
 						 */
 						else: <U>(
 							callback: (v: None<T>) => U,
@@ -711,7 +727,10 @@ export interface Optional extends Mixin.HKT {
 					/**
 					 * Assert that value is not `null` or `undefined`
 					 * @param msg Reasoning to attach to the `AssertionError`
+					 * @see `.assert.none()` for the inverse assertion
+					 * @from {@link Optional `Optional`}
 					 * @example
+					 * ```ts
 					 * const array = [1, 2, 3];
 					 * const element: number | undefined = array[1];
 					 *
@@ -721,8 +740,7 @@ export interface Optional extends Mixin.HKT {
 					 * expect(() => {
 					 *  $(array[6]).assert()
 					 * }).toThrow()
-					 * @see `.assert.none()` for the inverse assertion
-					 * @from {@link Optional `Optional`}
+					 * ```
 					 */
 					assert: ((
 						msg?: string,
@@ -730,7 +748,9 @@ export interface Optional extends Mixin.HKT {
 						/**
 						 * Assert that the value is either `null` or `undefined`
 						 * @param msg Reasoning to attach to the `AssertionError`
+						 * @from {@link Optional `Optional`}
 						 * @example
+						 * ```ts
 						 * const array = [1, 2, 3];
 						 * const element: number | undefined = array[5];
 						 *
@@ -740,6 +760,7 @@ export interface Optional extends Mixin.HKT {
 						 * expect(() => {
 						 *  $(array[1]).assert.none()
 						 * }).toThrow()
+						 * ```
 						 */
 						none: (
 							msg?: string,
@@ -750,18 +771,43 @@ export interface Optional extends Mixin.HKT {
 }
  
 export const Optional = Mixin<Optional>((value, $, fluent) => {
-	if (isNone(value)) {
-		$.and = () => {
-			return fluent(value);
+	Iif (isNone(value)) {
+		$.and = () => {
+			return fluent(value);
 		};
  
-		$.or = (fallback: unknown) => {
-			return fluent(fallback);
+		$.or = (fallback: unknown) => {
+			return fluent(fallback);
 		};
+		assertType<object>($.or);
+		Object.assign($.or, {
+			else: (callback: (v: unknown) => unknown) => {
+				return fluent(callback(value));
+			},
+		});
+ 
+		$.assert = (msg?: string) => {
+			assert(false, msg);
+		};
+		assertType<object>($.assert);
+		Object.assign($.assert, {
+			none: () => {
+				return fluent(value);
+			},
+		});
+	} else {
+		$.and = (callback: (v: unknown) => unknown) => {
+			return fluent(callback(value));
+		};
+ 
+		$.or = () => {
+			return fluent(value);
+		};
+ 
 		assertType<object>($.or);
 		Object.assign($.or, {
-			else: (callback: (v: unknown) => unknown) => {
-				return fluent(callback(value));
+			else: () => {
+				return fluent(value);
 			},
 		});
  
@@ -774,39 +820,14 @@ export const Optional = Mixin<Optional>((value, $, fluent) => {
 				assert(false, msg);
 			},
 		});
-	} else {
-		$.and = (callback: (v: unknown) => unknown) => {
-			return fluent(callback(value));
-		};
- 
-		$.or = () => {
-			return fluent(value);
-		};
- 
-		assertType<object>($.or);
-		Object.assign($.or, {
-			else: () => {
-				return fluent(value);
-			},
-		});
- 
-		$.assert = (msg?: string) => {
-			assert(false, msg);
-		};
-		assertType<object>($.assert);
-		Object.assign($.assert, {
-			none: (msg?: string) => {
-				return fluent(value);
-			},
-		});
 	}
  
-	$.where = (
+	$.where = (
 		callback: (v: unknown) => boolean,
-		fallback = null,
+		fallback = null,
 	) => {
-		if (callback(value)) return fluent(value);
-		return fluent(fallback);
+		if (callback(value)) return fluent(value);
+		return fluent(fallback);
 	};
 });
  
@@ -865,7 +886,7 @@ if (import.meta.vitest) {
             
         
         
+        
+        
+        
+    
+
+    
\ No newline at end of file
diff --git a/eslint.config.ts b/eslint.config.ts
index 145668f..e6c61b1 100644
--- a/eslint.config.ts
+++ b/eslint.config.ts
@@ -3,7 +3,7 @@ import tseslint from "typescript-eslint";
 import { defineConfig, globalIgnores } from "eslint/config";
 
 export default defineConfig([
-	globalIgnores(["dist"]),
+	globalIgnores(["dist", "tests/generated"]),
 	{
 		files: ["**/*.{ts,tsx}"],
 		extends: [
diff --git a/package.json b/package.json
index 9cce1fa..4dcf4cf 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
 	"version": "0.0.0",
 	"type": "module",
 	"scripts": {
-		"test": "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",
 		"build": "tsc -b && esbuild --minify --bundle src/index.ts --outdir=dist --define:import.meta.vitest=undefined",
 		"fmt": "prettier --write .",
 		"lint": "eslint .",
@@ -17,6 +17,7 @@
 		"@vitest/coverage-v8": "4.1.9",
 		"esbuild": "^0.28.1",
 		"eslint": "^10.3.0",
+		"generate-jsdoc-example-tests": "^0.2.6",
 		"jiti": "^2.7.0",
 		"madge": "^8.0.0",
 		"prettier": "^3.8.4",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c710453..c6c81cd 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -26,6 +26,9 @@ importers:
       eslint:
         specifier: ^10.3.0
         version: 10.5.0(jiti@2.7.0)
+      generate-jsdoc-example-tests:
+        specifier: ^0.2.6
+        version: 0.2.6
       jiti:
         specifier: ^2.7.0
         version: 2.7.0
@@ -310,6 +313,9 @@ packages:
   '@jridgewell/trace-mapping@0.3.31':
     resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
 
+  '@microsoft/tsdoc@0.15.1':
+    resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==}
+
   '@napi-rs/wasm-runtime@1.1.5':
     resolution: {integrity: sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==}
     peerDependencies:
@@ -618,6 +624,10 @@ packages:
   buffer@5.7.1:
     resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
 
+  cac@6.7.14:
+    resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+    engines: {node: '>=8'}
+
   chai@6.2.2:
     resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
     engines: {node: '>=18'}
@@ -866,6 +876,10 @@ packages:
   function-bind@1.1.2:
     resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
 
+  generate-jsdoc-example-tests@0.2.6:
+    resolution: {integrity: sha512-4eHWFJ1TbBEEmDVe07Kt5Sgr0f6sZXSU44dpSulpOlQXZ+ddsuFAs9pEw22xPEJDFGSVJQlnUDoHuVihE9tHBQ==}
+    hasBin: true
+
   get-amd-module-type@6.0.2:
     resolution: {integrity: sha512-7zShVYAYtMnj9S65CfN+hvpBCByfuB1OY8xID01nZEzXTZbx4YyysAfi+nMl95JSR6odt4q8TCj2W63KAoyVLQ==}
     engines: {node: '>=18'}
@@ -1677,6 +1691,8 @@ snapshots:
       '@jridgewell/resolve-uri': 3.1.2
       '@jridgewell/sourcemap-codec': 1.5.5
 
+  '@microsoft/tsdoc@0.15.1': {}
+
   '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
     dependencies:
       '@emnapi/core': 1.10.0
@@ -2034,6 +2050,8 @@ snapshots:
       base64-js: 1.5.1
       ieee754: 1.2.1
 
+  cac@6.7.14: {}
+
   chai@6.2.2: {}
 
   chalk@4.1.2:
@@ -2320,6 +2338,13 @@ snapshots:
 
   function-bind@1.1.2: {}
 
+  generate-jsdoc-example-tests@0.2.6:
+    dependencies:
+      '@microsoft/tsdoc': 0.15.1
+      cac: 6.7.14
+      prettier: 3.8.4
+      typescript: 5.9.3
+
   get-amd-module-type@6.0.2:
     dependencies:
       ast-module-types: 6.0.2
diff --git a/src/base/index.ts b/src/base/index.ts
index 54fa7bf..9e3cd5c 100644
--- a/src/base/index.ts
+++ b/src/base/index.ts
@@ -10,14 +10,27 @@ export type Base = T extends { [shim]: { value: infer U } }
 export type Fluent<
 	T,
 	Reg extends Registry = DefaultRegistry,
-> = Base & Methods;
+> = Base & Methods extends infer U
+	? U &
+			Pick<
+				{
+					/**
+					 * Immediate casts and conversions to other types.
+					 */
+					to: unknown;
+
+					[K: PropertyKey]: unknown;
+				},
+				keyof U
+			>
+	: never;
 
 export function makeFluent(
 	registry: Reg,
 ) {
 	const fluent = (value: T) => {
 		// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
-		const f = { value } as never as Fluent;
+		const f = { value } as unknown as Fluent;
 
 		for (const mixin of registry) {
 			// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
diff --git a/src/index.ts b/src/index.ts
index 505ddb5..ff0717c 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -2,3 +2,4 @@ import { makeFluent } from "./base";
 import { DEFAULT_REGISTRY } from "./registry";
 
 export const fluent = makeFluent(DEFAULT_REGISTRY);
+export const $ = fluent;
diff --git a/src/internal.ts b/src/internal.ts
index 10b2b7b..4b17fa0 100644
--- a/src/internal.ts
+++ b/src/internal.ts
@@ -7,7 +7,7 @@ export interface Identity extends HKT {
 // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
 export const never = undefined as never;
 
-export type Constraint = U;
+export type MaxDepth = 20;
 
 export class AssertionError extends Error {
 	public constructor(msg?: string) {
diff --git a/src/mixin/array.ts b/src/mixin/array.ts
index d1cd3ff..f1bc9fe 100644
--- a/src/mixin/array.ts
+++ b/src/mixin/array.ts
@@ -141,7 +141,9 @@ export interface Array extends Mixin.HKT {
 					 * Index the array using the specified zero-based index.
 					 * Negative indexes start at the end of the array.
 					 * @param index Zero-based index
+					 * @from {@link Array `Array`}
 					 * @example
+					 * ```ts
 					 * const array = ["first", "middle", "last"] as const;
 					 *
 					 * const first = $(array).at(0).value;
@@ -154,16 +156,19 @@ export interface Array extends Mixin.HKT {
 					 *
 					 * const oob = $(array).at(10).value;
 					 * expect(oob).toBe(undefined);
-					 * @from {@link Array `Array`}
+					 * ```
 					 */
 					at: (
+						/** Zero-based index */
 						index: K,
 					) => Return, typeof t>;
 					/**
 					 * Interospect each item of the array using the specified
 					 * callback
-					 * @param callback Callback taking item, index, and the array for each item.
+					 * @param callback Function called with each element of the array
+					 * @from {@link Array `Array`}
 					 * @example
+					 * ```ts
 					 * const array = [4, 5, 6] as const;
 					 *
 					 * let sum = 0;
@@ -171,55 +176,84 @@ export interface Array extends Mixin.HKT {
 					 *
 					 * expect(sum).toBe(15);
 					 * expect(v).toMatchObject(array);
-					 * @from {@link Array `Array`}
+					 * ```
 					 */
 					each: (
+						/**
+						 * Predicate to run on every element
+						 * @param element The current element
+						 * @param index The index of the current element in the array
+						 * @param array The array being iterated
+						 */
 						callback: (...args: IterArgs) => void,
 					) => Return;
 					/**
 					 * Transform each item of the array using the specified callback
-					 * @param callback Transformative callback taking item, index, and array; returns the new item
+					 * @param callback Predicate to compute each new value with
+					 * @from {@link Array `Array`}
 					 * @example
+					 * ```ts
 					 * const chars = ["h", "e", "l", "l", "o"] as const;
 					 *
 					 * const v = $(chars).map(ch => ch.toUpperCase()).value;
 					 * expect(v).toMatchObject(["H", "E", "L", "L", "O"]);
-					 * @from {@link Array `Array`}
+					 * ```
 					 */
 					map: (
+						/**
+						 * Predicate to compute each new value of the array
+						 * @param element The current element
+						 * @param index The index of the current element in the array
+						 * @param array The array being iterated
+						 * @return The new value to use for this element
+						 */
 						callback: (...args: IterArgs) => U,
 					) => Return, typeof t>;
 					/**
 					 * Extend the array by repeating its current contents n times
-					 * @param count The number of repetitions to add
+					 * @param count The amount of repetitions to extend the array by
+					 * @from {@link Array `Array`}
 					 * @example
+					 * ```ts
 					 * const array = [1, 2];
 					 *
 					 * const v = $(array).extend(2).value;
 					 * expect(v).toMatchObject([1, 2, 1, 2, 1, 2]);
-					 * @from {@link Array `Array`}
+					 * ```
 					 */
 					extend: (
+						/** The amount of repetitions to extend the array by */
 						count: N,
 					) => Return, typeof t>;
 					/**
 					 * Filter the array to contain only items satisfying the
 					 * specified callback conditional
-					 * @param callback Callback getting item, index, and array for each item and determining if it should be filtered out or not
+					 * @param callback Predicate determining whether each element should be kept in the array
+					 * @from {@link Array `Array`}
 					 * @example
+					 * ```ts
 					 * const dirty = [-2, 4, 1, -5, -6] as const;
 					 *
 					 * const v = $(dirty).filter(v => v >= 0).value;
 					 * expect(v).toMatchObject([4, 1]);
-					 * @from {@link Array `Array`}
+					 * ```
 					 */
 					filter: ((
+						/**
+						 * Predicate to compute filtering with
+						 * @param element The current element
+						 * @param index The index of the current element in the array
+						 * @param array The array being iterated
+						 * @return `true` if the value should be kept and `false` if it should not
+						 */
 						callback: (...args: IterArgs) => boolean,
 					) => Return, typeof t>) & {
 						/**
 						 * Filter the array to only contain items which are not
 						 * `null` or `undefined`.
+						 * @from {@link Array `Array`}
 						 * @example
+						 * ```ts
 						 * const array = new Array(5);
 						 *
 						 * array[0] = 1;
@@ -228,7 +262,7 @@ export interface Array extends Mixin.HKT {
 						 *
 						 * const v = $(array).filter.some().value;
 						 * expect(v).toMatchObject([1, 5, 2]);
-						 * @from {@link Array `Array`}
+						 * ```
 						 */
 						some: () => Return<
 							T extends unknown[]
@@ -243,23 +277,106 @@ export interface Array extends Mixin.HKT {
 							typeof t
 						>;
 					} & HidePrototype;
+					/**
+					 * Collapse array into one value using the specified accumulator callback
+					 * @param initial The initial value of the accumulator
+					 * @param callback Predicate used to compute the new value of the accumulator with each element
+					 * @from {@link Array `Array`}
+					 * @example
+					 * ```ts
+					 * const data = [-5, -4, -2, 1, 2, 3, 5] as const;
+					 *
+					 * const sum = $(data)
+					 * 	.reduce(0, (total, value) => total + value)
+					 * 	.value;
+					 * expect(sum).toBe(0);
+					 * ```
+					 */
 					reduce: ((
+						/**
+						 * Initial value to use for the accumulator
+						 */
 						initial: U,
+						/**
+						 * Predicate to compute the new accumulator value
+						 * @param value The current status of the accumulator
+						 * @param element The current element
+						 * @param index The index of the current element in the array
+						 * @param array The array being iterated
+						 */
 						callback: (
 							value: U,
 							...args: IterArgs
 						) => U,
 					) => Return) & {
+						/**
+						 * Collapse the array using the specified accumulator function, starting from the right.
+						 * @param initial The initial value of the accumulator
+						 * @param callback Predicate used to compute the new value of the accumulator with each element
+						 * @see `.reduce()`
+						 * @example
+						 * ```ts
+						 * const path = ["a", "b", "c"] as const;
+						 *
+						 * const v = $(path)
+						 * 	.reduce.right({}, (obj, key) => ({ [key]: obj }))
+						 * 	.value;
+						 * expect(v).toMatchObject({ a: { b: { c: { } } } });
+						 * ```
+						 */
 						right: (
+							/**
+							 * Initial value to use for the accumulator
+							 */
 							initial: U,
-							callback: (
-								value: U,
-								...args: IterArgs
-							) => U,
+							/**
+							 * Predicate to compute the new accumulator value
+							 * @param value The current status of the accumulator
+							 * @param element The current element
+							 * @param index The index of the current element in the array
+							 * @param array The array being iterated
+							 */
 						) => Return;
 					} & HidePrototype;
+					/**
+					 * Get the number of items in the array
+					 * @example
+					 * ```ts
+					 * const apples = ["red", "green", "yellow"];
+					 *
+					 * const count = $(apples).length().value;
+					 * expect(count).toBe(3);
+					 * ```
+					 */
 					length: () => Return;
+
+					/**
+					 * Rearrange the items in the array in accordance to the
+					 * specified sorting function
+					 * @param sort The sorting algorithm function to determine the correct order of elements
+					 * @see Nested properties for various pre-made sorting algorithms.
+					 * @from {@link Array `Array`}
+					 * @example
+					 * ```ts
+					 * const unordered = [7, 2, 4, 6, 3, 5, 1];
+					 *
+					 * const ordered = $(unordered)
+					 * 	.sort((a, b) => a - b)
+					 * 	.value;
+					 * expect(ordered).toMatchObject([1, 2, 3, 4, 5, 6, 7]);
+					 * ```
+					 */
 					sort: ((
+						/**
+						 * Predicate used to compare and determine the ordering
+						 * between any 2 elements of the array
+						 * @param a One element of the array to comapare
+						 * @param b Another element of the array to compare against
+						 * @param arr A view of the array being sorted
+						 * @return A negative value if `a` should come before
+						 * `b`, a positive value if `a` should come after `b`,
+						 * and `0` if `a` and `b` are considered the same.
+						 */
 						callback: (
 							a: Item,
 							b: Item,
@@ -268,13 +385,33 @@ export interface Array extends Mixin.HKT {
 					) => Return, typeof t>) &
 						([Item] extends [string]
 							? {
-									alpha: () => Return<
+									/**
+									 * @param via A callback to compute a
+									 * representation of each element to use for
+									 * sorting
+									 */
+									alpha: (
+										/**
+										 * @param v The current element
+										 * @return A string representation of `v`
+										 */
+										via?: (v: Item) => string,
+									) => Return<
 										Unordered,
 										typeof t
 									>;
 								}
 							: {
+									/**
+									 * @param via A callback to map each element
+									 * of the array to a string that is used for
+									 * sorting
+									 */
 									alpha: (
+										/**
+										 * @param v The current element
+										 * @return The string representation of `v`
+										 */
 										via: (v: Item) => string,
 									) => Return<
 										Unordered,
@@ -305,8 +442,19 @@ export interface Array extends Mixin.HKT {
 										Unordered,
 										typeof t
 									>;
-								}) &
-						HidePrototype;
+								}) & {
+							/**
+							 * Sort alphabetically (A-Z) by Unicode code points
+							 * @example
+							 * const names = ["Johnny", "Anna", "Bart", "Xavier", "Java"];
+							 *
+							 * const sorted = $(names).sort.alpha().value;
+							 * expect(sorted).toMatchObject([
+							 * 	"Anna", "Bart", "Java", "Johnny", "Xavier"
+							 * ])
+							 */
+							alpha: unknown;
+						} & HidePrototype;
 					reverse: () => Return, typeof t>;
 				}
 			: unknown
@@ -328,7 +476,9 @@ export const Array = Mixin((value, $, fluent) => {
 		assert(count >= 0);
 		if (count === 0) return fluent(value);
 		return fluent(
-			value.concat(...new globalThis.Array(count).fill(value)),
+			value.concat(
+				...new globalThis.Array(count).fill(value),
+			),
 		);
 	};
 
@@ -388,9 +538,7 @@ export const Array = Mixin((value, $, fluent) => {
 			),
 		) => {
 			return fluent(
-				value.toSorted((a, b) =>
-					via(a)! < via(b)! ? -1 : 1,
-				),
+				value.toSorted((a, b) => (via(a) < via(b) ? -1 : 1)),
 			);
 		},
 		ascending: (
@@ -450,14 +598,17 @@ if (import.meta.vitest) {
 	});
 
 	test("extend()", () => {
-		const arr = [1, 2] as const;
+		const arr = [1, 2];
 
 		const copies = 2;
-		const expected: number[] = new globalThis.Array(copies + 1)
+		const expected: number[] = new globalThis.Array(
+			copies + 1,
+		)
 			.fill(arr)
 			.flat(1);
 
 		expect($(arr).extend(copies).value).toMatchObject(expected);
+		expect($(arr).extend(0).value).toBe(arr);
 	});
 
 	test("map()", () => {
@@ -518,7 +669,8 @@ if (import.meta.vitest) {
 				i,
 				arr,
 			);
-			sum += arr[i]!;
+
+			sum += arr[i];
 		}
 
 		callback.mockClear();
@@ -526,7 +678,7 @@ if (import.meta.vitest) {
 		expect($(arr).reduce.right(0, callback).value).toBe(expected);
 
 		sum = 0;
-		for (let i = arr.length; i > 0; i--) {
+		for (let i: number = arr.length; i > 0; i--) {
 			expect(callback).toHaveBeenNthCalledWith(
 				arr.length - i + 1,
 				sum,
@@ -534,7 +686,7 @@ if (import.meta.vitest) {
 				i - 1,
 				arr,
 			);
-			sum += arr[i - 1]!;
+			sum += arr[i - 1];
 		}
 	});
 
@@ -580,4 +732,19 @@ if (import.meta.vitest) {
 			strings.toSorted(),
 		);
 	});
+
+	test("reverse()", () => {
+		const array = [1, 2, 3, 4, 5] as const;
+
+		expect($(array).reverse().value).toMatchObject(
+			array.toReversed(),
+		);
+	});
+
+	test("length()", () => {
+		const length = 3;
+		const array = new globalThis.Array(length).fill(5);
+
+		expect($(array).length().value).toBe(length);
+	});
 }
diff --git a/src/mixin/base.ts b/src/mixin/base.ts
index 4b22c31..75c8ad0 100644
--- a/src/mixin/base.ts
+++ b/src/mixin/base.ts
@@ -10,13 +10,15 @@ export interface Base extends Mixin.HKT {
 				 * modifying the value.
 				 * @param callback The interospective callback
 				 * @see `transform` to modify
+				 * @from {@link Base `Base`}
 				 * @example
+				 * ```ts
 				 * let x;
 				 * const value = $(10).tap(v => { x = ++v }).value;
 				 *
 				 * expect(x).toBe(11);
 				 * expect(value).toBe(10);
-				 * @from {@link Base `Base`}
+				 * ```
 				 */
 				tap(
 					callback: (value: Readonly) => void,
@@ -26,12 +28,14 @@ export interface Base extends Mixin.HKT {
 				 * `callback` using the outputted return value as a new value.
 				 * A.K.A., _transform_ the current value using a callback
 				 * @param callback The transformative callback
+				 * @from {@link Base `Base`}
 				 * @example
+				 * ```ts
 				 * const value = $("Hello")
 				 * 	.transform(v => v.toUpperCase())
 				 * 	.value;
 				 * expect(value).toBe("HELLO");
-				 * @from {@link Base `Base`}
+				 * ```
 				 */
 				transform(
 					callback: (value: T) => U,
diff --git a/src/mixin/index.ts b/src/mixin/index.ts
deleted file mode 100644
index 01b124e..0000000
--- a/src/mixin/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export { Base } from "./base";
-export { AsyncMixin as Async } from "./awaited";
-export { Optional } from "./optional";
diff --git a/src/mixin/math.ts b/src/mixin/math.ts
index e69de29..c365367 100644
--- a/src/mixin/math.ts
+++ b/src/mixin/math.ts
@@ -0,0 +1,297 @@
+import { makeFluent } from "../base";
+import type { HKT } from "../base/hkt";
+import {
+	Mixin,
+	type Input,
+	type Props,
+	type Return,
+} from "../base/mixin";
+import { assertType } from "../internal";
+import { applySwizzle, type Swizzle } from "./math/swizzle";
+
+type Sign = T extends 0
+	? 0
+	: `${T}` extends `-${number}`
+		? -1
+		: 1;
+
+export interface Math extends Mixin.HKT {
+	new: (t: HKT.T) => Input extends infer T
+		? T extends number
+			? {
+					add: (other: number) => Return;
+					subtract: (
+						other: number,
+					) => Return;
+					multiply: (
+						factor: number,
+					) => Return;
+					pow: (
+						exponent: number,
+					) => Return;
+					sqrt: () => Return;
+					divide: (
+						divisor: number,
+					) => Return;
+					mod: (
+						divisor: number,
+					) => Return;
+					log: (base?: number) => Return;
+
+					isEqualApprox: (
+						other: number,
+						delta?: number,
+					) => Return;
+
+					floor: () => Return;
+					ceil: () => Return;
+					round: () => Return;
+					fround: () => Return;
+
+					abs: () => Return;
+					negate: () => Return;
+					sign: () => Return, typeof t>;
+
+					min: (
+						...others: number[]
+					) => Return;
+					max: (
+						...others: number[]
+					) => Return;
+					clamp: (
+						min: number,
+						max: number,
+					) => Return;
+					snapped: (
+						multiple: number,
+					) => Return;
+
+					lerp: typeof t extends infer TProps extends Props
+						? (
+								b: number,
+								t: number,
+							) => Return
+						: never;
+
+					sin: () => Return;
+					asin: () => Return;
+					cos: () => Return;
+					acos: () => Return;
+					tan: () => Return;
+					atan: () => Return;
+					atan2: (y: number) => Return;
+
+					sinh: () => Return;
+					asinh: () => Return;
+					cosh: () => Return;
+					acosh: () => Return;
+					tanh: () => Return;
+					atanh: () => Return;
+
+					to: {
+						radians: () => Return;
+						degrees: () => Return;
+					};
+				}
+			: T extends readonly number[]
+				? Swizzle & {
+						sum: () => Return;
+					}
+				: unknown
+		: never;
+}
+
+const M = globalThis.Math;
+
+export const Math = Mixin((value, $, fluent) => {
+	if (typeof value === "number") {
+		$.add = (other: number) => fluent(value + other);
+		$.subtract = (other: number) => fluent(value - other);
+		$.multiply = (factor: number) => fluent(value * factor);
+		$.pow = (exponent: number) => fluent(M.pow(value, exponent));
+		$.sqrt = () => fluent(M.sqrt(value));
+		$.divide = (divisor: number) => fluent(value / divisor);
+		$.mod = (divisor: number) => fluent(value % divisor);
+		$.log = (base?: number) => {
+			if (base !== undefined)
+				return fluent(M.log(value) / M.log(base));
+			return fluent(M.log(value));
+		};
+
+		$.isEqualApprox = (
+			other: number,
+			delta: number = Number.EPSILON,
+		) => {
+			return fluent(M.abs(value - other) < delta);
+		};
+
+		$.floor = () => fluent(M.floor(value));
+		$.ceil = () => fluent(M.ceil(value));
+		$.round = () => fluent(M.round(value));
+		$.fround = () => fluent(M.fround(value));
+
+		$.abs = () => fluent(M.abs(value));
+		$.negate = () => fluent(-value);
+		$.sign = () => fluent(M.sign(value));
+
+		$.min = (...others: number[]) =>
+			fluent(M.min(value, ...others));
+		$.max = (...others: number[]) =>
+			fluent(M.max(value, ...others));
+		$.clamp = (min: number, max: number) =>
+			fluent(M.min(M.max(value, min), max));
+		$.snapped = (multiple: number) =>
+			fluent(M.round(value / multiple) * multiple);
+
+		$.lerp = (b: number, t: number) =>
+			fluent(value * (1 - t) + b * t);
+
+		$.sin = () => fluent(M.sin(value));
+		$.asin = () => fluent(M.asin(value));
+		$.cos = () => fluent(M.cos(value));
+		$.acos = () => fluent(M.acos(value));
+		$.tan = () => fluent(M.tan(value));
+		$.atan = () => fluent(M.atan(value));
+		$.atan2 = (y: number) => fluent(M.atan2(y, value));
+
+		$.sinh = () => fluent(M.sinh(value));
+		$.asinh = () => fluent(M.asinh(value));
+		$.cosh = () => fluent(M.cosh(value));
+		$.acosh = () => fluent(M.acosh(value));
+		$.tanh = () => fluent(M.tanh(value));
+		$.atanh = () => fluent(M.atanh(value));
+
+		const DEG_TO_RAD = M.PI / 180;
+		const RAD_TO_DEG = 180 / M.PI;
+
+		$.to ??= {};
+		assertType($.to);
+		Object.assign($.to, {
+			radians: () => fluent(value * DEG_TO_RAD),
+			degrees: () => fluent(value * RAD_TO_DEG),
+		});
+	} else if (
+		Array.isArray(value) &&
+		value.every((x) => typeof x === "number")
+	) {
+		applySwizzle(value, $, fluent);
+	}
+});
+
+if (import.meta.vitest) {
+	const { test, expect } = import.meta.vitest;
+
+	const registry = [Math] as const;
+	const $ = makeFluent(registry);
+
+	const t = (f: string, a: number, ...args: unknown[]) => {
+		test(f + "()", () => {
+			// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion, @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
+			expect(($(a) as any)[f](...args.slice(0, -1)).value).toBe(
+				args[args.length - 1],
+			);
+		});
+	};
+
+	t("add", 4, 5, 4 + 5);
+	t("subtract", 7, 2, 7 - 2);
+	t("multiply", 3, 3, 3 * 3);
+	t("pow", 2, 4, 2 ** 4);
+	t("sqrt", 121, M.sqrt(121));
+	t("mod", 8, 3, 8 % 3);
+	test("log()", () => {
+		expect($(M.E).log().value).toBe(1);
+		expect($(1000).log(10).value).toBeCloseTo(M.log10(1000));
+	});
+
+	test("equalApprox()", () => {
+		const a = 0.1 + 0.2;
+		const target = 0.3;
+
+		expect($(a).isEqualApprox(target).value).toBe(true);
+
+		expect($(a).isEqualApprox(1, 1).value).toBe(true);
+
+		expect(
+			$(a).isEqualApprox(target + Number.EPSILON * 2).value,
+		).toBe(false);
+	});
+
+	t("floor", 1.7, 1);
+	t("ceil", 1.7, 2);
+	test("round()", () => {
+		expect($(1.3).round().value).toBe(1);
+		expect($(4.5).round().value).toBe(5);
+	});
+	t("fround", 6.45, M.fround(6.45));
+
+	test("abs()", () => {
+		const v = 4;
+
+		expect($(v).abs().value).toBe(v);
+		expect($(-v).abs().value).toBe(v);
+	});
+	test("negate()", () => {
+		const v = 7;
+
+		expect($(v).negate().value).toBe(-v);
+		expect($(v).negate().negate().value).toBe(v);
+	});
+	test("sign()", () => {
+		expect($(-4).sign().value).toBe(-1);
+		expect($(0).sign().value).toBe(0);
+		expect($(6).sign().value).toBe(1);
+	});
+
+	t("min", 3, 1, 2, 1);
+	t("max", 3, 1, 2, 3);
+	test("clamp()", () => {
+		const min = 1;
+		const max = 4;
+
+		const v = 3;
+
+		expect($(min - 4).clamp(min, max).value).toBe(min);
+		expect($(v).clamp(min, max).value).toBe(v);
+		expect($(max + 7).clamp(min, max).value).toBe(max);
+	});
+	t("snapped", 12.345, 0.1, 12.3);
+
+	test("lerp()", () => {
+		const a = 2;
+		const b = 4;
+
+		expect($(a).lerp(b, 0).value).toBe(a);
+		expect($(a).lerp(b, 0.5).value).toBe(3);
+		expect($(a).lerp(b, 1).value).toBe(b);
+
+		expect($(a).lerp(b, 2).value).toBe(b + (b - a));
+		expect($(a).lerp(b, -1).value).toBe(0);
+	});
+
+	t("sin", M.PI, M.sin(M.PI));
+	t("cos", M.PI, M.cos(M.PI));
+	t("acos", M.PI, M.acos(M.PI));
+	t("tan", M.PI, M.tan(M.PI));
+	t("atan", M.PI, M.atan(M.PI));
+	t("atan2", 10, M.PI, M.atan2(M.PI, 10));
+
+	t("sinh", M.PI, M.sinh(M.PI));
+	t("asinh", M.PI, M.asinh(M.PI));
+	t("cosh", M.PI, M.cosh(M.PI));
+	t("acosh", M.PI, M.acosh(M.PI));
+	t("tanh", M.PI, M.tanh(M.PI));
+	t("atanh", 0.5, M.atanh(0.5));
+
+	test(".to.radians()", () => {
+		const angle = 180;
+
+		expect($(angle).to.radians().value).toBe(M.PI);
+	});
+
+	test(".to.degrees()", () => {
+		const angle = M.PI;
+
+		expect($(angle).to.degrees().value).toBe(180);
+	});
+}
diff --git a/src/mixin/math/swizzle.ts b/src/mixin/math/swizzle.ts
new file mode 100644
index 0000000..86528a3
--- /dev/null
+++ b/src/mixin/math/swizzle.ts
@@ -0,0 +1,272 @@
+import { makeFluent } from "../../base";
+import type { Props, Return } from "../../base/mixin";
+import { type MaxDepth } from "../../internal";
+import { Math } from "../math";
+
+type Axis = typeof axis;
+type Vec<
+	T,
+	N extends number,
+	TOut extends T[] = [],
+> = TOut["length"] extends N
+	? TOut
+	: TOut["length"] extends MaxDepth
+		? T[]
+		: Vec;
+
+type Inc = N extends number
+	? [...Vec, null]["length"]
+	: 0;
+type Dec =
+	Vec extends [...infer Rest extends null[], null]
+		? Rest["length"]
+		: -1;
+
+type Next<
+	N extends number,
+	State extends readonly (number | undefined)[],
+	TOut extends (number | undefined)[] = [],
+> = State extends readonly [
+	infer Current extends number | undefined,
+	...infer Rest extends (number | undefined)[],
+]
+	? Inc extends infer TInc
+		? TInc extends N
+			? Next
+			: [...TOut, TInc, ...Rest]
+		: never
+	: null;
+
+type Key<
+	State extends (number | undefined)[],
+	TOut extends string = "",
+> = State extends readonly [infer Only extends number, ...undefined[]]
+	? `${TOut}${Axis[Only]}`
+	: State extends readonly [
+				infer Current extends number,
+				...infer Rest extends (number | undefined)[],
+		  ]
+		? Key
+		: never;
+
+type IsAscending<
+	State extends (number | undefined)[],
+	Prev extends number | undefined = undefined,
+> = State extends readonly [
+	infer Current extends number,
+	...infer Rest extends number[],
+]
+	? Current extends Inc
+		? IsAscending>
+		: false
+	: State extends readonly []
+		? true
+		: false;
+
+type Pretty = { [K in keyof T]: T[K] };
+
+type SwizzlePermutations<
+	N extends number,
+	State extends Vec = Vec,
+	TOut extends Record = Record<
+		never,
+		never
+	>,
+> =
+	Next extends infer TNext
+		? TNext extends Vec
+			? SwizzlePermutations<
+					N,
+					TNext,
+					TOut &
+						(IsAscending extends true
+							? unknown
+							: Record, State>)
+				>
+			: Pretty, State>>
+		: never;
+
+type Sequence<
+	T extends readonly unknown[],
+	Indexes extends (number | undefined)[],
+	TOut extends T[number][] = [],
+> = Indexes extends readonly [
+	infer Current extends number,
+	...infer Rest extends (number | undefined)[],
+]
+	? Sequence
+	: TOut;
+
+type Primative<
+	T extends readonly unknown[],
+	t extends Props,
+	Axes extends readonly string[] = Axis,
+	Acc = unknown,
+	TOut extends unknown[] = [],
+> = Axes extends readonly [
+	infer Current extends string,
+	...infer Rest extends string[],
+]
+	? Acc &
+			Record<
+				Current,
+				Return
+			> extends infer TAcc
+		? Primative
+		: never
+	: TOut;
+
+type SwizzleCache = [
+	{ x: [0] },
+	SwizzlePermutations<2>,
+	SwizzlePermutations<3>,
+	SwizzlePermutations<4>,
+];
+
+export type Swizzle<
+	T extends readonly unknown[],
+	t extends Props,
+> = number extends T["length"]
+	? unknown
+	: (
+				Dec extends infer K extends 0 | 1 | 2 | 3
+					? { k: K; c: SwizzleCache[K] }
+					: SwizzleCache extends [...unknown[], infer Last]
+						? { k: Dec; c: Last }
+						: never
+		  ) extends {
+				k: infer K extends number;
+				c: infer C extends Record<
+					PropertyKey,
+					(number | undefined)[]
+				>;
+		  }
+		? Omit<
+				{
+					readonly [K in keyof C]: Return<
+						Sequence,
+						t
+					>;
+				},
+				Axis[number]
+			> &
+				Primative[K]
+		: never;
+
+const axis = ["x", "y", "z", "w"] as const;
+
+export function applySwizzle(
+	value: number[],
+	$: object,
+	fluent: (value: unknown) => never,
+) {
+	const length = value.length;
+	const state = new Array(length).fill(-1);
+
+	main: do {
+		for (let i = 0; i < state.length; i++) {
+			state[i] += 1;
+			if (state[i] >= length) state[i] = -1;
+			else break;
+		}
+
+		let reachedEmpty = false;
+		for (const item of state) {
+			if (item === -1) {
+				reachedEmpty = true;
+			} else if (reachedEmpty) {
+				continue main;
+			}
+		}
+
+		const key = state
+			.filter((x) => x !== -1)
+			.map((x) => axis[x])
+			.join("");
+		if (key.length <= 1 || key in $) continue;
+		const permutation = state
+			.filter((x) => x !== -1)
+			.map((x) => value[x]);
+		Object.defineProperty($, key, {
+			get: () => {
+				// OPTIMIZE? Reduce amount of arrays allocated and held for the lambda..?
+				return fluent(permutation);
+			},
+		});
+	} while (state.some((x) => x !== -1));
+
+	Object.defineProperty($, "x", {
+		get: () => {
+			return fluent(value[0]);
+		},
+	});
+	Object.defineProperty($, "y", {
+		get: () => {
+			return fluent(value[1]);
+		},
+	});
+	Object.defineProperty($, "z", {
+		get: () => {
+			return fluent(value[2]);
+		},
+	});
+	Object.defineProperty($, "w", {
+		get: () => {
+			return fluent(value[3]);
+		},
+	});
+}
+
+if (import.meta.vitest) {
+	const { test, expect } = import.meta.vitest;
+
+	const registry = [Math] as const;
+	const $ = makeFluent(registry);
+
+	test("Swizzling (.xx, .xy, etc.)", () => {
+		const x = 5 as const;
+		const y = 7 as const;
+
+		const vec = [x, y] as const;
+
+		expect($(vec).xx.value).toMatchObject([x, x]);
+		expect($(vec).yx.value).toMatchObject([y, x]);
+		expect($(vec).yy.value).toMatchObject([y, y]);
+
+		const large = [x, y, x, y] as const;
+
+		expect($(large).wzyx.value).toMatchObject([y, x, y, x]);
+		expect($(large).xzyw.value).toMatchObject([x, x, y, y]);
+		expect($(large).ywxz.value).toMatchObject([y, y, x, x]);
+		expect($(large).xxxx.value).toMatchObject([x, x, x, x]);
+		expect($(large).wwww.value).toMatchObject([y, y, y, y]);
+	});
+
+	test(".x", () => {
+		const x = 5 as const;
+		const arr = [x] as const;
+
+		expect($(arr).x.value).toBe(x);
+	});
+
+	test(".y", () => {
+		const y = 2 as const;
+		const arr = [y, y] as const;
+
+		expect($(arr).y.value).toBe(y);
+	});
+
+	test(".z", () => {
+		const z = 9 as const;
+		const arr = [z, z, z] as const;
+
+		expect($(arr).z.value).toBe(z);
+	});
+
+	test(".w", () => {
+		const w = 0 as const;
+		const arr = [w, w, w, w] as const;
+
+		expect($(arr).w.value).toBe(w);
+	});
+}
diff --git a/src/mixin/optional.ts b/src/mixin/optional.ts
index 76bb3f2..93831df 100644
--- a/src/mixin/optional.ts
+++ b/src/mixin/optional.ts
@@ -85,7 +85,7 @@ export interface Optional extends Mixin.HKT {
 					 * expect(b).toBe(10);
 					 * @from {@link Optional `Optional`}
 					 */
-					or: ((
+					or: ((
 						fallback: U,
 					) => Return | U, typeof t>) & {
 						/**
@@ -94,11 +94,13 @@ export interface Optional extends Mixin.HKT {
 						 * only computes the fallback if the value is `null` or
 						 * `undefined`
 						 * @param callback
+						 * @from {@link Optional `Optional`}
 						 * @example
+						 * ```ts
 						 * const none = () => null as number | null;
 						 * const some = () => 8 as number | null;
 						 *
-						 * const fallback = () => 22; // mocked
+						 * const fallback = vi.fn(() => 22); // mocked
 						 *
 						 * const a = $(none()).or.else(fallback).value;
 						 * expect(a).toBe(22);
@@ -107,7 +109,7 @@ export interface Optional extends Mixin.HKT {
 						 * expect(b).toBe(8);
 						 *
 						 * expect(fallback).toHaveBeenCalledOnce()
-						 * @from {@link Optional `Optional`}
+						 * ```
 						 */
 						else: (
 							callback: (v: None) => U,
@@ -116,7 +118,10 @@ export interface Optional extends Mixin.HKT {
 					/**
 					 * Assert that value is not `null` or `undefined`
 					 * @param msg Reasoning to attach to the `AssertionError`
+					 * @see `.assert.none()` for the inverse assertion
+					 * @from {@link Optional `Optional`}
 					 * @example
+					 * ```ts
 					 * const array = [1, 2, 3];
 					 * const element: number | undefined = array[1];
 					 *
@@ -126,8 +131,7 @@ export interface Optional extends Mixin.HKT {
 					 * expect(() => {
 					 *  $(array[6]).assert()
 					 * }).toThrow()
-					 * @see `.assert.none()` for the inverse assertion
-					 * @from {@link Optional `Optional`}
+					 * ```
 					 */
 					assert: ((
 						msg?: string,
@@ -135,7 +139,9 @@ export interface Optional extends Mixin.HKT {
 						/**
 						 * Assert that the value is either `null` or `undefined`
 						 * @param msg Reasoning to attach to the `AssertionError`
+						 * @from {@link Optional `Optional`}
 						 * @example
+						 * ```ts
 						 * const array = [1, 2, 3];
 						 * const element: number | undefined = array[5];
 						 *
@@ -145,6 +151,7 @@ export interface Optional extends Mixin.HKT {
 						 * expect(() => {
 						 *  $(array[1]).assert.none()
 						 * }).toThrow()
+						 * ```
 						 */
 						none: (
 							msg?: string,
@@ -170,13 +177,13 @@ export const Optional = Mixin((value, $, fluent) => {
 			},
 		});
 
-		$.assert = () => {
-			return fluent(value);
+		$.assert = (msg?: string) => {
+			assert(false, msg);
 		};
 		assertType($.assert);
 		Object.assign($.assert, {
-			none: (msg?: string) => {
-				assert(false, msg);
+			none: () => {
+				return fluent(value);
 			},
 		});
 	} else {
@@ -195,13 +202,13 @@ export const Optional = Mixin((value, $, fluent) => {
 			},
 		});
 
-		$.assert = (msg?: string) => {
-			assert(false, msg);
+		$.assert = () => {
+			return fluent(value);
 		};
 		assertType($.assert);
 		Object.assign($.assert, {
 			none: (msg?: string) => {
-				return fluent(value);
+				assert(false, msg);
 			},
 		});
 	}
diff --git a/src/registry.ts b/src/registry.ts
index 140465e..2e3b2e5 100644
--- a/src/registry.ts
+++ b/src/registry.ts
@@ -1,6 +1,9 @@
 import { Mixin, type Instansiate } from "./base/mixin";
-import { Async, Base, Optional } from "./mixin";
 import { Array } from "./mixin/array";
+import { AsyncMixin as Async } from "./mixin/awaited";
+import { Base } from "./mixin/base";
+import { Math } from "./mixin/math";
+import { Optional } from "./mixin/optional";
 
 export type Registry = readonly Mixin[];
 
@@ -9,6 +12,7 @@ export const DEFAULT_REGISTRY = [
 	Array,
 	Base,
 	Optional,
+	Math,
 ] as const satisfies Registry;
 export type DefaultRegistry = typeof DEFAULT_REGISTRY;
 
diff --git a/tsconfig.app.json b/tsconfig.app.json
index a4e7f6c..acad168 100644
--- a/tsconfig.app.json
+++ b/tsconfig.app.json
@@ -17,7 +17,7 @@
 
 		/* Linting */
 		"noUnusedLocals": false,
-		"noUncheckedIndexedAccess": true,
+		"noUncheckedIndexedAccess": false,
 		"erasableSyntaxOnly": true,
 	},
 	"include": ["src", "tests"]