functionalscript 0.44.0 → 0.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. package/fjs/asn.1/proof.f.d.mts +5 -0
  2. package/fjs/asn.1/proof.f.mjs +15 -3
  3. package/fjs/asserts/module.f.d.mts +14 -0
  4. package/fjs/asserts/module.f.mjs +20 -0
  5. package/fjs/asserts/proof.f.d.mts +3 -0
  6. package/fjs/asserts/proof.f.mjs +15 -1
  7. package/fjs/basen/base128/proof.f.d.mts +3 -1
  8. package/fjs/basen/base128/proof.f.mjs +3 -1
  9. package/fjs/basen/base64/module.f.mjs +7 -3
  10. package/fjs/basen/base64/proof.f.d.mts +3 -1
  11. package/fjs/basen/base64/proof.f.mjs +7 -4
  12. package/fjs/basen/cbase32/proof.f.d.mts +3 -1
  13. package/fjs/basen/cbase32/proof.f.mjs +3 -1
  14. package/fjs/bnf/data/proof.f.mjs +0 -1
  15. package/fjs/bnf/descent/module.f.d.mts +17 -2
  16. package/fjs/bnf/descent/module.f.mjs +118 -41
  17. package/fjs/bnf/descent/proof.f.d.mts +1 -0
  18. package/fjs/bnf/descent/proof.f.mjs +77 -1
  19. package/fjs/bnf/descent/types.d.ts +12 -4
  20. package/fjs/bnf/ll1/module.f.d.mts +28 -2
  21. package/fjs/bnf/ll1/module.f.mjs +180 -38
  22. package/fjs/bnf/ll1/proof.f.d.mts +2 -0
  23. package/fjs/bnf/ll1/proof.f.mjs +62 -1
  24. package/fjs/bnf/ll1/types.d.ts +14 -8
  25. package/fjs/bnf/module.f.d.mts +15 -6
  26. package/fjs/bnf/module.f.mjs +52 -11
  27. package/fjs/bnf/proof.f.d.mts +2 -0
  28. package/fjs/bnf/proof.f.mjs +79 -3
  29. package/fjs/bnf/token_symbol/module.f.d.mts +4 -3
  30. package/fjs/bnf/token_symbol/module.f.mjs +7 -6
  31. package/fjs/bnf/token_symbol/proof.f.mjs +5 -2
  32. package/fjs/bnf/token_symbol/types.d.ts +2 -2
  33. package/fjs/bnf/types.d.ts +10 -3
  34. package/fjs/cas/cli/proof.f.d.mts +3 -1
  35. package/fjs/cas/cli/proof.f.mjs +3 -1
  36. package/fjs/cas/evo/module.f.d.mts +7 -13
  37. package/fjs/cas/evo/module.f.mjs +103 -96
  38. package/fjs/cas/evo/proof.f.mjs +6 -3
  39. package/fjs/cas/module.f.mjs +96 -109
  40. package/fjs/ci/common/module.f.d.mts +1 -1
  41. package/fjs/ci/common/module.f.mjs +1 -0
  42. package/fjs/ci/config/module.f.d.mts +2 -2
  43. package/fjs/ci/config/module.f.mjs +2 -2
  44. package/fjs/ci/nix/proof.f.d.mts +2 -0
  45. package/fjs/ci/nix/proof.f.mjs +2 -2
  46. package/fjs/ci/proof.f.d.mts +4 -2
  47. package/fjs/ci/proof.f.mjs +4 -3
  48. package/fjs/cli/proof.f.d.mts +4 -2
  49. package/fjs/cli/proof.f.mjs +4 -2
  50. package/fjs/common/monoid/module.f.d.mts +70 -12
  51. package/fjs/common/monoid/module.f.mjs +177 -14
  52. package/fjs/common/monoid/proof.f.d.mts +12 -1
  53. package/fjs/common/monoid/proof.f.mjs +88 -4
  54. package/fjs/common/monoid/types.d.ts +23 -0
  55. package/fjs/crypto/secp/proof.f.d.mts +3 -1
  56. package/fjs/crypto/secp/proof.f.mjs +3 -1
  57. package/fjs/crypto/sha2/proof.f.d.mts +3 -1
  58. package/fjs/crypto/sha2/proof.f.mjs +3 -1
  59. package/fjs/crypto/vdf/module.f.d.mts +23 -4
  60. package/fjs/crypto/vdf/module.f.mjs +6 -4
  61. package/fjs/dev/module.f.d.mts +5 -2
  62. package/fjs/dev/module.f.mjs +5 -4
  63. package/fjs/dev/package_json/module.f.d.mts +7 -0
  64. package/fjs/dev/package_json/module.f.mjs +10 -7
  65. package/fjs/dev/update/module.f.d.mts +3 -0
  66. package/fjs/dev/update/module.f.mjs +3 -2
  67. package/fjs/dev/update/proof.f.d.mts +3 -0
  68. package/fjs/dev/update/proof.f.mjs +1 -2
  69. package/fjs/djs/parser/module.f.d.mts +3 -0
  70. package/fjs/djs/parser/module.f.mjs +18 -0
  71. package/fjs/djs/parser/proof.f.d.mts +3 -0
  72. package/fjs/djs/parser/proof.f.mjs +13 -1
  73. package/fjs/djs/proof.f.d.mts +3 -0
  74. package/fjs/djs/proof.f.mjs +4 -1
  75. package/fjs/djs/serializer/module.f.mjs +5 -4
  76. package/fjs/djs/tokenizer/module.f.mjs +21 -13
  77. package/fjs/djs/tokenizer/proof.f.d.mts +3 -0
  78. package/fjs/djs/tokenizer/proof.f.mjs +14 -2
  79. package/fjs/djs/transpiler/module.f.d.mts +1 -12
  80. package/fjs/djs/transpiler/module.f.mjs +1 -20
  81. package/fjs/djs/transpiler/types.d.ts +25 -0
  82. package/fjs/effects/eff/module.f.d.mts +10 -0
  83. package/fjs/effects/eff/module.f.mjs +4 -2
  84. package/fjs/effects/eff/proof.f.d.mts +3 -0
  85. package/fjs/effects/eff/proof.f.mjs +4 -1
  86. package/fjs/effects/list/module.f.d.mts +10 -2
  87. package/fjs/effects/list/module.f.mjs +4 -2
  88. package/fjs/effects/memory/module.f.d.mts +4 -2
  89. package/fjs/effects/memory/module.f.mjs +4 -3
  90. package/fjs/effects/memory/proof.f.d.mts +4 -0
  91. package/fjs/effects/memory/proof.f.mjs +5 -2
  92. package/fjs/effects/mock/module.f.d.mts +10 -2
  93. package/fjs/effects/mock/module.f.mjs +4 -2
  94. package/fjs/effects/module.d.mts +8 -0
  95. package/fjs/effects/module.f.d.mts +6 -4
  96. package/fjs/effects/module.f.mjs +6 -5
  97. package/fjs/effects/module.mjs +9 -1
  98. package/fjs/effects/node/memory/module.d.mts +3 -0
  99. package/fjs/effects/node/memory/module.mjs +3 -2
  100. package/fjs/effects/node/memory/proof.d.mts +2 -0
  101. package/fjs/effects/node/memory/proof.mjs +2 -1
  102. package/fjs/effects/node/module.d.mts +5 -0
  103. package/fjs/effects/node/module.f.d.mts +17 -12
  104. package/fjs/effects/node/module.f.mjs +6 -12
  105. package/fjs/effects/node/module.mjs +5 -17
  106. package/fjs/effects/node/virtual/module.f.d.mts +6 -3
  107. package/fjs/effects/node/virtual/module.f.mjs +6 -5
  108. package/fjs/effects/node/virtual/proof.f.d.mts +4 -1
  109. package/fjs/effects/node/virtual/proof.f.mjs +13 -1
  110. package/fjs/effects/proof.f.d.mts +3 -0
  111. package/fjs/effects/proof.f.mjs +4 -1
  112. package/fjs/emergent_testing/all.test.d.mts +8 -0
  113. package/fjs/emergent_testing/all.test.mjs +14 -0
  114. package/fjs/emergent_testing/module.f.d.mts +6 -1
  115. package/fjs/emergent_testing/module.f.mjs +40 -66
  116. package/fjs/emergent_testing/proof.f.mjs +5 -5
  117. package/fjs/fsc/bnf.f.d.mts +3 -0
  118. package/fjs/fsc/bnf.f.mjs +4 -1
  119. package/fjs/fsc/json.f.d.mts +3 -0
  120. package/fjs/fsc/json.f.mjs +4 -1
  121. package/fjs/fsc/module.f.d.mts +9 -0
  122. package/fjs/fsc/module.f.mjs +5 -3
  123. package/fjs/fsm/proof.f.d.mts +3 -0
  124. package/fjs/fsm/proof.f.mjs +4 -1
  125. package/fjs/js/tokenizer/module.f.d.mts +7 -0
  126. package/fjs/js/tokenizer/module.f.mjs +19 -55
  127. package/fjs/mcp/module.f.d.mts +36 -1
  128. package/fjs/mcp/module.f.mjs +9 -7
  129. package/fjs/mcp/proof.f.d.mts +11 -1
  130. package/fjs/mcp/proof.f.mjs +11 -18
  131. package/fjs/media/html/module.f.d.mts +12 -0
  132. package/fjs/media/html/module.f.mjs +6 -4
  133. package/fjs/media/html/proof.f.d.mts +3 -0
  134. package/fjs/media/html/proof.f.mjs +4 -1
  135. package/fjs/media/json/parser/module.f.d.mts +1 -1
  136. package/fjs/media/json/parser/module.f.mjs +25 -8
  137. package/fjs/media/json/parser/types.d.ts +5 -0
  138. package/fjs/media/json/rtti/proof.f.d.mts +3 -0
  139. package/fjs/media/json/rtti/proof.f.mjs +3 -3
  140. package/fjs/media/json/schema/module.f.d.mts +61 -27
  141. package/fjs/media/json/schema/module.f.mjs +228 -63
  142. package/fjs/media/json/schema/proof.f.d.mts +41 -0
  143. package/fjs/media/json/schema/proof.f.mjs +219 -7
  144. package/fjs/media/json/serializer/module.f.d.mts +13 -0
  145. package/fjs/media/json/serializer/module.f.mjs +7 -7
  146. package/fjs/media/json/tokenizer/module.f.d.mts +8 -0
  147. package/fjs/media/json/tokenizer/module.f.mjs +24 -5
  148. package/fjs/media/nix/module.f.d.mts +13 -0
  149. package/fjs/media/nix/module.f.mjs +4 -2
  150. package/fjs/media/nix/proof.f.d.mts +3 -0
  151. package/fjs/media/nix/proof.f.mjs +4 -1
  152. package/fjs/media/revision/module.f.d.mts +5 -0
  153. package/fjs/media/revision/module.f.mjs +8 -11
  154. package/fjs/media/revision/proof.f.d.mts +4 -0
  155. package/fjs/media/revision/proof.f.mjs +5 -2
  156. package/fjs/media/type/module.f.d.mts +28 -11
  157. package/fjs/media/type/module.f.mjs +69 -85
  158. package/fjs/media/type/proof.f.d.mts +16 -0
  159. package/fjs/media/type/proof.f.mjs +44 -4
  160. package/fjs/module.d.mts +5 -0
  161. package/fjs/module.f.d.mts +8 -0
  162. package/fjs/module.f.mjs +4 -2
  163. package/fjs/module.mjs +6 -0
  164. package/fjs/path/module.f.d.mts +8 -0
  165. package/fjs/path/module.f.mjs +4 -2
  166. package/fjs/proof.f.d.mts +4 -0
  167. package/fjs/proof.f.mjs +5 -2
  168. package/fjs/protocol/json_rpc/module.f.d.mts +1 -1
  169. package/fjs/protocol/json_rpc/module.f.mjs +7 -4
  170. package/fjs/protocol/json_rpc/proof.f.d.mts +6 -0
  171. package/fjs/protocol/json_rpc/proof.f.mjs +22 -1
  172. package/fjs/protocol/mcp/proof.f.d.mts +4 -0
  173. package/fjs/protocol/mcp/proof.f.mjs +47 -24
  174. package/fjs/protocol/mcp/stdio/module.f.d.mts +2 -4
  175. package/fjs/protocol/mcp/stdio/module.f.mjs +1 -8
  176. package/fjs/protocol/mcp/stdio/proof.f.d.mts +1 -1
  177. package/fjs/protocol/mcp/stdio/proof.f.mjs +1 -1
  178. package/fjs/protocol/mcp/stdio/types.d.ts +14 -0
  179. package/fjs/sul/id/module.f.d.mts +5 -0
  180. package/fjs/sul/id/module.f.mjs +5 -4
  181. package/fjs/sul/level/hash/module.f.d.mts +4 -1
  182. package/fjs/sul/level/hash/module.f.mjs +4 -3
  183. package/fjs/sul/level/hash/proof.f.d.mts +4 -0
  184. package/fjs/sul/level/hash/proof.f.mjs +5 -2
  185. package/fjs/sul/level/literal/module.f.d.mts +4 -1
  186. package/fjs/sul/level/literal/module.f.mjs +4 -3
  187. package/fjs/sul/level/literal/proof.f.d.mts +3 -0
  188. package/fjs/sul/level/literal/proof.f.mjs +4 -1
  189. package/fjs/sul/module.f.d.mts +5 -3
  190. package/fjs/sul/module.f.mjs +5 -4
  191. package/fjs/sul/proof.f.d.mts +4 -0
  192. package/fjs/sul/proof.f.mjs +5 -2
  193. package/fjs/text/ascii/module.f.d.mts +26 -0
  194. package/fjs/text/ascii/module.f.mjs +49 -1
  195. package/fjs/text/ascii/proof.f.d.mts +10 -0
  196. package/fjs/text/ascii/proof.f.mjs +33 -1
  197. package/fjs/text/code_point/module.f.d.mts +21 -3
  198. package/fjs/text/code_point/module.f.mjs +24 -8
  199. package/fjs/text/code_point/proof.f.d.mts +1 -0
  200. package/fjs/text/code_point/proof.f.mjs +28 -0
  201. package/fjs/text/module.f.d.mts +4 -2
  202. package/fjs/text/module.f.mjs +4 -3
  203. package/fjs/text/proof.f.d.mts +3 -0
  204. package/fjs/text/proof.f.mjs +4 -1
  205. package/fjs/text/sgr/module.f.d.mts +4 -1
  206. package/fjs/text/sgr/module.f.mjs +4 -3
  207. package/fjs/text/sgr/proof.f.d.mts +3 -0
  208. package/fjs/text/sgr/proof.f.mjs +4 -1
  209. package/fjs/text/utf16/module.f.d.mts +5 -1
  210. package/fjs/text/utf16/module.f.mjs +31 -33
  211. package/fjs/text/utf16/proof.f.d.mts +3 -1
  212. package/fjs/text/utf16/proof.f.mjs +18 -1
  213. package/fjs/text/utf8/module.f.d.mts +9 -5
  214. package/fjs/text/utf8/module.f.mjs +16 -18
  215. package/fjs/types/array/module.f.d.mts +2 -1
  216. package/fjs/types/array/module.f.mjs +2 -2
  217. package/fjs/types/bigfloat/module.f.d.mts +21 -1
  218. package/fjs/types/bigfloat/module.f.mjs +33 -7
  219. package/fjs/types/bigfloat/proof.f.d.mts +1 -0
  220. package/fjs/types/bigfloat/proof.f.mjs +46 -0
  221. package/fjs/types/bigint/module.f.d.mts +4 -0
  222. package/fjs/types/bigint/module.f.mjs +4 -3
  223. package/fjs/types/bit_vec/module.f.d.mts +10 -14
  224. package/fjs/types/bit_vec/module.f.mjs +61 -71
  225. package/fjs/types/bit_vec/proof.f.d.mts +6 -0
  226. package/fjs/types/bit_vec/proof.f.mjs +29 -3
  227. package/fjs/types/btree/find/module.f.d.mts +5 -1
  228. package/fjs/types/btree/find/module.f.mjs +5 -5
  229. package/fjs/types/btree/find/proof.f.d.mts +5 -1
  230. package/fjs/types/btree/find/proof.f.mjs +5 -3
  231. package/fjs/types/btree/module.f.d.mts +3 -0
  232. package/fjs/types/btree/module.f.mjs +3 -2
  233. package/fjs/types/btree/proof.f.d.mts +5 -1
  234. package/fjs/types/btree/proof.f.mjs +5 -3
  235. package/fjs/types/btree/remove/module.f.d.mts +11 -0
  236. package/fjs/types/btree/remove/module.f.mjs +9 -9
  237. package/fjs/types/btree/remove/proof.f.d.mts +3 -0
  238. package/fjs/types/btree/remove/proof.f.mjs +4 -1
  239. package/fjs/types/btree/set/module.f.d.mts +9 -0
  240. package/fjs/types/btree/set/module.f.mjs +5 -6
  241. package/fjs/types/btree/set/proof.f.d.mts +3 -0
  242. package/fjs/types/btree/set/proof.f.mjs +4 -1
  243. package/fjs/types/btree/types/module.f.d.mts +2 -1
  244. package/fjs/types/btree/types/module.f.mjs +2 -1
  245. package/fjs/types/byte_set/module.f.d.mts +10 -1
  246. package/fjs/types/byte_set/module.f.mjs +5 -3
  247. package/fjs/types/byte_set/proof.f.d.mts +3 -1
  248. package/fjs/types/byte_set/proof.f.mjs +3 -1
  249. package/fjs/types/function/compare/module.f.d.mts +3 -2
  250. package/fjs/types/function/compare/module.f.mjs +3 -2
  251. package/fjs/types/function/module.f.d.mts +8 -1
  252. package/fjs/types/function/module.f.mjs +8 -1
  253. package/fjs/types/function/operator/module.f.d.mts +2 -1
  254. package/fjs/types/function/operator/module.f.mjs +2 -2
  255. package/fjs/types/list/module.f.d.mts +9 -2
  256. package/fjs/types/list/module.f.mjs +5 -3
  257. package/fjs/types/list/proof.f.d.mts +4 -1
  258. package/fjs/types/list/proof.f.mjs +4 -2
  259. package/fjs/types/nibble_set/module.f.d.mts +2 -1
  260. package/fjs/types/nibble_set/module.f.mjs +2 -2
  261. package/fjs/types/nominal/module.f.d.mts +2 -1
  262. package/fjs/types/nominal/module.f.mjs +2 -1
  263. package/fjs/types/nullable/module.f.d.mts +8 -2
  264. package/fjs/types/nullable/module.f.mjs +4 -2
  265. package/fjs/types/number/module.f.d.mts +4 -0
  266. package/fjs/types/number/module.f.mjs +4 -3
  267. package/fjs/types/object/module.f.d.mts +14 -2
  268. package/fjs/types/object/module.f.mjs +15 -6
  269. package/fjs/types/object/proof.f.d.mts +5 -2
  270. package/fjs/types/object/proof.f.mjs +6 -3
  271. package/fjs/types/object/structurally_same/module.f.d.mts +39 -0
  272. package/fjs/types/object/structurally_same/module.f.mjs +59 -0
  273. package/fjs/types/object/structurally_same/proof.f.d.mts +6 -0
  274. package/fjs/types/object/structurally_same/proof.f.mjs +73 -0
  275. package/fjs/types/ordered_map/module.f.d.mts +5 -0
  276. package/fjs/types/ordered_map/module.f.mjs +5 -4
  277. package/fjs/types/ordered_map/proof.f.d.mts +3 -0
  278. package/fjs/types/ordered_map/proof.f.mjs +4 -1
  279. package/fjs/types/patricia_trie/module.f.d.mts +2 -1
  280. package/fjs/types/patricia_trie/module.f.mjs +2 -2
  281. package/fjs/types/patricia_trie/proof.f.d.mts +3 -0
  282. package/fjs/types/patricia_trie/proof.f.mjs +4 -1
  283. package/fjs/types/prime_field/module.f.d.mts +3 -1
  284. package/fjs/types/prime_field/module.f.mjs +3 -2
  285. package/fjs/types/range/module.f.d.mts +2 -1
  286. package/fjs/types/range/module.f.mjs +2 -2
  287. package/fjs/types/range_map/module.f.d.mts +6 -0
  288. package/fjs/types/range_map/module.f.mjs +6 -9
  289. package/fjs/types/range_map/proof.f.d.mts +5 -1
  290. package/fjs/types/range_map/proof.f.mjs +5 -3
  291. package/fjs/types/range_set/module.f.d.mts +5 -0
  292. package/fjs/types/range_set/module.f.mjs +1 -0
  293. package/fjs/types/range_set/proof.f.d.mts +3 -0
  294. package/fjs/types/range_set/proof.f.mjs +4 -1
  295. package/fjs/types/result/module.d.mts +8 -0
  296. package/fjs/types/result/module.f.d.mts +37 -7
  297. package/fjs/types/result/module.f.mjs +38 -8
  298. package/fjs/types/result/module.mjs +9 -1
  299. package/fjs/types/result/proof.f.d.mts +5 -0
  300. package/fjs/types/result/proof.f.mjs +22 -2
  301. package/fjs/types/rtti/common/module.f.d.mts +35 -2
  302. package/fjs/types/rtti/common/module.f.mjs +9 -7
  303. package/fjs/types/rtti/common/proof.f.d.mts +4 -0
  304. package/fjs/types/rtti/common/proof.f.mjs +5 -2
  305. package/fjs/types/rtti/data/module.f.d.mts +120 -0
  306. package/fjs/types/rtti/data/module.f.mjs +1030 -0
  307. package/fjs/types/rtti/data/proof.f.d.mts +75 -0
  308. package/fjs/types/rtti/data/proof.f.mjs +566 -0
  309. package/fjs/types/rtti/data/types.d.ts +83 -0
  310. package/fjs/types/rtti/module.f.d.mts +12 -5
  311. package/fjs/types/rtti/module.f.mjs +7 -5
  312. package/fjs/types/rtti/parse/module.f.d.mts +38 -0
  313. package/fjs/types/rtti/parse/module.f.mjs +9 -7
  314. package/fjs/types/rtti/parse/proof.f.mjs +18 -38
  315. package/fjs/types/rtti/proof.f.d.mts +3 -1
  316. package/fjs/types/rtti/proof.f.mjs +3 -1
  317. package/fjs/types/rtti/ts/module.f.d.mts +68 -9
  318. package/fjs/types/rtti/ts/module.f.mjs +262 -30
  319. package/fjs/types/rtti/ts/proof.f.d.mts +44 -0
  320. package/fjs/types/rtti/ts/proof.f.mjs +152 -4
  321. package/fjs/types/rtti/ts/types.d.ts +11 -0
  322. package/fjs/types/rtti/types.d.ts +40 -0
  323. package/fjs/types/rtti/validate/module.f.d.mts +36 -1
  324. package/fjs/types/rtti/validate/module.f.mjs +6 -4
  325. package/fjs/types/sorted_list/module.f.d.mts +4 -1
  326. package/fjs/types/sorted_list/module.f.mjs +21 -12
  327. package/fjs/types/sorted_list/proof.f.d.mts +3 -1
  328. package/fjs/types/sorted_list/proof.f.mjs +3 -1
  329. package/fjs/types/sorted_set/module.f.d.mts +31 -1
  330. package/fjs/types/sorted_set/module.f.mjs +4 -2
  331. package/fjs/types/sorted_set/proof.f.d.mts +3 -1
  332. package/fjs/types/sorted_set/proof.f.mjs +3 -1
  333. package/fjs/types/string/module.f.d.mts +4 -0
  334. package/fjs/types/string/module.f.mjs +4 -3
  335. package/fjs/types/string_set/module.f.d.mts +3 -1
  336. package/fjs/types/string_set/module.f.mjs +3 -2
  337. package/fjs/types/ts/module.f.d.mts +2 -0
  338. package/fjs/types/ts/module.f.mjs +3 -3
  339. package/fjs/types/ts/proof.f.d.mts +1 -0
  340. package/fjs/types/ts/proof.f.mjs +5 -0
  341. package/fjs/types/ts/types.d.ts +6 -1
  342. package/fjs/types/uint8array/module.f.d.mts +13 -2
  343. package/fjs/types/uint8array/module.f.mjs +20 -15
  344. package/fjs/website/module.f.d.mts +3 -0
  345. package/fjs/website/module.f.mjs +3 -2
  346. package/package.json +3 -3
  347. package/fjs/asn.1/types.js +0 -6
  348. package/fjs/asserts/types.js +0 -6
  349. package/fjs/basen/types.js +0 -6
  350. package/fjs/bnf/data/types.js +0 -6
  351. package/fjs/bnf/descent/types.js +0 -6
  352. package/fjs/bnf/ll1/types.js +0 -6
  353. package/fjs/bnf/token_symbol/types.js +0 -6
  354. package/fjs/bnf/types.js +0 -6
  355. package/fjs/cas/evo/types.js +0 -7
  356. package/fjs/cas/types.js +0 -6
  357. package/fjs/ci/common/types.js +0 -1
  358. package/fjs/ci/nix/types.js +0 -6
  359. package/fjs/ci/types.js +0 -6
  360. package/fjs/cli/types.js +0 -6
  361. package/fjs/common/monoid/types.js +0 -6
  362. package/fjs/crypto/pow/types.js +0 -6
  363. package/fjs/crypto/secp/types.js +0 -6
  364. package/fjs/crypto/sha2/types.js +0 -6
  365. package/fjs/crypto/sign/types.js +0 -6
  366. package/fjs/crypto/vdf/types.js +0 -6
  367. package/fjs/dev/types.js +0 -6
  368. package/fjs/djs/ast/types.js +0 -8
  369. package/fjs/djs/parser/types.js +0 -7
  370. package/fjs/djs/tokenizer/types.js +0 -7
  371. package/fjs/djs/types.js +0 -7
  372. package/fjs/effects/eff/types.js +0 -6
  373. package/fjs/effects/list/types.js +0 -6
  374. package/fjs/effects/memory/types.js +0 -6
  375. package/fjs/effects/mock/types.js +0 -6
  376. package/fjs/effects/node/types.js +0 -6
  377. package/fjs/effects/node/virtual/types.js +0 -7
  378. package/fjs/effects/types.js +0 -6
  379. package/fjs/emergent_testing/all.test.d.ts +0 -1
  380. package/fjs/emergent_testing/all.test.js +0 -5
  381. package/fjs/emergent_testing/scenarios/all.d.ts +0 -1
  382. package/fjs/emergent_testing/scenarios/all.js +0 -1
  383. package/fjs/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -6
  384. package/fjs/emergent_testing/scenarios/async-subtests.fail.js +0 -9
  385. package/fjs/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -6
  386. package/fjs/emergent_testing/scenarios/async-subtests.pass.js +0 -9
  387. package/fjs/emergent_testing/scenarios/async.fail.d.ts +0 -3
  388. package/fjs/emergent_testing/scenarios/async.fail.js +0 -6
  389. package/fjs/emergent_testing/scenarios/async.pass.d.ts +0 -3
  390. package/fjs/emergent_testing/scenarios/async.pass.js +0 -5
  391. package/fjs/emergent_testing/scenarios/fail.fail.d.ts +0 -3
  392. package/fjs/emergent_testing/scenarios/fail.fail.js +0 -3
  393. package/fjs/emergent_testing/scenarios/return-value.pass.d.ts +0 -3
  394. package/fjs/emergent_testing/scenarios/return-value.pass.js +0 -4
  395. package/fjs/emergent_testing/scenarios/thenable.pass.d.ts +0 -5
  396. package/fjs/emergent_testing/scenarios/thenable.pass.js +0 -11
  397. package/fjs/emergent_testing/scenarios/thenable2.pass.d.ts +0 -5
  398. package/fjs/emergent_testing/scenarios/thenable2.pass.js +0 -3
  399. package/fjs/emergent_testing/scenarios/throw.pass.d.ts +0 -5
  400. package/fjs/emergent_testing/scenarios/throw.pass.js +0 -3
  401. package/fjs/emergent_testing/types.js +0 -6
  402. package/fjs/js/tokenizer/types.js +0 -6
  403. package/fjs/media/html/types.js +0 -6
  404. package/fjs/media/json/parser/types.js +0 -6
  405. package/fjs/media/json/tokenizer/types.js +0 -6
  406. package/fjs/media/json/types.js +0 -13
  407. package/fjs/media/nix/types.js +0 -6
  408. package/fjs/media/revision/types.js +0 -8
  409. package/fjs/media/type/types.js +0 -6
  410. package/fjs/media/types.js +0 -7
  411. package/fjs/nanvm/types.js +0 -11
  412. package/fjs/protocol/json_rpc/types.js +0 -8
  413. package/fjs/protocol/mcp/types.js +0 -8
  414. package/fjs/sul/id/types.js +0 -6
  415. package/fjs/sul/level/hash/types.js +0 -6
  416. package/fjs/sul/level/literal/types.js +0 -6
  417. package/fjs/sul/types.js +0 -6
  418. package/fjs/text/sgr/types.js +0 -6
  419. package/fjs/text/types.js +0 -6
  420. package/fjs/text/utf16/types.js +0 -6
  421. package/fjs/text/utf8/types.js +0 -6
  422. package/fjs/types/array/types.js +0 -6
  423. package/fjs/types/bigfloat/types.js +0 -6
  424. package/fjs/types/bigint/types.js +0 -6
  425. package/fjs/types/bit_vec/types.js +0 -6
  426. package/fjs/types/btree/find/types.js +0 -6
  427. package/fjs/types/btree/types/types.js +0 -6
  428. package/fjs/types/byte_set/types.js +0 -6
  429. package/fjs/types/function/compare/types.js +0 -6
  430. package/fjs/types/function/operator/types.js +0 -6
  431. package/fjs/types/function/types.js +0 -6
  432. package/fjs/types/list/types.js +0 -6
  433. package/fjs/types/nibble_set/types.js +0 -6
  434. package/fjs/types/nominal/types.js +0 -6
  435. package/fjs/types/nullable/types.js +0 -6
  436. package/fjs/types/object/types.js +0 -8
  437. package/fjs/types/option/types.js +0 -6
  438. package/fjs/types/ordered_map/types.js +0 -6
  439. package/fjs/types/patricia_trie/types.js +0 -6
  440. package/fjs/types/phantom/types.js +0 -11
  441. package/fjs/types/prime_field/types.js +0 -6
  442. package/fjs/types/range/types.js +0 -6
  443. package/fjs/types/range_map/types.js +0 -6
  444. package/fjs/types/result/types.js +0 -6
  445. package/fjs/types/rtti/common/types.js +0 -1
  446. package/fjs/types/rtti/parse/types.js +0 -1
  447. package/fjs/types/rtti/ts/types.js +0 -1
  448. package/fjs/types/rtti/types.js +0 -1
  449. package/fjs/types/rtti/validate/types.js +0 -1
  450. package/fjs/types/sorted_list/types.js +0 -6
  451. package/fjs/types/sorted_set/types.js +0 -6
  452. package/fjs/types/string_set/types.js +0 -6
  453. package/fjs/types/ts/types.js +0 -8
@@ -4,12 +4,14 @@
4
4
  * strings and MSB-first UTF-8 bit vectors.
5
5
  *
6
6
  * @module
7
+ *
8
+ * @import { List } from '../types/list/types.ts'
9
+ * @import { Nullable } from '../types/nullable/types.ts'
10
+ * @import { Block, Item, Utf8 } from './types.ts'
7
11
  */
8
12
  import type { List } from '../types/list/types.ts';
9
13
  import type { Nullable } from '../types/nullable/types.ts';
10
14
  import type { Block, Utf8 } from './types.ts';
11
- /** @import { Nullable } from '../types/nullable/types.ts' */
12
- /** @import { Block, Item, Utf8 } from './types.ts' */
13
15
  /** @type {(indent: string) => (text: Block) => List<string>} */
14
16
  export declare const flat: (indent: string) => (text: Block) => List<string>;
15
17
  /**
@@ -4,16 +4,17 @@
4
4
  * strings and MSB-first UTF-8 bit vectors.
5
5
  *
6
6
  * @module
7
+ *
8
+ * @import { List } from '../types/list/types.ts'
9
+ * @import { Nullable } from '../types/nullable/types.ts'
10
+ * @import { Block, Item, Utf8 } from './types.ts'
7
11
  */
8
12
 
9
13
  import { msb, tryU8ListToVec, u8List } from '../types/bit_vec/module.f.mjs'
10
14
  import { flatMap } from '../types/list/module.f.mjs'
11
- /** @import { List } from '../types/list/types.ts' */
12
15
  import { fromCodePointList, toCodePointList } from './utf8/module.f.mjs'
13
16
  import { stringToCodePointList, codePointListToString } from './utf16/module.f.mjs'
14
17
  import { mapUnwrap } from '../types/nullable/module.f.mjs'
15
- /** @import { Nullable } from '../types/nullable/types.ts' */
16
- /** @import { Block, Item, Utf8 } from './types.ts' */
17
18
 
18
19
  /** @type {(indent: string) => (text: Block) => List<string>} */
19
20
  export const flat = indent => {
@@ -1,3 +1,6 @@
1
+ /**
2
+ * @import { Block } from './types.ts'
3
+ */
1
4
  export declare const proof: {
2
5
  block: () => void;
3
6
  encoding: () => void;
@@ -1,5 +1,8 @@
1
+ /**
2
+ * @import { Block } from './types.ts'
3
+ */
4
+
1
5
  import { assertEq, assertNotNullish } from '../asserts/module.f.mjs'
2
- /** @import { Block } from './types.ts' */
3
6
  import { flat, utf8, utf8ToString, tryUtf8 } from './module.f.mjs'
4
7
  import { join } from '../types/string/module.f.mjs'
5
8
  import { empty, maxLengthBytes } from '../types/bit_vec/module.f.mjs'
@@ -5,11 +5,14 @@
5
5
  * See `./types.ts` for the type-level API.
6
6
  *
7
7
  * @module
8
+ *
9
+ * @import { Write, WriteConsoles, NodeProgramOptions } from '../../effects/node/types.ts'
10
+ * @import { Effect } from '../../effects/types.ts'
11
+ * @import { Stdout, WriteText, CsiConsole } from './types.ts'
8
12
  */
9
13
  import type { Write, WriteConsoles, NodeProgramOptions } from '../../effects/node/types.ts';
10
14
  import type { Effect } from '../../effects/types.ts';
11
15
  import type { Stdout, WriteText } from './types.ts';
12
- /** @import { Stdout, WriteText, CsiConsole } from './types.ts' */
13
16
  /** @type {string} */
14
17
  export declare const backspace: string;
15
18
  export type _End = 'm';
@@ -5,16 +5,17 @@
5
5
  * See `./types.ts` for the type-level API.
6
6
  *
7
7
  * @module
8
+ *
9
+ * @import { Write, WriteConsoles, NodeProgramOptions } from '../../effects/node/types.ts'
10
+ * @import { Effect } from '../../effects/types.ts'
11
+ * @import { Stdout, WriteText, CsiConsole } from './types.ts'
8
12
  */
9
13
 
10
14
  // C0 control codes
11
15
  // https://en.wikipedia.org/wiki/ANSI_escape_code#C0_control_codes
12
16
 
13
17
  import { write } from '../../effects/node/module.f.mjs'
14
- /** @import { Write, WriteConsoles, NodeProgramOptions } from '../../effects/node/types.ts' */
15
- /** @import { Effect } from '../../effects/types.ts' */
16
18
  import { utf8 } from "../module.f.mjs"
17
- /** @import { Stdout, WriteText, CsiConsole } from './types.ts' */
18
19
 
19
20
  /** @type {string} */
20
21
  export const backspace = '\x08'
@@ -1 +1,4 @@
1
+ /**
2
+ * @import { NodeProgramOptions } from '../../effects/node/types.ts'
3
+ */
1
4
  export declare const proof: (() => void)[];
@@ -1,6 +1,9 @@
1
+ /**
2
+ * @import { NodeProgramOptions } from '../../effects/node/types.ts'
3
+ */
4
+
1
5
  import { fgRed, reset, createConsoleText, backspace, csiWrite } from './module.f.mjs'
2
6
  import { virtual, emptyState, defaultNodeProgramOptions } from '../../effects/node/virtual/module.f.mjs'
3
- /** @import { NodeProgramOptions } from '../../effects/node/types.ts' */
4
7
  import { assert, assertEq } from '../../asserts/module.f.mjs'
5
8
 
6
9
  /** @type {(isTTY: boolean) => NodeProgramOptions} */
@@ -4,10 +4,14 @@
4
4
  * `stateScan` operations.
5
5
  *
6
6
  * @module
7
+ *
8
+ * @import { List, Result, Thunk } from '../../types/list/types.ts'
9
+ * @import { StateScan } from '../../types/function/operator/types.ts'
10
+ * @import { CodePoint, U16 } from './types.ts'
7
11
  */
8
12
  import type { List, Thunk } from '../../types/list/types.ts';
9
- export type _Utf16State = number | null;
10
13
  import type { CodePoint, U16 } from './types.ts';
14
+ export type _Utf16State = number | null;
11
15
  /**
12
16
  * Converts a UTF-16 sequence to its corresponding Unicode code points.
13
17
  *
@@ -4,6 +4,10 @@
4
4
  * `stateScan` operations.
5
5
  *
6
6
  * @module
7
+ *
8
+ * @import { List, Result, Thunk } from '../../types/list/types.ts'
9
+ * @import { StateScan } from '../../types/function/operator/types.ts'
10
+ * @import { CodePoint, U16 } from './types.ts'
7
11
  */
8
12
 
9
13
  import {
@@ -12,17 +16,14 @@ import {
12
16
  flatMap,
13
17
  empty,
14
18
  } from '../../types/list/module.f.mjs'
15
- /** @import { List, Result, Thunk } from '../../types/list/types.ts' */
16
19
 
17
20
  import { concat } from '../../types/function/operator/module.f.mjs'
18
- /** @import { StateScan } from '../../types/function/operator/types.ts' */
19
-
20
21
  import { contains } from '../../types/range/module.f.mjs'
21
-
22
22
  import { fn } from '../../types/function/module.f.mjs'
23
23
 
24
24
  import {
25
25
  decoder,
26
+ eofFlush,
26
27
  errorMask,
27
28
  isBmpCodePoint,
28
29
  isHighSurrogate,
@@ -37,8 +38,6 @@ import {
37
38
  * @typedef {number | null} _Utf16State
38
39
  */
39
40
 
40
- /** @import { CodePoint, U16 } from './types.ts' */
41
-
42
41
  /**
43
42
  * The BMP / surrogate / supplementary-plane predicates used below live in
44
43
  * `code_point`, the shared Unicode contract; see that module for their ranges.
@@ -85,7 +84,6 @@ const codePointToUtf16 = codePoint => {
85
84
  return [codePoint & 0xffff]
86
85
  }
87
86
 
88
-
89
87
  /**
90
88
  * Converts a UTF-16 sequence to its corresponding Unicode code points.
91
89
  *
@@ -119,6 +117,8 @@ const codePointToUtf16 = codePoint => {
119
117
  export const fromCodePointList
120
118
  = flatMap(codePointToUtf16)
121
119
 
120
+ const isInU16Range = contains(0x0000, 0xFFFF)
121
+
122
122
  /**
123
123
  * Validates whether a given 16-bit unsigned integer (U16) falls within the valid range for UTF-16 code units.
124
124
  *
@@ -134,10 +134,14 @@ export const fromCodePointList
134
134
  * const edgeCaseHigh = u16(0xFFFF) // true: Maximum valid value for UTF-16
135
135
  * ```
136
136
  *
137
+ * `U16` is just `number`, so this also rejects non-integers — `isBmpCodePoint`,
138
+ * `isHighSurrogate`, and `isLowSurrogate` only partition the *integers* in
139
+ * `0x0000`–`0xFFFF` with no gap; a fractional value would fall between two of
140
+ * those ranges and be misclassified downstream if it were let through here.
141
+ *
137
142
  * @type {(i: U16) => boolean}
138
143
  */
139
- const u16 = contains(0x0000, 0xFFFF)
140
-
144
+ const u16 = i => Number.isInteger(i) && isInU16Range(i)
141
145
 
142
146
  /**
143
147
  * A stateful operation that converts a UTF-16 word (U16) to a list of Unicode code points (CodePoint),
@@ -190,39 +194,33 @@ const utf16ByteToCodePointOp = (word, state) => {
190
194
  const low = word - 0xdc00
191
195
  return [[(high << 10) + low + 0x10000], null]
192
196
  }
197
+ // `isLowSurrogate`, `isBmpCodePoint`, and `isHighSurrogate` partition the
198
+ // full `u16` range with no gap, and `isLowSurrogate` was already ruled out
199
+ // above, so a non-BMP `word` here is always a high surrogate.
193
200
  if (isBmpCodePoint(word)) { return [[state | errorMask, word], null] }
194
- if (isHighSurrogate(word)) { return [[state | errorMask], word] }
195
- return [[state | errorMask, word | errorMask], null]
201
+ return [[state | errorMask], word]
196
202
  }
197
203
 
204
+ /**
205
+ * Converts a pending UTF-16 decoding state — an unpaired high surrogate
206
+ * (0xD800–0xDBFF) left from an earlier input — to an error code.
207
+ *
208
+ * @type {(state: number) => CodePoint}
209
+ */
210
+ const utf16StateToError = state => state | errorMask
198
211
 
199
212
  /**
200
213
  * Handles the EOF (end-of-file) condition during UTF-16 decoding.
201
214
  *
202
- * If there is no pending state (`state === null`), it simply returns an empty list
203
- * of code points, indicating no further input to process. If there is a pending state,
204
- * it is treated as an unpaired surrogate, and the `errorMask` is applied to flag
205
- * the invalid sequence.
206
- *
207
- * @param {_Utf16State} state - The current UTF-16 decoding state. This can be:
208
- * - `null`: No pending surrogate to process.
209
- * - A high surrogate (0xD800–0xDBFF) left from an earlier input, waiting for a low surrogate.
210
- * @returns {readonly[List<CodePoint>, _Utf16State]} A tuple:
211
- * - The first element is a list of code points. If there’s a pending state, it is returned
212
- * with the `errorMask` applied.
213
- * - The second element is the next state, which will always be `null` because EOF means no
214
- * further processing.
215
- *
216
- * @example
215
+ * If there is no pending state (`state === null`), it returns an empty list of
216
+ * code points, indicating no further input to process. If there is a pending
217
+ * state, it is treated as an unpaired surrogate and the `errorMask` is applied
218
+ * to flag the invalid sequence. The flush itself is `eofFlush` from
219
+ * `code_point`, shared with UTF-8.
217
220
  *
218
- * ```js
219
- * const eofState = utf16EofToCodePointOp(0xD800) // Unpaired high surrogate
220
- * const validState = utf16EofToCodePointOp(null) // No pending state
221
- * ```
221
+ * @type {(state: _Utf16State) => readonly[List<CodePoint>, _Utf16State]}
222
222
  */
223
- const utf16EofToCodePointOp = state =>
224
- [state === null ? empty : [state | errorMask], null]
225
-
223
+ const utf16EofToCodePointOp = eofFlush(utf16StateToError)
226
224
 
227
225
  /**
228
226
  * Converts a list of UTF-16 code units to a list of Unicode code points (CodePoint).
@@ -1,4 +1,6 @@
1
- /** @import { Unknown } from '../../media/json/types.ts' */
1
+ /**
2
+ * @import { Unknown } from '../../media/json/types.ts'
3
+ */
2
4
  export declare const proof: {
3
5
  toCodePointList: (() => void)[];
4
6
  fromCodePointList: (() => void)[];
@@ -1,4 +1,6 @@
1
- /** @import { Unknown } from '../../media/json/types.ts' */
1
+ /**
2
+ * @import { Unknown } from '../../media/json/types.ts'
3
+ */
2
4
 
3
5
  import {
4
6
  toCodePointList,
@@ -51,6 +53,21 @@ export const proof = {
51
53
  () => {
52
54
  const result = stringify(toArray(toCodePointList([56320, 0])))
53
55
  assertEq(result, '[-2147427328,0]')
56
+ },
57
+ // `U16` is just `number`, so a non-integer in [0x0000, 0xFFFF] is a
58
+ // possible (if malformed) input. It must be rejected as invalid, not
59
+ // misclassified by the surrogate/BMP range checks, which only
60
+ // partition the integers in that range.
61
+ () => {
62
+ const result = stringify(toArray(toCodePointList([56319.5])))
63
+ assertEq(result, '[4294967295]')
64
+ },
65
+ // A non-integer word doesn't disturb a pending high surrogate: it is
66
+ // reported invalid on its own, and the surrogate is still flagged
67
+ // unpaired at EOF.
68
+ () => {
69
+ const result = stringify(toArray(toCodePointList([55296, 56319.5])))
70
+ assertEq(result, '[4294967295,-2147428352]')
54
71
  }
55
72
  ],
56
73
  fromCodePointList: [
@@ -2,6 +2,11 @@
2
2
  * UTF-8 byte-level encoding and decoding utilities for FunctionalScript streams.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { List, Thunk } from '../../types/list/types.ts'
7
+ * @import { StateScan } from '../../types/function/operator/types.ts'
8
+ * @import { Vec } from '../../types/bit_vec/types.ts'
9
+ * @import { ByteOrEof, I32, U8, Utf8NonEmptyState, Utf8State, } from './types.ts'
5
10
  */
6
11
  import type { List, Thunk } from '../../types/list/types.ts';
7
12
  import type { StateScan } from '../../types/function/operator/types.ts';
@@ -42,12 +47,11 @@ export declare const utf8StateToError: (state: Utf8NonEmptyState) => I32;
42
47
  */
43
48
  export declare const utf8ByteToCodePointOp: StateScan<number, Utf8State, readonly I32[]>;
44
49
  /**
45
- * Handles the end-of-file (EOF) case for UTF-8 decoding.
50
+ * Handles the end-of-file (EOF) case for UTF-8 decoding: a leftover incomplete
51
+ * sequence is flushed as a single error code and the state resets to `null`.
52
+ * The flush itself is `eofFlush` from `code_point`, shared with UTF-16.
46
53
  *
47
- * @param {Utf8State} state The current UTF-8 decoding state.
48
- * @returns {readonly [List<I32>, Utf8State]} A tuple containing:
49
- * - A list of decoded Unicode code points or error codes.
50
- * - The reset UTF-8 state (`null`).
54
+ * @type {(state: Utf8State) => readonly [List<I32>, Utf8State]}
51
55
  */
52
56
  export declare const utf8EofToCodePointOp: (state: Utf8State) => readonly [List<I32>, Utf8State];
53
57
  /**
@@ -2,20 +2,22 @@
2
2
  * UTF-8 byte-level encoding and decoding utilities for FunctionalScript streams.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { List, Thunk } from '../../types/list/types.ts'
7
+ * @import { StateScan } from '../../types/function/operator/types.ts'
8
+ * @import { Vec } from '../../types/bit_vec/types.ts'
9
+ * @import { ByteOrEof, I32, U8, Utf8NonEmptyState, Utf8State, } from './types.ts'
5
10
  */
6
11
 
7
12
  import { flatMap, toArray } from '../../types/list/module.f.mjs'
8
- /** @import { List, Thunk } from '../../types/list/types.ts' */
9
- /** @import { StateScan } from '../../types/function/operator/types.ts' */
10
- import { decoder, errorMask, isValidCodePoint } from '../code_point/module.f.mjs'
13
+ import {
14
+ decoder,
15
+ eofFlush,
16
+ errorMask,
17
+ isValidCodePoint,
18
+ } from '../code_point/module.f.mjs'
11
19
  import { msb, u8List, length } from '../../types/bit_vec/module.f.mjs'
12
- /** @import { Vec } from '../../types/bit_vec/types.ts' */
13
20
  import { codePointListToString } from '../utf16/module.f.mjs'
14
- /**
15
- * @import {
16
- * ByteOrEof, I32, U8, Utf8NonEmptyState, Utf8State,
17
- * } from './types.ts'
18
- */
19
21
 
20
22
  /**
21
23
  * UTF-8 byte-format constants. Each byte kind is defined by a tag — the fixed
@@ -240,17 +242,13 @@ export const utf8ByteToCodePointOp = (byte, state) => {
240
242
  }
241
243
 
242
244
  /**
243
- * Handles the end-of-file (EOF) case for UTF-8 decoding.
245
+ * Handles the end-of-file (EOF) case for UTF-8 decoding: a leftover incomplete
246
+ * sequence is flushed as a single error code and the state resets to `null`.
247
+ * The flush itself is `eofFlush` from `code_point`, shared with UTF-16.
244
248
  *
245
- * @param {Utf8State} state The current UTF-8 decoding state.
246
- * @returns {readonly [List<I32>, Utf8State]} A tuple containing:
247
- * - A list of decoded Unicode code points or error codes.
248
- * - The reset UTF-8 state (`null`).
249
+ * @type {(state: Utf8State) => readonly [List<I32>, Utf8State]}
249
250
  */
250
- export const utf8EofToCodePointOp = state => [
251
- state === null ? null : [utf8StateToError(state)],
252
- null,
253
- ]
251
+ export const utf8EofToCodePointOp = eofFlush(utf8StateToError)
254
252
 
255
253
  /**
256
254
  * Converts a list of UTF-8 bytes into a list of Unicode code points.
@@ -2,9 +2,10 @@
2
2
  * JavaScript immutable arrays.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Tuple } from './types.ts'
5
7
  */
6
8
  import type { Tuple } from './types.ts';
7
- /** @import { Tuple } from './types.ts' */
8
9
  /**
9
10
  * @type {(value: unknown) => value is readonly unknown[]}
10
11
  */
@@ -2,12 +2,12 @@
2
2
  * JavaScript immutable arrays.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Tuple } from './types.ts'
5
7
  */
6
8
 
7
9
  import { fromUndefined, map } from '../nullable/module.f.mjs'
8
10
 
9
- /** @import { Tuple } from './types.ts' */
10
-
11
11
  /**
12
12
  * @type {(value: unknown) => value is readonly unknown[]}
13
13
  */
@@ -2,12 +2,32 @@
2
2
  * Big-float helpers built from bigint mantissa and exponent parts.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { BigFloat } from './types.ts'
5
7
  */
6
8
  import type { BigFloat } from './types.ts';
7
9
  export type _BigFloatWithRemainder = readonly [BigFloat, bigint];
8
10
  /** @type {(_: BigFloat) => (mul: bigint) => BigFloat} */
9
11
  export declare const multiply: (_: BigFloat) => (mul: bigint) => BigFloat;
10
- /** @type {(dec: BigFloat) => BigFloat} */
12
+ /**
13
+ * Converts a decimal big-float `m * 10^e` into the nearest binary big-float,
14
+ * rounding ties to even.
15
+ *
16
+ * A zero input returns `[0n, 0]`; every other input returns a mantissa of
17
+ * exactly 53 significant bits, `2^52 <= abs(m) < 2^53`. The upper bound holds
18
+ * even when rounding carries out of the top bit.
19
+ *
20
+ * The **exponent is unbounded**: this is the correctly-rounded 53-bit value,
21
+ * not a `number`. Nothing here knows binary64's exponent range, so a result
22
+ * is neither turned into an infinity when it is too large for a `double` nor
23
+ * cut down to the fewer-than-53 bits a subnormal actually carries. A consumer
24
+ * that rounds one of these results onto the subnormal grid therefore rounds
25
+ * twice and can land an ulp away from the correctly-rounded `double`: reaching
26
+ * the subnormal range needs a single rounding to a precision chosen from the
27
+ * target exponent, which this function does not offer yet.
28
+ *
29
+ * @type {(dec: BigFloat) => BigFloat}
30
+ */
11
31
  export declare const decToBin: (dec: BigFloat) => BigFloat;
12
32
  export declare const proof: {
13
33
  normalizeMantissaZero: () => void;
@@ -2,10 +2,11 @@
2
2
  * Big-float helpers built from bigint mantissa and exponent parts.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { BigFloat } from './types.ts'
5
7
  */
6
8
 
7
9
  import { abs, sign } from '../bigint/module.f.mjs'
8
- /** @import { BigFloat } from './types.ts' */
9
10
 
10
11
  /** @typedef {readonly [BigFloat, bigint]} _BigFloatWithRemainder */
11
12
 
@@ -61,6 +62,16 @@ const divide = ([m, e]) => div => [[m / div, e], m % div]
61
62
  */
62
63
  const withSign = (m, e) => f => multiply(f([abs(m), e]))(BigInt(sign(m)))
63
64
 
65
+ /**
66
+ * Re-normalizes a magnitude that rounding carried out of 53 bits: rounding
67
+ * `2^53 - 1` up yields exactly `2^53`, one bit wider than `round53` promises.
68
+ * The bit shifted out is always 0 there, so the value is unchanged and no
69
+ * second rounding decision is needed.
70
+ *
71
+ * @type {(magnitude: BigFloat) => BigFloat}
72
+ */
73
+ const renormalize53 = ([m, e]) => m === twoPow53 ? [m >> 1n, e + 1] : [m, e]
74
+
64
75
  /** @type {(_: _BigFloatWithRemainder) => BigFloat} */
65
76
  const round53 = ([[m, e], r]) =>
66
77
  withSign(m, e)(([mAbs]) => {
@@ -68,14 +79,29 @@ const round53 = ([[m, e], r]) =>
68
79
  const o54 = m54 & 1n
69
80
  const m53 = m54 >> 1n
70
81
  const e53 = e54 + 1
71
- if (o54 === 1n && r === 0n && mAbs === m54 >> BigInt(e - e54)) {
72
- const odd = m53 & 1n
73
- return [m53 + odd, e53]
74
- }
75
- return [m53 + o54, e53]
82
+ const tie = o54 === 1n && r === 0n && mAbs === m54 >> BigInt(e - e54)
83
+ return renormalize53([m53 + (tie ? m53 & 1n : o54), e53])
76
84
  })
77
85
 
78
- /** @type {(dec: BigFloat) => BigFloat} */
86
+ /**
87
+ * Converts a decimal big-float `m * 10^e` into the nearest binary big-float,
88
+ * rounding ties to even.
89
+ *
90
+ * A zero input returns `[0n, 0]`; every other input returns a mantissa of
91
+ * exactly 53 significant bits, `2^52 <= abs(m) < 2^53`. The upper bound holds
92
+ * even when rounding carries out of the top bit.
93
+ *
94
+ * The **exponent is unbounded**: this is the correctly-rounded 53-bit value,
95
+ * not a `number`. Nothing here knows binary64's exponent range, so a result
96
+ * is neither turned into an infinity when it is too large for a `double` nor
97
+ * cut down to the fewer-than-53 bits a subnormal actually carries. A consumer
98
+ * that rounds one of these results onto the subnormal grid therefore rounds
99
+ * twice and can land an ulp away from the correctly-rounded `double`: reaching
100
+ * the subnormal range needs a single rounding to a precision chosen from the
101
+ * target exponent, which this function does not offer yet.
102
+ *
103
+ * @type {(dec: BigFloat) => BigFloat}
104
+ */
79
105
  export const decToBin = dec => {
80
106
  if (dec[0] === 0n) {
81
107
  return [0n, 0]
@@ -2,4 +2,5 @@ export declare const proof: {
2
2
  decToBin: (() => void)[];
3
3
  roundingPositive: (() => void)[];
4
4
  roundingNegative: (() => void)[];
5
+ roundingCarry: (() => void)[];
5
6
  };
@@ -1,5 +1,21 @@
1
1
  import { decToBin } from './module.f.mjs'
2
2
  import { assertEq } from '../../asserts/module.f.mjs'
3
+ import { bitLength } from '../bigint/module.f.mjs'
4
+
5
+ /**
6
+ * Checks `decToBin`'s postcondition on a non-zero result: the mantissa holds
7
+ * exactly 53 significant bits, and `m * 2^e` is the value it should be.
8
+ * `bitLength` measures the magnitude, so a negative mantissa is checked as
9
+ * strictly as a positive one. The value is recovered with a shift, so every
10
+ * `dec` passed here must round to a whole number (a non-negative `e`).
11
+ *
12
+ * @type {(dec: readonly [bigint, number]) => (value: bigint) => void}
13
+ */
14
+ const assertRounded = dec => value => {
15
+ const [m, e] = decToBin(dec)
16
+ assertEq(bitLength(m), 53n, m.toString(2))
17
+ assertEq(m << BigInt(e), value, m.toString(2))
18
+ }
3
19
 
4
20
  export const proof = {
5
21
  decToBin: [
@@ -214,5 +230,35 @@ export const proof = {
214
230
  assertEq(result[0], -0b1_1001_1001_1001_1001_1001_1001_1001_1001_1001_1001_1001_1001_1100n, result[0].toString(2))
215
231
  assertEq(result[1], 2)
216
232
  }
233
+ ],
234
+ // Rounding up a mantissa of all ones carries into a 54th bit; the result
235
+ // has to come back as 53 bits without changing the value.
236
+ roundingCarry: [
237
+ () => {
238
+ // 54 ones: an exact tie (nothing below the dropped bit, remainder
239
+ // 0) whose round-to-even goes up because 2^53 - 1 is odd.
240
+ assertRounded([0b11_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111n, 0])(
241
+ 0b100_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000n) // 2^54
242
+ },
243
+ () => {
244
+ assertRounded([-0b11_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111n, 0])(
245
+ -0b100_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000n) // -2^54
246
+ },
247
+ () => {
248
+ // 55 ones: not a tie — the dropped bits are 11 — so the carry comes
249
+ // from the plain round-up path instead.
250
+ assertRounded([0b111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111n, 0])(
251
+ 0b1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000n) // 2^55
252
+ },
253
+ () => {
254
+ assertRounded([-0b111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111n, 0])(
255
+ -0b1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000n) // -2^55
256
+ },
257
+ () => {
258
+ // A neighbour that doesn't carry: also a tie, but 2^53 - 2 is even,
259
+ // so round-to-even goes down and the mantissa stays 53 bits wide.
260
+ assertRounded([0b11_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1101n, 0])(
261
+ 0b11_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1100n)
262
+ },
217
263
  ]
218
264
  }
@@ -15,6 +15,10 @@
15
15
  * const bitmask = mask(5n) // 31n
16
16
  * const c = combination([3n, 2n, 1n]) // 60n
17
17
  * ```
18
+ *
19
+ * @import { Sign } from '../function/compare/types.ts'
20
+ * @import { List } from '../list/types.ts'
21
+ * @import { Reduce, Unary } from './types.ts'
18
22
  */
19
23
  import type { Sign } from '../function/compare/types.ts';
20
24
  import type { List } from '../list/types.ts';
@@ -15,12 +15,13 @@
15
15
  * const bitmask = mask(5n) // 31n
16
16
  * const c = combination([3n, 2n, 1n]) // 60n
17
17
  * ```
18
+ *
19
+ * @import { Sign } from '../function/compare/types.ts'
20
+ * @import { List } from '../list/types.ts'
21
+ * @import { Reduce, Unary } from './types.ts'
18
22
  */
19
23
 
20
24
  import { cmp } from '../function/compare/module.f.mjs'
21
- /** @import { Sign } from '../function/compare/types.ts' */
22
- /** @import { List } from '../list/types.ts' */
23
- /** @import { Reduce, Unary } from './types.ts' */
24
25
  import { fold } from '../../common/monoid/module.f.mjs'
25
26
 
26
27
  /**
@@ -20,20 +20,21 @@
20
20
  * ```
21
21
  *
22
22
  * @module
23
+ *
24
+ * @import { Reduce as BigintReduce } from '../bigint/types.ts'
25
+ * @import { Fold } from '../function/operator/types.ts'
26
+ * @import { List, Thunk } from '../list/types.ts'
27
+ * @import { Absorbing } from '../../common/monoid/types.ts'
28
+ * @import { Sign } from '../function/compare/types.ts'
29
+ * @import { Nullable } from '../nullable/types.ts'
30
+ * @import { BitOrder, PopFront, Reduce, Unpacked, Vec, _NormOp, _UnpackConcat, } from './types.ts'
23
31
  */
24
- import { maxLength } from '../bigint/module.f.mjs';
25
32
  import type { Fold } from '../function/operator/types.ts';
26
- import type { Accumulator, List, Thunk } from '../list/types.ts';
33
+ import type { List, Thunk } from '../list/types.ts';
27
34
  import type { Sign } from '../function/compare/types.ts';
28
35
  import type { Nullable } from '../nullable/types.ts';
29
36
  import type { BitOrder, Unpacked, Vec, _NormOp } from './types.ts';
30
- /** @import { Nullable } from '../nullable/types.ts' */
31
- /**
32
- * @import {
33
- * BitOrder, PopFront, Reduce, Unpacked, Vec,
34
- * _NormOp, _UnpackConcat,
35
- * } from './types.ts'
36
- */
37
+ import { maxLength } from '../bigint/module.f.mjs';
37
38
  /**
38
39
  * Maximum length of a bit vector in bits (1_048_576 = 0x10_0000).
39
40
  * This limit is enforced by Bun's `bigint` size constraint, the minimal limit
@@ -126,11 +127,6 @@ export type _Base = {
126
127
  readonly unpackSplit: (len: bigint) => (u: Unpacked) => readonly [bigint, bigint];
127
128
  readonly unpackConcatUint: (a: Unpacked) => (b: Unpacked) => bigint;
128
129
  };
129
- export type _ListToVecState = {
130
- readonly len: bigint;
131
- readonly stack: readonly Unpacked[];
132
- };
133
- export type _ListToVecOp = Accumulator<Unpacked, _ListToVecState, Vec>;
134
130
  /**
135
131
  * Implements operations for handling vectors in a least-significant-bit (LSb) first order.
136
132
  *