functionalscript 0.44.0 → 0.46.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 (571) hide show
  1. package/README.md +5 -3
  2. package/fjs/asn.1/module.f.mjs +8 -1
  3. package/fjs/asn.1/proof.f.d.mts +15 -0
  4. package/fjs/asn.1/proof.f.mjs +31 -3
  5. package/fjs/asserts/module.f.d.mts +14 -0
  6. package/fjs/asserts/module.f.mjs +20 -0
  7. package/fjs/asserts/proof.f.d.mts +3 -0
  8. package/fjs/asserts/proof.f.mjs +15 -1
  9. package/fjs/basen/base128/module.f.mjs +22 -5
  10. package/fjs/basen/base128/proof.f.d.mts +3 -1
  11. package/fjs/basen/base128/proof.f.mjs +3 -1
  12. package/fjs/basen/base64/module.f.mjs +7 -3
  13. package/fjs/basen/base64/proof.f.d.mts +3 -1
  14. package/fjs/basen/base64/proof.f.mjs +7 -4
  15. package/fjs/basen/cbase32/proof.f.d.mts +3 -1
  16. package/fjs/basen/cbase32/proof.f.mjs +3 -1
  17. package/fjs/bnf/data/module.f.d.mts +32 -6
  18. package/fjs/bnf/data/module.f.mjs +112 -7
  19. package/fjs/bnf/data/proof.f.d.mts +2 -0
  20. package/fjs/bnf/data/proof.f.mjs +74 -4
  21. package/fjs/bnf/data/types.d.ts +20 -2
  22. package/fjs/bnf/descent/module.f.d.mts +34 -5
  23. package/fjs/bnf/descent/module.f.mjs +176 -54
  24. package/fjs/bnf/descent/proof.f.d.mts +3 -0
  25. package/fjs/bnf/descent/proof.f.mjs +189 -27
  26. package/fjs/bnf/descent/types.d.ts +24 -18
  27. package/fjs/bnf/ll1/module.f.d.mts +74 -6
  28. package/fjs/bnf/ll1/module.f.mjs +297 -95
  29. package/fjs/bnf/ll1/proof.f.d.mts +17 -2
  30. package/fjs/bnf/ll1/proof.f.mjs +372 -137
  31. package/fjs/bnf/ll1/types.d.ts +25 -27
  32. package/fjs/bnf/matcher/module.f.d.mts +66 -0
  33. package/fjs/bnf/matcher/module.f.mjs +81 -0
  34. package/fjs/bnf/matcher/proof.f.d.mts +10 -0
  35. package/fjs/bnf/matcher/proof.f.mjs +79 -0
  36. package/fjs/bnf/matcher/types.d.ts +54 -0
  37. package/fjs/bnf/module.f.d.mts +15 -6
  38. package/fjs/bnf/module.f.mjs +52 -11
  39. package/fjs/bnf/proof.f.d.mts +2 -0
  40. package/fjs/bnf/proof.f.mjs +79 -3
  41. package/fjs/bnf/testlib.f.d.mts +31 -0
  42. package/fjs/bnf/testlib.f.mjs +80 -0
  43. package/fjs/bnf/token_symbol/module.f.d.mts +4 -3
  44. package/fjs/bnf/token_symbol/module.f.mjs +7 -6
  45. package/fjs/bnf/token_symbol/proof.f.mjs +5 -2
  46. package/fjs/bnf/token_symbol/types.d.ts +2 -2
  47. package/fjs/bnf/types.d.ts +10 -3
  48. package/fjs/cas/cli/module.f.d.mts +1 -1
  49. package/fjs/cas/cli/module.f.mjs +14 -20
  50. package/fjs/cas/cli/proof.f.d.mts +4 -4
  51. package/fjs/cas/cli/proof.f.mjs +47 -34
  52. package/fjs/cas/evo/module.f.d.mts +71 -31
  53. package/fjs/cas/evo/module.f.mjs +223 -138
  54. package/fjs/cas/evo/proof.f.d.mts +10 -1
  55. package/fjs/cas/evo/proof.f.mjs +311 -226
  56. package/fjs/cas/evo/types.d.ts +45 -9
  57. package/fjs/cas/module.f.d.mts +18 -32
  58. package/fjs/cas/module.f.mjs +164 -176
  59. package/fjs/cas/proof.f.d.mts +11 -8
  60. package/fjs/cas/proof.f.mjs +259 -147
  61. package/fjs/cas/types.d.ts +24 -10
  62. package/fjs/ci/common/module.f.d.mts +1 -1
  63. package/fjs/ci/common/module.f.mjs +1 -0
  64. package/fjs/ci/config/module.f.d.mts +3 -3
  65. package/fjs/ci/config/module.f.mjs +3 -3
  66. package/fjs/ci/module.f.d.mts +5 -5
  67. package/fjs/ci/module.f.mjs +8 -7
  68. package/fjs/ci/nix/module.f.d.mts +7 -5
  69. package/fjs/ci/nix/module.f.mjs +13 -12
  70. package/fjs/ci/nix/proof.f.d.mts +2 -0
  71. package/fjs/ci/nix/proof.f.mjs +4 -4
  72. package/fjs/ci/proof.f.d.mts +4 -2
  73. package/fjs/ci/proof.f.mjs +13 -8
  74. package/fjs/cli/module.f.d.mts +4 -6
  75. package/fjs/cli/module.f.mjs +4 -8
  76. package/fjs/cli/proof.f.d.mts +4 -2
  77. package/fjs/cli/proof.f.mjs +21 -18
  78. package/fjs/cli/types.d.ts +2 -3
  79. package/fjs/common/monoid/module.f.d.mts +70 -12
  80. package/fjs/common/monoid/module.f.mjs +177 -14
  81. package/fjs/common/monoid/proof.f.d.mts +12 -1
  82. package/fjs/common/monoid/proof.f.mjs +88 -4
  83. package/fjs/common/monoid/types.d.ts +23 -0
  84. package/fjs/crypto/hmac/module.f.mjs +2 -2
  85. package/fjs/crypto/secp/proof.f.d.mts +3 -1
  86. package/fjs/crypto/secp/proof.f.mjs +3 -1
  87. package/fjs/crypto/sha2/module.f.mjs +3 -1
  88. package/fjs/crypto/sha2/proof.f.d.mts +4 -1
  89. package/fjs/crypto/sha2/proof.f.mjs +27 -1
  90. package/fjs/crypto/sha2/types.d.ts +11 -0
  91. package/fjs/crypto/sign/module.f.mjs +2 -2
  92. package/fjs/crypto/vdf/module.f.d.mts +23 -4
  93. package/fjs/crypto/vdf/module.f.mjs +6 -4
  94. package/fjs/dev/module.f.d.mts +17 -5
  95. package/fjs/dev/module.f.mjs +60 -30
  96. package/fjs/dev/update/module.f.d.mts +11 -3
  97. package/fjs/dev/update/module.f.mjs +16 -11
  98. package/fjs/dev/update/proof.f.d.mts +4 -3
  99. package/fjs/dev/update/proof.f.mjs +11 -7
  100. package/fjs/djs/module.f.d.mts +13 -5
  101. package/fjs/djs/module.f.mjs +31 -16
  102. package/fjs/djs/parser/module.f.d.mts +16 -3
  103. package/fjs/djs/parser/module.f.mjs +135 -16
  104. package/fjs/djs/parser/proof.f.d.mts +8 -1
  105. package/fjs/djs/parser/proof.f.mjs +287 -13
  106. package/fjs/djs/parser/types.d.ts +7 -1
  107. package/fjs/djs/proof.f.d.mts +20 -1
  108. package/fjs/djs/proof.f.mjs +190 -12
  109. package/fjs/djs/serializer/module.f.d.mts +25 -8
  110. package/fjs/djs/serializer/module.f.mjs +66 -19
  111. package/fjs/djs/serializer/proof.f.d.mts +5 -0
  112. package/fjs/djs/serializer/proof.f.mjs +23 -1
  113. package/fjs/djs/tokenizer/module.f.d.mts +17 -5
  114. package/fjs/djs/tokenizer/module.f.mjs +120 -73
  115. package/fjs/djs/tokenizer/proof.f.d.mts +3 -0
  116. package/fjs/djs/tokenizer/proof.f.mjs +86 -67
  117. package/fjs/djs/transpiler/module.f.d.mts +13 -19
  118. package/fjs/djs/transpiler/module.f.mjs +79 -72
  119. package/fjs/djs/transpiler/types.d.ts +29 -0
  120. package/fjs/djs/types.d.ts +7 -1
  121. package/fjs/effects/list/module.f.d.mts +23 -12
  122. package/fjs/effects/list/module.f.mjs +16 -12
  123. package/fjs/effects/list/types.d.ts +27 -7
  124. package/fjs/effects/memory/module.f.d.mts +6 -3
  125. package/fjs/effects/memory/module.f.mjs +7 -7
  126. package/fjs/effects/memory/proof.f.d.mts +4 -0
  127. package/fjs/effects/memory/proof.f.mjs +18 -9
  128. package/fjs/effects/memory/types.d.ts +4 -3
  129. package/fjs/effects/mock/module.f.d.mts +28 -4
  130. package/fjs/effects/mock/module.f.mjs +39 -5
  131. package/fjs/effects/mock/types.d.ts +10 -1
  132. package/fjs/effects/module.d.mts +12 -2
  133. package/fjs/effects/module.f.d.mts +469 -281
  134. package/fjs/effects/module.f.mjs +538 -299
  135. package/fjs/effects/module.mjs +11 -2
  136. package/fjs/effects/node/memory/module.d.mts +7 -2
  137. package/fjs/effects/node/memory/module.mjs +9 -5
  138. package/fjs/effects/node/memory/proof.d.mts +2 -0
  139. package/fjs/effects/node/memory/proof.mjs +12 -5
  140. package/fjs/effects/node/module.d.mts +8 -2
  141. package/fjs/effects/node/module.f.d.mts +183 -43
  142. package/fjs/effects/node/module.f.mjs +260 -62
  143. package/fjs/effects/node/module.mjs +61 -50
  144. package/fjs/effects/node/proof.f.d.mts +28 -2
  145. package/fjs/effects/node/proof.f.mjs +161 -42
  146. package/fjs/effects/node/types.d.ts +106 -18
  147. package/fjs/effects/node/virtual/module.f.d.mts +21 -4
  148. package/fjs/effects/node/virtual/module.f.mjs +113 -70
  149. package/fjs/effects/node/virtual/proof.f.d.mts +31 -2
  150. package/fjs/effects/node/virtual/proof.f.mjs +201 -8
  151. package/fjs/effects/proof.f.d.mts +69 -34
  152. package/fjs/effects/proof.f.mjs +413 -130
  153. package/fjs/effects/types.d.ts +161 -33
  154. package/fjs/emergent_testing/all.test.d.mts +8 -0
  155. package/fjs/emergent_testing/all.test.mjs +14 -0
  156. package/fjs/emergent_testing/module.f.d.mts +22 -10
  157. package/fjs/emergent_testing/module.f.mjs +119 -85
  158. package/fjs/emergent_testing/proof.f.d.mts +21 -7
  159. package/fjs/emergent_testing/proof.f.mjs +169 -35
  160. package/fjs/emergent_testing/types.d.ts +22 -4
  161. package/fjs/fsc/bnf.f.d.mts +3 -0
  162. package/fjs/fsc/bnf.f.mjs +4 -1
  163. package/fjs/fsc/json.f.d.mts +3 -0
  164. package/fjs/fsc/json.f.mjs +4 -1
  165. package/fjs/fsc/module.f.d.mts +9 -0
  166. package/fjs/fsc/module.f.mjs +5 -3
  167. package/fjs/fsm/module.f.d.mts +14 -4
  168. package/fjs/fsm/module.f.mjs +54 -37
  169. package/fjs/fsm/proof.f.d.mts +5 -0
  170. package/fjs/fsm/proof.f.mjs +87 -115
  171. package/fjs/js/keywords/module.f.d.mts +52 -0
  172. package/fjs/js/keywords/module.f.mjs +72 -0
  173. package/fjs/{emergent_testing/scenarios/return-value.pass.d.ts → js/keywords/proof.f.d.mts} +1 -1
  174. package/fjs/js/keywords/proof.f.mjs +13 -0
  175. package/fjs/js/tokenizer/module.f.d.mts +30 -3
  176. package/fjs/js/tokenizer/module.f.mjs +161 -211
  177. package/fjs/js/tokenizer/proof.f.d.mts +1 -0
  178. package/fjs/js/tokenizer/proof.f.mjs +54 -24
  179. package/fjs/js/tokenizer/types.d.ts +33 -24
  180. package/fjs/mcp/cas/module.f.d.mts +1 -6
  181. package/fjs/mcp/cas/module.f.mjs +55 -51
  182. package/fjs/mcp/cas/proof.f.d.mts +15 -0
  183. package/fjs/mcp/cas/proof.f.mjs +174 -0
  184. package/fjs/mcp/evo/module.f.d.mts +19 -10
  185. package/fjs/mcp/evo/module.f.mjs +48 -27
  186. package/fjs/mcp/evo/proof.f.d.mts +6 -1
  187. package/fjs/mcp/evo/proof.f.mjs +115 -31
  188. package/fjs/mcp/module.f.d.mts +39 -4
  189. package/fjs/mcp/module.f.mjs +14 -12
  190. package/fjs/mcp/proof.f.d.mts +13 -1
  191. package/fjs/mcp/proof.f.mjs +120 -61
  192. package/fjs/media/html/module.f.d.mts +12 -0
  193. package/fjs/media/html/module.f.mjs +7 -5
  194. package/fjs/media/html/proof.f.d.mts +3 -0
  195. package/fjs/media/html/proof.f.mjs +4 -1
  196. package/fjs/media/json/extended/module.f.d.mts +82 -0
  197. package/fjs/media/json/extended/module.f.mjs +153 -0
  198. package/fjs/media/json/extended/proof.f.d.mts +42 -0
  199. package/fjs/media/json/extended/proof.f.mjs +127 -0
  200. package/fjs/media/json/extended/types.d.ts +23 -0
  201. package/fjs/media/json/module.f.d.mts +8 -2
  202. package/fjs/media/json/module.f.mjs +43 -41
  203. package/fjs/media/json/number/module.f.d.mts +59 -0
  204. package/fjs/media/json/number/module.f.mjs +136 -0
  205. package/fjs/media/json/number/proof.f.d.mts +24 -0
  206. package/fjs/media/json/number/proof.f.mjs +86 -0
  207. package/fjs/media/json/number/types.d.ts +28 -0
  208. package/fjs/media/json/parser/module.f.d.mts +25 -13
  209. package/fjs/media/json/parser/module.f.mjs +133 -72
  210. package/fjs/media/json/parser/proof.f.d.mts +5 -0
  211. package/fjs/media/json/parser/proof.f.mjs +31 -1
  212. package/fjs/media/json/parser/types.d.ts +38 -14
  213. package/fjs/media/json/rtti/module.f.d.mts +1 -1
  214. package/fjs/media/json/rtti/module.f.mjs +1 -1
  215. package/fjs/media/json/rtti/proof.f.d.mts +3 -0
  216. package/fjs/media/json/rtti/proof.f.mjs +12 -12
  217. package/fjs/media/json/schema/module.f.d.mts +61 -27
  218. package/fjs/media/json/schema/module.f.mjs +218 -63
  219. package/fjs/media/json/schema/proof.f.d.mts +41 -1
  220. package/fjs/media/json/schema/proof.f.mjs +220 -9
  221. package/fjs/media/json/serializer/module.f.d.mts +44 -0
  222. package/fjs/media/json/serializer/module.f.mjs +71 -9
  223. package/fjs/media/json/tokenizer/module.f.d.mts +8 -0
  224. package/fjs/media/json/tokenizer/module.f.mjs +31 -8
  225. package/fjs/media/json/tokenizer/proof.f.d.mts +6 -0
  226. package/fjs/media/json/tokenizer/proof.f.mjs +62 -21
  227. package/fjs/media/json/types.d.ts +36 -10
  228. package/fjs/media/lock/module.f.d.mts +100 -0
  229. package/fjs/media/lock/module.f.mjs +125 -0
  230. package/fjs/media/lock/proof.f.d.mts +33 -0
  231. package/fjs/media/lock/proof.f.mjs +196 -0
  232. package/fjs/media/lock/types.d.ts +15 -0
  233. package/fjs/media/module.f.d.mts +6 -5
  234. package/fjs/media/module.f.mjs +8 -7
  235. package/fjs/media/nix/module.f.d.mts +13 -0
  236. package/fjs/media/nix/module.f.mjs +4 -2
  237. package/fjs/media/nix/proof.f.d.mts +3 -0
  238. package/fjs/media/nix/proof.f.mjs +4 -1
  239. package/fjs/media/note/module.f.d.mts +121 -0
  240. package/fjs/media/note/module.f.mjs +131 -0
  241. package/fjs/media/note/proof.f.d.mts +29 -0
  242. package/fjs/media/note/proof.f.mjs +150 -0
  243. package/fjs/media/note/types.d.ts +10 -0
  244. package/fjs/media/proof.f.d.mts +4 -1
  245. package/fjs/media/proof.f.mjs +40 -21
  246. package/fjs/media/revision/module.f.d.mts +83 -7
  247. package/fjs/media/revision/module.f.mjs +127 -23
  248. package/fjs/media/revision/proof.f.d.mts +14 -0
  249. package/fjs/media/revision/proof.f.mjs +93 -2
  250. package/fjs/media/revision/types.d.ts +34 -5
  251. package/fjs/media/type/module.f.d.mts +53 -18
  252. package/fjs/media/type/module.f.mjs +87 -97
  253. package/fjs/media/type/proof.f.d.mts +17 -0
  254. package/fjs/media/type/proof.f.mjs +73 -13
  255. package/fjs/module.d.mts +5 -0
  256. package/fjs/module.f.d.mts +8 -0
  257. package/fjs/module.f.mjs +33 -10
  258. package/fjs/module.mjs +6 -0
  259. package/fjs/nanvm/proof.f.mjs +3 -3
  260. package/fjs/nanvm/rust/module.f.mjs +1 -1
  261. package/fjs/nanvm/update/module.f.d.mts +4 -4
  262. package/fjs/nanvm/update/module.f.mjs +8 -9
  263. package/fjs/nanvm/update/proof.f.mjs +4 -3
  264. package/fjs/path/module.f.d.mts +8 -0
  265. package/fjs/path/module.f.mjs +4 -2
  266. package/fjs/proof.f.d.mts +7 -3
  267. package/fjs/proof.f.mjs +41 -12
  268. package/fjs/protocol/json_rpc/module.f.d.mts +3 -3
  269. package/fjs/protocol/json_rpc/module.f.mjs +10 -7
  270. package/fjs/protocol/json_rpc/proof.f.d.mts +6 -0
  271. package/fjs/protocol/json_rpc/proof.f.mjs +26 -5
  272. package/fjs/protocol/mcp/module.f.d.mts +10 -13
  273. package/fjs/protocol/mcp/module.f.mjs +74 -58
  274. package/fjs/protocol/mcp/proof.f.d.mts +16 -3
  275. package/fjs/protocol/mcp/proof.f.mjs +224 -69
  276. package/fjs/protocol/mcp/stdio/module.f.d.mts +17 -11
  277. package/fjs/protocol/mcp/stdio/module.f.mjs +39 -33
  278. package/fjs/protocol/mcp/stdio/proof.f.d.mts +5 -3
  279. package/fjs/protocol/mcp/stdio/proof.f.mjs +46 -13
  280. package/fjs/protocol/mcp/stdio/types.d.ts +14 -0
  281. package/fjs/protocol/mcp/types.d.ts +17 -6
  282. package/fjs/sul/id/module.f.d.mts +4 -0
  283. package/fjs/sul/id/module.f.mjs +6 -6
  284. package/fjs/sul/level/hash/module.f.d.mts +4 -1
  285. package/fjs/sul/level/hash/module.f.mjs +6 -4
  286. package/fjs/sul/level/hash/proof.f.d.mts +4 -0
  287. package/fjs/sul/level/hash/proof.f.mjs +7 -4
  288. package/fjs/sul/level/literal/module.f.d.mts +4 -1
  289. package/fjs/sul/level/literal/module.f.mjs +4 -3
  290. package/fjs/sul/level/literal/proof.f.d.mts +3 -0
  291. package/fjs/sul/level/literal/proof.f.mjs +4 -1
  292. package/fjs/sul/module.f.d.mts +5 -3
  293. package/fjs/sul/module.f.mjs +23 -17
  294. package/fjs/sul/proof.f.d.mts +4 -0
  295. package/fjs/sul/proof.f.mjs +5 -2
  296. package/fjs/text/ascii/module.f.d.mts +26 -0
  297. package/fjs/text/ascii/module.f.mjs +49 -1
  298. package/fjs/text/ascii/proof.f.d.mts +10 -0
  299. package/fjs/text/ascii/proof.f.mjs +33 -1
  300. package/fjs/text/code_point/module.f.d.mts +29 -3
  301. package/fjs/text/code_point/module.f.mjs +32 -9
  302. package/fjs/text/code_point/proof.f.d.mts +2 -0
  303. package/fjs/text/code_point/proof.f.mjs +39 -0
  304. package/fjs/text/module.f.d.mts +4 -2
  305. package/fjs/text/module.f.mjs +4 -3
  306. package/fjs/text/proof.f.d.mts +3 -0
  307. package/fjs/text/proof.f.mjs +4 -1
  308. package/fjs/text/sgr/module.f.d.mts +6 -5
  309. package/fjs/text/sgr/module.f.mjs +8 -8
  310. package/fjs/text/sgr/proof.f.d.mts +3 -0
  311. package/fjs/text/sgr/proof.f.mjs +4 -1
  312. package/fjs/text/utf16/module.f.d.mts +5 -1
  313. package/fjs/text/utf16/module.f.mjs +38 -35
  314. package/fjs/text/utf16/proof.f.d.mts +3 -1
  315. package/fjs/text/utf16/proof.f.mjs +19 -2
  316. package/fjs/text/utf8/module.f.d.mts +9 -5
  317. package/fjs/text/utf8/module.f.mjs +20 -20
  318. package/fjs/types/array/module.f.d.mts +2 -1
  319. package/fjs/types/array/module.f.mjs +16 -4
  320. package/fjs/types/bigfloat/module.f.d.mts +21 -1
  321. package/fjs/types/bigfloat/module.f.mjs +33 -7
  322. package/fjs/types/bigfloat/proof.f.d.mts +1 -0
  323. package/fjs/types/bigfloat/proof.f.mjs +46 -0
  324. package/fjs/types/bigint/module.f.d.mts +4 -0
  325. package/fjs/types/bigint/module.f.mjs +4 -3
  326. package/fjs/types/bit_vec/module.f.d.mts +10 -16
  327. package/fjs/types/bit_vec/module.f.mjs +99 -95
  328. package/fjs/types/bit_vec/proof.f.d.mts +6 -0
  329. package/fjs/types/bit_vec/proof.f.mjs +31 -5
  330. package/fjs/types/btree/find/module.f.d.mts +5 -1
  331. package/fjs/types/btree/find/module.f.mjs +5 -5
  332. package/fjs/types/btree/find/proof.f.d.mts +5 -1
  333. package/fjs/types/btree/find/proof.f.mjs +5 -3
  334. package/fjs/types/btree/module.f.d.mts +3 -0
  335. package/fjs/types/btree/module.f.mjs +3 -2
  336. package/fjs/types/btree/proof.f.d.mts +5 -1
  337. package/fjs/types/btree/proof.f.mjs +5 -3
  338. package/fjs/types/btree/remove/module.f.d.mts +11 -0
  339. package/fjs/types/btree/remove/module.f.mjs +10 -10
  340. package/fjs/types/btree/remove/proof.f.d.mts +3 -0
  341. package/fjs/types/btree/remove/proof.f.mjs +4 -1
  342. package/fjs/types/btree/set/module.f.d.mts +9 -0
  343. package/fjs/types/btree/set/module.f.mjs +14 -17
  344. package/fjs/types/btree/set/proof.f.d.mts +3 -0
  345. package/fjs/types/btree/set/proof.f.mjs +16 -1
  346. package/fjs/types/btree/types/module.f.d.mts +2 -1
  347. package/fjs/types/btree/types/module.f.mjs +2 -1
  348. package/fjs/types/byte_set/module.f.d.mts +20 -4
  349. package/fjs/types/byte_set/module.f.mjs +18 -8
  350. package/fjs/types/byte_set/proof.f.d.mts +3 -1
  351. package/fjs/types/byte_set/proof.f.mjs +10 -8
  352. package/fjs/types/function/compare/module.f.d.mts +3 -2
  353. package/fjs/types/function/compare/module.f.mjs +13 -5
  354. package/fjs/types/function/module.f.d.mts +8 -1
  355. package/fjs/types/function/module.f.mjs +8 -1
  356. package/fjs/types/function/operator/module.f.d.mts +2 -1
  357. package/fjs/types/function/operator/module.f.mjs +2 -2
  358. package/fjs/types/list/module.f.d.mts +10 -3
  359. package/fjs/types/list/module.f.mjs +6 -4
  360. package/fjs/types/list/proof.f.d.mts +4 -1
  361. package/fjs/types/list/proof.f.mjs +4 -2
  362. package/fjs/types/nibble_set/module.f.d.mts +2 -1
  363. package/fjs/types/nibble_set/module.f.mjs +2 -2
  364. package/fjs/types/nominal/module.f.d.mts +2 -1
  365. package/fjs/types/nominal/module.f.mjs +2 -1
  366. package/fjs/types/nullable/module.f.d.mts +26 -6
  367. package/fjs/types/nullable/module.f.mjs +25 -6
  368. package/fjs/types/nullable/proof.f.d.mts +4 -0
  369. package/fjs/types/nullable/proof.f.mjs +15 -0
  370. package/fjs/types/number/module.f.d.mts +4 -0
  371. package/fjs/types/number/module.f.mjs +4 -3
  372. package/fjs/types/object/module.f.d.mts +26 -4
  373. package/fjs/types/object/module.f.mjs +26 -7
  374. package/fjs/types/object/proof.f.d.mts +5 -2
  375. package/fjs/types/object/proof.f.mjs +6 -3
  376. package/fjs/types/object/structurally_same/module.f.d.mts +39 -0
  377. package/fjs/types/object/structurally_same/module.f.mjs +59 -0
  378. package/fjs/types/object/structurally_same/proof.f.d.mts +6 -0
  379. package/fjs/types/object/structurally_same/proof.f.mjs +73 -0
  380. package/fjs/types/ordered_map/module.f.d.mts +5 -0
  381. package/fjs/types/ordered_map/module.f.mjs +5 -4
  382. package/fjs/types/ordered_map/proof.f.d.mts +3 -0
  383. package/fjs/types/ordered_map/proof.f.mjs +4 -1
  384. package/fjs/types/patricia_trie/module.f.d.mts +2 -1
  385. package/fjs/types/patricia_trie/module.f.mjs +27 -12
  386. package/fjs/types/patricia_trie/proof.f.d.mts +3 -0
  387. package/fjs/types/patricia_trie/proof.f.mjs +4 -1
  388. package/fjs/types/prime_field/module.f.d.mts +3 -1
  389. package/fjs/types/prime_field/module.f.mjs +3 -2
  390. package/fjs/types/range/module.f.d.mts +2 -1
  391. package/fjs/types/range/module.f.mjs +2 -2
  392. package/fjs/types/range_map/module.f.d.mts +6 -0
  393. package/fjs/types/range_map/module.f.mjs +6 -9
  394. package/fjs/types/range_map/proof.f.d.mts +5 -1
  395. package/fjs/types/range_map/proof.f.mjs +5 -3
  396. package/fjs/types/range_set/module.f.d.mts +5 -0
  397. package/fjs/types/range_set/module.f.mjs +1 -0
  398. package/fjs/types/range_set/proof.f.d.mts +3 -0
  399. package/fjs/types/range_set/proof.f.mjs +4 -1
  400. package/fjs/types/result/module.d.mts +8 -0
  401. package/fjs/types/result/module.f.d.mts +37 -7
  402. package/fjs/types/result/module.f.mjs +38 -8
  403. package/fjs/types/result/module.mjs +9 -1
  404. package/fjs/types/result/proof.f.d.mts +5 -0
  405. package/fjs/types/result/proof.f.mjs +22 -2
  406. package/fjs/types/rtti/common/module.f.d.mts +44 -14
  407. package/fjs/types/rtti/common/module.f.mjs +42 -36
  408. package/fjs/types/rtti/common/proof.f.d.mts +4 -0
  409. package/fjs/types/rtti/common/proof.f.mjs +10 -7
  410. package/fjs/types/rtti/data/module.f.d.mts +134 -0
  411. package/fjs/types/rtti/data/module.f.mjs +1053 -0
  412. package/fjs/types/rtti/data/proof.f.d.mts +76 -0
  413. package/fjs/types/rtti/data/proof.f.mjs +589 -0
  414. package/fjs/types/rtti/data/types.d.ts +83 -0
  415. package/fjs/types/rtti/module.f.d.mts +12 -5
  416. package/fjs/types/rtti/module.f.mjs +7 -5
  417. package/fjs/types/rtti/parse/module.f.d.mts +48 -0
  418. package/fjs/types/rtti/parse/module.f.mjs +45 -34
  419. package/fjs/types/rtti/parse/proof.f.d.mts +3 -2
  420. package/fjs/types/rtti/parse/proof.f.mjs +51 -52
  421. package/fjs/types/rtti/proof.f.d.mts +3 -1
  422. package/fjs/types/rtti/proof.f.mjs +6 -2
  423. package/fjs/types/rtti/ts/module.f.d.mts +68 -9
  424. package/fjs/types/rtti/ts/module.f.mjs +258 -30
  425. package/fjs/types/rtti/ts/proof.f.d.mts +44 -0
  426. package/fjs/types/rtti/ts/proof.f.mjs +152 -4
  427. package/fjs/types/rtti/ts/types.d.ts +25 -1
  428. package/fjs/types/rtti/types.d.ts +40 -0
  429. package/fjs/types/sorted_list/module.f.d.mts +4 -1
  430. package/fjs/types/sorted_list/module.f.mjs +21 -12
  431. package/fjs/types/sorted_list/proof.f.d.mts +3 -1
  432. package/fjs/types/sorted_list/proof.f.mjs +3 -1
  433. package/fjs/types/sorted_set/module.f.d.mts +49 -1
  434. package/fjs/types/sorted_set/module.f.mjs +26 -2
  435. package/fjs/types/sorted_set/proof.f.d.mts +4 -1
  436. package/fjs/types/sorted_set/proof.f.mjs +19 -2
  437. package/fjs/types/string/module.f.d.mts +4 -0
  438. package/fjs/types/string/module.f.mjs +4 -3
  439. package/fjs/types/string_set/module.f.d.mts +3 -1
  440. package/fjs/types/string_set/module.f.mjs +3 -2
  441. package/fjs/types/ts/module.f.d.mts +2 -0
  442. package/fjs/types/ts/module.f.mjs +3 -3
  443. package/fjs/types/ts/proof.f.d.mts +1 -0
  444. package/fjs/types/ts/proof.f.mjs +5 -0
  445. package/fjs/types/ts/types.d.ts +6 -1
  446. package/fjs/types/uint8array/module.f.d.mts +13 -2
  447. package/fjs/types/uint8array/module.f.mjs +20 -15
  448. package/fjs/website/module.f.d.mts +5 -2
  449. package/fjs/website/module.f.mjs +6 -8
  450. package/fjs/website/proof.f.mjs +2 -1
  451. package/package.json +3 -3
  452. package/fjs/asn.1/types.js +0 -6
  453. package/fjs/asserts/types.js +0 -6
  454. package/fjs/basen/types.js +0 -6
  455. package/fjs/bnf/data/types.js +0 -6
  456. package/fjs/bnf/descent/types.js +0 -6
  457. package/fjs/bnf/ll1/types.js +0 -6
  458. package/fjs/bnf/token_symbol/types.js +0 -6
  459. package/fjs/bnf/types.js +0 -6
  460. package/fjs/cas/evo/types.js +0 -7
  461. package/fjs/cas/types.js +0 -6
  462. package/fjs/ci/common/types.js +0 -1
  463. package/fjs/ci/nix/types.js +0 -6
  464. package/fjs/ci/types.js +0 -6
  465. package/fjs/cli/types.js +0 -6
  466. package/fjs/common/monoid/types.js +0 -6
  467. package/fjs/crypto/pow/types.js +0 -6
  468. package/fjs/crypto/secp/types.js +0 -6
  469. package/fjs/crypto/sha2/types.js +0 -6
  470. package/fjs/crypto/sign/types.js +0 -6
  471. package/fjs/crypto/vdf/types.js +0 -6
  472. package/fjs/dev/package_json/module.f.d.mts +0 -32
  473. package/fjs/dev/package_json/module.f.mjs +0 -37
  474. package/fjs/dev/package_json/proof.f.d.mts +0 -6
  475. package/fjs/dev/package_json/proof.f.mjs +0 -32
  476. package/fjs/dev/types.js +0 -6
  477. package/fjs/djs/ast/types.js +0 -8
  478. package/fjs/djs/parser/types.js +0 -7
  479. package/fjs/djs/tokenizer/types.js +0 -7
  480. package/fjs/djs/types.js +0 -7
  481. package/fjs/effects/eff/module.f.d.mts +0 -10
  482. package/fjs/effects/eff/module.f.mjs +0 -68
  483. package/fjs/effects/eff/proof.f.d.mts +0 -12
  484. package/fjs/effects/eff/proof.f.mjs +0 -66
  485. package/fjs/effects/eff/types.d.ts +0 -71
  486. package/fjs/effects/eff/types.js +0 -6
  487. package/fjs/effects/list/types.js +0 -6
  488. package/fjs/effects/memory/types.js +0 -6
  489. package/fjs/effects/mock/types.js +0 -6
  490. package/fjs/effects/node/types.js +0 -6
  491. package/fjs/effects/node/virtual/types.js +0 -7
  492. package/fjs/effects/types.js +0 -6
  493. package/fjs/emergent_testing/all.test.d.ts +0 -1
  494. package/fjs/emergent_testing/all.test.js +0 -5
  495. package/fjs/emergent_testing/scenarios/all.d.ts +0 -1
  496. package/fjs/emergent_testing/scenarios/all.js +0 -1
  497. package/fjs/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -6
  498. package/fjs/emergent_testing/scenarios/async-subtests.fail.js +0 -9
  499. package/fjs/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -6
  500. package/fjs/emergent_testing/scenarios/async-subtests.pass.js +0 -9
  501. package/fjs/emergent_testing/scenarios/async.fail.d.ts +0 -3
  502. package/fjs/emergent_testing/scenarios/async.fail.js +0 -6
  503. package/fjs/emergent_testing/scenarios/async.pass.d.ts +0 -3
  504. package/fjs/emergent_testing/scenarios/async.pass.js +0 -5
  505. package/fjs/emergent_testing/scenarios/fail.fail.d.ts +0 -3
  506. package/fjs/emergent_testing/scenarios/fail.fail.js +0 -3
  507. package/fjs/emergent_testing/scenarios/return-value.pass.js +0 -4
  508. package/fjs/emergent_testing/scenarios/thenable.pass.d.ts +0 -5
  509. package/fjs/emergent_testing/scenarios/thenable.pass.js +0 -11
  510. package/fjs/emergent_testing/scenarios/thenable2.pass.d.ts +0 -5
  511. package/fjs/emergent_testing/scenarios/thenable2.pass.js +0 -3
  512. package/fjs/emergent_testing/scenarios/throw.pass.d.ts +0 -5
  513. package/fjs/emergent_testing/scenarios/throw.pass.js +0 -3
  514. package/fjs/emergent_testing/types.js +0 -6
  515. package/fjs/js/tokenizer/types.js +0 -6
  516. package/fjs/media/html/types.js +0 -6
  517. package/fjs/media/json/parser/types.js +0 -6
  518. package/fjs/media/json/tokenizer/types.js +0 -6
  519. package/fjs/media/json/types.js +0 -13
  520. package/fjs/media/nix/types.js +0 -6
  521. package/fjs/media/revision/types.js +0 -8
  522. package/fjs/media/type/types.js +0 -6
  523. package/fjs/media/types.js +0 -7
  524. package/fjs/nanvm/types.js +0 -11
  525. package/fjs/protocol/json_rpc/types.js +0 -8
  526. package/fjs/protocol/mcp/types.js +0 -8
  527. package/fjs/sul/id/types.js +0 -6
  528. package/fjs/sul/level/hash/types.js +0 -6
  529. package/fjs/sul/level/literal/types.js +0 -6
  530. package/fjs/sul/types.js +0 -6
  531. package/fjs/text/sgr/types.js +0 -6
  532. package/fjs/text/types.js +0 -6
  533. package/fjs/text/utf16/types.js +0 -6
  534. package/fjs/text/utf8/types.js +0 -6
  535. package/fjs/types/array/types.js +0 -6
  536. package/fjs/types/bigfloat/types.js +0 -6
  537. package/fjs/types/bigint/types.js +0 -6
  538. package/fjs/types/bit_vec/types.js +0 -6
  539. package/fjs/types/btree/find/types.js +0 -6
  540. package/fjs/types/btree/types/types.js +0 -6
  541. package/fjs/types/byte_set/types.js +0 -6
  542. package/fjs/types/function/compare/types.js +0 -6
  543. package/fjs/types/function/operator/types.js +0 -6
  544. package/fjs/types/function/types.js +0 -6
  545. package/fjs/types/list/types.js +0 -6
  546. package/fjs/types/nibble_set/types.js +0 -6
  547. package/fjs/types/nominal/types.js +0 -6
  548. package/fjs/types/nullable/types.js +0 -6
  549. package/fjs/types/object/types.js +0 -8
  550. package/fjs/types/option/types.js +0 -6
  551. package/fjs/types/ordered_map/types.js +0 -6
  552. package/fjs/types/patricia_trie/types.js +0 -6
  553. package/fjs/types/phantom/types.js +0 -11
  554. package/fjs/types/prime_field/types.js +0 -6
  555. package/fjs/types/range/types.js +0 -6
  556. package/fjs/types/range_map/types.js +0 -6
  557. package/fjs/types/result/types.js +0 -6
  558. package/fjs/types/rtti/common/types.js +0 -1
  559. package/fjs/types/rtti/parse/types.js +0 -1
  560. package/fjs/types/rtti/ts/types.js +0 -1
  561. package/fjs/types/rtti/types.js +0 -1
  562. package/fjs/types/rtti/validate/module.f.d.mts +0 -6
  563. package/fjs/types/rtti/validate/module.f.mjs +0 -169
  564. package/fjs/types/rtti/validate/proof.f.d.mts +0 -125
  565. package/fjs/types/rtti/validate/proof.f.mjs +0 -437
  566. package/fjs/types/rtti/validate/types.d.ts +0 -6
  567. package/fjs/types/rtti/validate/types.js +0 -1
  568. package/fjs/types/sorted_list/types.js +0 -6
  569. package/fjs/types/sorted_set/types.js +0 -6
  570. package/fjs/types/string_set/types.js +0 -6
  571. package/fjs/types/ts/types.js +0 -8
@@ -20,34 +20,23 @@
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
32
 
25
33
  import { bitLength, divUp, mask, maxLength, xor } from '../bigint/module.f.mjs'
26
- /** @import { Reduce as BigintReduce } from '../bigint/types.ts' */
27
-
28
- import { flip, identity } from '../function/module.f.mjs'
29
-
30
- /** @import { Fold } from '../function/operator/types.ts' */
31
-
32
- import { map, tryFold } from '../list/module.f.mjs'
33
- /** @import { Accumulator, List, Thunk } from '../list/types.ts' */
34
-
34
+ import { compose, flip, identity } from '../function/module.f.mjs'
35
+ import { map } from '../list/module.f.mjs'
35
36
  import { asBase, asNominal } from '../nominal/module.f.mjs'
36
-
37
- import { repeat as mRepeat } from '../../common/monoid/module.f.mjs'
38
-
37
+ import { foldAbsorbing, repeat as mRepeat } from '../../common/monoid/module.f.mjs'
39
38
  import { cmp, max, min } from '../function/compare/module.f.mjs'
40
- /** @import { Sign } from '../function/compare/types.ts' */
41
-
42
- import { mapUnwrap } from '../nullable/module.f.mjs'
43
- /** @import { Nullable } from '../nullable/types.ts' */
44
-
45
- /**
46
- * @import {
47
- * BitOrder, PopFront, Reduce, Unpacked, Vec,
48
- * _NormOp, _UnpackConcat,
49
- * } from './types.ts'
50
- */
39
+ import { map as nullableMap, mapUnwrap } from '../nullable/module.f.mjs'
51
40
 
52
41
  /**
53
42
  * Maximum length of a bit vector in bits (1_048_576 = 0x10_0000).
@@ -183,8 +172,6 @@ const op = norm => op => ap => bp => {
183
172
 
184
173
  /**
185
174
  * @typedef {{
186
- * readonly front: (len: bigint) => (v: Vec) => bigint
187
- * readonly removeFront: (len: bigint) => (v: Vec) => Vec
188
175
  * readonly norm: _NormOp
189
176
  * readonly uintCmp: (a: bigint) => (b: bigint) => Sign
190
177
  * readonly unpackSplit: (len: bigint) => (u: Unpacked) => readonly[bigint, bigint]
@@ -195,55 +182,62 @@ const op = norm => op => ap => bp => {
195
182
  const unpackEmpty = /** @type {const} */{ length: 0n, uint: 0n }
196
183
 
197
184
  /**
198
- * @typedef {{
199
- * readonly len: bigint
200
- * readonly stack: readonly Unpacked[]
201
- * }} _ListToVecState
185
+ * The element-to-`Unpacked` maps the two {@link mappedListToVec} instances
186
+ * differ by. Neither depends on a bit order, so both are bound once here
187
+ * (`fjs/AGENTS.md` §3.3).
188
+ *
189
+ * @type {(_: number) => Unpacked}
202
190
  */
191
+ const u8ToUnpacked = b => ({ length: 8n, uint: BigInt(b) })
203
192
 
204
- /** @typedef {Accumulator<Unpacked, _ListToVecState, Vec>} _ListToVecOp */
205
-
206
- /** @type {(unpackConcat: _UnpackConcat) => _ListToVecOp} */
207
- const listToVecOp = unpackConcat => ({
208
- init: { len: 0n, stack: [] },
209
- update: (v, {len, stack}) => {
210
- len += v.length
211
- if (len > maxLength) { return null }
212
- let i = 0
213
- while (true) {
214
- if (stack.length <= i) {
215
- stack = [...stack, v]
216
- break
217
- }
218
- const old = stack[i]
219
- if (old.length === 0n) {
220
- stack = stack.toSpliced(i, 1, v)
221
- break
222
- }
223
- stack = stack.toSpliced(i, 1, unpackEmpty)
224
- v = unpackConcat(old)(v)
225
- i++
226
- }
227
- return { len, stack }
193
+ /**
194
+ * Concatenation as a monoid over `Nullable<Unpacked>`, where `null` means "the
195
+ * concatenation is longer than `maxLength`" and is an **absorbing** element:
196
+ * combining it with anything is `null` again. The identity is the empty vector.
197
+ *
198
+ * This is a lawful monoid, so `monoid.fold` may re-associate it freely. Length
199
+ * is additive and non-negative, so any partial combine is at most the total: a
200
+ * partial can only overflow when the total does, and the top-level combine
201
+ * always sees the full total. The result is therefore `null` **iff** the total
202
+ * length exceeds `maxLength`, whatever the grouping.
203
+ *
204
+ * The cap is checked on the operands' lengths rather than on the concatenated
205
+ * result because the result is what must not be built: `maxLength` is the
206
+ * smallest `bigint` size supported across FunctionalScript's runtimes. The two
207
+ * lengths are exact and additive — this is the length, not an estimate of it
208
+ * (`DESIGN.md` §6).
209
+ *
210
+ * Being absorbing is also what keeps the fold's walk bounded: `foldAbsorbing`
211
+ * stops at the first merge that overflows instead of reading the rest of a list
212
+ * whose answer is already `null`. `List<T>` includes `Thunk<T>`, so that is the
213
+ * difference between answering and never returning on an unbounded lazy list —
214
+ * and at `maxLength` = 128 KiB, overflow is an ordinary outcome for a stream,
215
+ * not an exotic one. Since a single vector is never `null`, only a merge can
216
+ * reach the absorbing element, so the stop lags the element that crossed the cap
217
+ * by at most one doubling of the run size (measured: 65 536 elements read for a
218
+ * cap crossed at 32 769, and 4 for a cap crossed at 3).
219
+ *
220
+ * @type {(unpackConcat: _UnpackConcat) => Absorbing<Nullable<Unpacked>>}
221
+ */
222
+ const tryUnpackConcat = unpackConcat => ({
223
+ monoid: {
224
+ identity: unpackEmpty,
225
+ operation: a => b =>
226
+ a === null || b === null || a.length + b.length > maxLength
227
+ ? null
228
+ : unpackConcat(a)(b)
228
229
  },
229
- end: ({stack}) => pack(stack.reduce((p, c) => unpackConcat(c)(p), unpackEmpty))
230
+ absorbing: null,
230
231
  })
231
232
 
232
233
  /**
233
- * Concatenates a list of unpacked vectors using a binary-counter accumulator,
234
- * giving O(n log n) total `bigint` shifting work instead of the O(n²) of a
235
- * naive left fold.
236
- *
237
- * Slot `i` of `result` holds an already-combined run of the most recent
238
- * `2 ** i` elements. Each arriving element "carries" upward, merging only with
239
- * runs of comparable size — exactly like incrementing a binary number — so
240
- * every merge joins two runs of similar length. Left-to-right element order is
241
- * preserved: `unpackConcat(old)(cur)` keeps the earlier run on the left, and
242
- * the final reduce prepends higher (earlier) slots in front of accumulated
243
- * later runs. An empty list yields `unpackEmpty`.
234
+ * Concatenates a list of unpacked vectors, or `null` if the result would be
235
+ * longer than `maxLength`.
244
236
  *
245
- * Returns `null` as soon as the accumulated length exceeds `maxLength`, which
246
- * `tryFold` propagates by abandoning the rest of the list.
237
+ * `monoid.foldAbsorbing` reduces as a balanced binary tree, so each merge joins
238
+ * two runs of comparable size O(n log n) total `bigint` shifting work instead
239
+ * of the O(n²) a left fold would spend growing one accumulator against small
240
+ * operands — and stops reading at the first overflow.
247
241
  *
248
242
  * This is the bit-vector analogue of a builder that accumulates appended pieces
249
243
  * and materializes the combined result on demand, such as `StringBuilder`
@@ -251,10 +245,29 @@ const listToVecOp = unpackConcat => ({
251
245
  *
252
246
  * @param {_UnpackConcat} unpackConcat
253
247
  */
254
- const unpackListToVec = unpackConcat => tryFold(listToVecOp(unpackConcat))
248
+ const unpackListToVec = unpackConcat =>
249
+ compose(foldAbsorbing(tryUnpackConcat(unpackConcat)))(nullableMap(pack))
250
+
251
+ /**
252
+ * Concatenates a list of `I` values into one vector, mapping each element to
253
+ * its `Unpacked` form first; `null` when the result would exceed `maxLength`.
254
+ *
255
+ * The concatenation counterpart of {@link mappedChunkList}. Everything about
256
+ * the operation is fixed except how one element becomes `Unpacked`, so each
257
+ * element type supplies just that map. The `bo` parameter is structural rather
258
+ * than a whole `BitOrder` because `bo`'s own body applies this before the
259
+ * record exists.
260
+ *
261
+ * @type {<I>(g: (i: I) => Unpacked) => (bo: { readonly unpackConcat: _UnpackConcat }) => (list: List<I>) => Nullable<Vec>}
262
+ */
263
+ const mappedListToVec = g => ({ unpackConcat }) => {
264
+ const f = unpackListToVec(unpackConcat)
265
+ const mg = map(g)
266
+ return list => f(mg(list))
267
+ }
255
268
 
256
269
  /** @type {(base: _Base) => BitOrder} */
257
- const bo = ({ front, removeFront, norm, uintCmp, unpackSplit, unpackConcatUint }) => {
270
+ const bo = ({ norm, uintCmp, unpackSplit, unpackConcatUint }) => {
258
271
  /** @param {bigint} len */
259
272
  const unpackPopFront = len => {
260
273
  const m = mask(len)
@@ -265,6 +278,19 @@ const bo = ({ front, removeFront, norm, uintCmp, unpackSplit, unpackConcatUint }
265
278
  return /** @type {const} */([uint & m, { length: v.length - len, uint: rest }])
266
279
  }
267
280
  }
281
+ // `front` and `removeFront` are the two projections of `unpackPopFront`,
282
+ // so each bit order supplies only `unpackSplit` and both fall out of it.
283
+ // `pack` re-masks, so `removeFront` can hand on the unmasked rest.
284
+ /** @type {(len: bigint) => (v: Vec) => bigint} */
285
+ const front = len => {
286
+ const f = unpackPopFront(len)
287
+ return v => f(unpack(v))[0]
288
+ }
289
+ /** @type {(len: bigint) => (v: Vec) => Vec} */
290
+ const removeFront = len => {
291
+ const f = unpackPopFront(len)
292
+ return v => pack(f(unpack(v))[1])
293
+ }
268
294
  /** @type {_UnpackConcat} */
269
295
  const unpackConcat = a => b => ({
270
296
  length: a.length + b.length,
@@ -284,9 +310,7 @@ const bo = ({ front, removeFront, norm, uintCmp, unpackSplit, unpackConcatUint }
284
310
  const bu = unpack(b)
285
311
  return pack(unpackConcat(au)(bu))
286
312
  }
287
- /** @param {List<Vec>} list */
288
- const tryListToVec = list =>
289
- unpackListToVec(unpackConcat)(map(unpack)(list))
313
+ const tryListToVec = mappedListToVec(unpack)({ unpackConcat })
290
314
  return {
291
315
  front,
292
316
  removeFront,
@@ -310,7 +334,8 @@ const bo = ({ front, removeFront, norm, uintCmp, unpackSplit, unpackConcatUint }
310
334
  unpackConcat,
311
335
  startsWith: prefix => {
312
336
  const { length: n, uint: u } = unpack(prefix)
313
- return v => length(v) < n ? false : popFront(n)(v)[0] === u
337
+ const f = front(n)
338
+ return v => length(v) < n ? false : f(v) === u
314
339
  }
315
340
  }
316
341
  }
@@ -327,14 +352,6 @@ const lsbUnpackConcatUint =
327
352
  * Usually associated with Little-Endian (LE) byte order.
328
353
  */
329
354
  export const lsb = bo({
330
- front: len => {
331
- const m = mask(len)
332
- return v => uint(v) & m
333
- },
334
- removeFront: len => v => {
335
- const { length, uint } = unpack(v)
336
- return vec(length - len)(uint >> len)
337
- },
338
355
  norm: ({ uint: a }) => ({ uint: b }) => () =>
339
356
  ({ a, b }),
340
357
  uintCmp: a => b => {
@@ -353,17 +370,6 @@ export const lsb = bo({
353
370
  * Usually associated with Big-Endian (BE) byte order.
354
371
  */
355
372
  export const msb = bo({
356
- front: len => {
357
- const m = mask(len)
358
- return v => {
359
- const { length, uint } = unpack(v)
360
- return (uint >> (length - len)) & m
361
- }
362
- },
363
- removeFront: len => v => {
364
- const { length, uint } = unpack(v)
365
- return vec(length - len)(uint)
366
- },
367
373
  norm: ({ length: al, uint: a }) => ({ length: bl, uint: b }) => len =>
368
374
  ({ a: a << (len - al), b: b << (len - bl) }),
369
375
  uintCmp: cmp,
@@ -378,9 +384,7 @@ export const msb = bo({
378
384
  *
379
385
  * @type {(_: BitOrder) => (list: List<number>) => Nullable<Vec>}
380
386
  */
381
- export const tryU8ListToVec = ({ unpackConcat }) => list =>
382
- unpackListToVec(unpackConcat)(
383
- map(/** @type {(_: number) => Unpacked} */b => ({ length: 8n, uint: BigInt(b) }))(list))
387
+ export const tryU8ListToVec = mappedListToVec(u8ToUnpacked)
384
388
 
385
389
  /**
386
390
  * Converts a list of unsigned 8-bit integers to a bit vector using the provided bit order.
@@ -1,3 +1,8 @@
1
+ /**
2
+ * @import { Sign } from '../function/compare/types.ts'
3
+ * @import { Vec, BitOrder } from './types.ts'
4
+ * @import { List } from '../list/types.ts'
5
+ */
1
6
  export declare const proof: {
2
7
  fromSentinel: () => void;
3
8
  examples: {
@@ -47,6 +52,7 @@ export declare const proof: {
47
52
  };
48
53
  u8ListToVec: () => () => void;
49
54
  tryListToVecOverflow: () => void;
55
+ tryListToVecUnbounded: () => void;
50
56
  listToVecOverflow: {
51
57
  throw: () => void;
52
58
  };
@@ -1,10 +1,13 @@
1
+ /**
2
+ * @import { Sign } from '../function/compare/types.ts'
3
+ * @import { Vec, BitOrder } from './types.ts'
4
+ * @import { List } from '../list/types.ts'
5
+ */
6
+
1
7
  import { assert, assertEq } from '../../asserts/module.f.mjs'
2
8
  import { mask } from '../bigint/module.f.mjs'
3
- /** @import { Sign } from '../function/compare/types.ts' */
4
9
  import { asBase, asNominal } from '../nominal/module.f.mjs'
5
- /** @import { Vec, BitOrder } from './types.ts' */
6
10
  import { length, empty, uint, vec, lsb, msb, repeat, vec8, maxLength, u8ListToVec, tryU8ListToVec, u8List, chunkList, fromSentinel } from './module.f.mjs'
7
- /** @import { List } from '../list/types.ts' */
8
11
  import { repeat as listRepeat, toArray } from '../list/module.f.mjs'
9
12
 
10
13
  /** @type {(a: bigint) => Vec} */
@@ -190,9 +193,9 @@ export const proof = {
190
193
  },
191
194
  removeBack: () => {
192
195
  const v = vec(17n)(0x12345n)
193
- assertEq(v, unsafeVec(0x12345n), (/** @type {bigint} */ (asBase(v))).toString(16))
196
+ assertEq(v, unsafeVec(0x12345n), (asBase(v)).toString(16))
194
197
  const r = lsb.removeFront(9n)(v)
195
- assertEq(r, unsafeVec(0x91n), (/** @type {bigint} */ (asBase(r))).toString(16))
198
+ assertEq(r, unsafeVec(0x91n), (asBase(r)).toString(16))
196
199
  },
197
200
  uint: [
198
201
  // 0
@@ -421,6 +424,29 @@ export const proof = {
421
424
  const list = [vec(maxLength)(1n), vec(1n)(1n)]
422
425
  assertEq(lsb.tryListToVec(list), null)
423
426
  assertEq(msb.tryListToVec(list), null)
427
+ // Overflow is an absorbing element, so it survives every later
428
+ // combination: here the failed pair ends up on the left of the last
429
+ // one, and on the right in the two-element case above.
430
+ /** @type {List<Vec>} */
431
+ const longer = [vec(maxLength)(1n), vec(1n)(1n), vec(1n)(1n)]
432
+ assertEq(lsb.tryListToVec(longer), null)
433
+ assertEq(msb.tryListToVec(longer), null)
434
+ },
435
+ tryListToVecUnbounded: () => {
436
+ // `List` includes `Thunk`, so an unbounded lazy list is a legal input —
437
+ // and at 128 KiB, `maxLength` is an ordinary amount for a stream to
438
+ // exceed. Overflow being absorbing is what lets the fold answer instead
439
+ // of reading forever: each element here is half of `maxLength`, so the
440
+ // total crosses the cap at the third and the merge that sees it happens
441
+ // at the fourth. The rest of the list asserts it is never read.
442
+ const half = vec(maxLength / 2n)(1n)
443
+ /** @type {(n: number) => List<Vec>} */
444
+ const from = n => () => {
445
+ assert(n <= 8)
446
+ return { first: half, tail: from(n + 1) }
447
+ }
448
+ assertEq(lsb.tryListToVec(from(1)), null)
449
+ assertEq(msb.tryListToVec(from(1)), null)
424
450
  },
425
451
  listToVecOverflow: {
426
452
  // Same oversized input, but through the throwing `listToVec` wrapper.
@@ -2,8 +2,12 @@
2
2
  * Lookup operations for persistent B-tree structures.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { TNode } from '../types/types.ts'
7
+ * @import { Compare } from '../../function/compare/types.ts'
8
+ * @import { KeyOf } from '../../array/types.ts'
9
+ * @import { First, Path, PathItem, Result } from './types.ts'
5
10
  */
6
- /** @import { TNode } from '../types/types.ts' */
7
11
  import type { TNode } from '../types/types.ts';
8
12
  import type { Compare } from '../../function/compare/types.ts';
9
13
  import type { First, Result } from './types.ts';
@@ -2,14 +2,14 @@
2
2
  * Lookup operations for persistent B-tree structures.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { TNode } from '../types/types.ts'
7
+ * @import { Compare } from '../../function/compare/types.ts'
8
+ * @import { KeyOf } from '../../array/types.ts'
9
+ * @import { First, Path, PathItem, Result } from './types.ts'
5
10
  */
6
- /** @import { TNode } from '../types/types.ts' */
7
11
 
8
12
  import { index3, index5 } from '../../function/compare/module.f.mjs'
9
- /** @import { Compare } from '../../function/compare/types.ts' */
10
-
11
- /** @import { KeyOf } from '../../array/types.ts' */
12
- /** @import { First, Path, PathItem, Result } from './types.ts' */
13
13
 
14
14
  /** @type {<T>(item: PathItem<T>) => TNode<T>} */
15
15
  const child = item => {
@@ -1,4 +1,8 @@
1
- /** @import { Unknown } from '../../../media/json/types.ts' */
1
+ /**
2
+ * @import { Unknown } from '../../../media/json/types.ts'
3
+ * @import { Result } from './types.ts'
4
+ * @import { TNode } from '../types/types.ts'
5
+ */
2
6
  declare const test: () => void;
3
7
  export declare const proof: typeof test;
4
8
  export {};
@@ -1,11 +1,13 @@
1
- /** @import { Unknown } from '../../../media/json/types.ts' */
1
+ /**
2
+ * @import { Unknown } from '../../../media/json/types.ts'
3
+ * @import { Result } from './types.ts'
4
+ * @import { TNode } from '../types/types.ts'
5
+ */
2
6
 
3
- /** @import { Result } from './types.ts' */
4
7
  import { find as btreeFind } from './module.f.mjs'
5
8
  import { map, toArray } from '../../list/module.f.mjs'
6
9
  import { stringify } from '../../../media/json/module.f.mjs'
7
10
  import { sort } from '../../object/module.f.mjs'
8
- /** @import { TNode } from '../types/types.ts' */
9
11
  import { cmp } from '../../string/module.f.mjs'
10
12
  import { set as setSet } from '../set/module.f.mjs'
11
13
  import { assertEq } from '../../../asserts/module.f.mjs'
@@ -2,6 +2,9 @@
2
2
  * Core persistent B-tree construction and traversal helpers.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { List, Thunk } from '../list/types.ts'
7
+ * @import { TNode, Tree } from './types/types.ts'
5
8
  */
6
9
  import type { List } from '../list/types.ts';
7
10
  import type { Tree } from './types/types.ts';
@@ -2,12 +2,13 @@
2
2
  * Core persistent B-tree construction and traversal helpers.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { List, Thunk } from '../list/types.ts'
7
+ * @import { TNode, Tree } from './types/types.ts'
5
8
  */
6
9
 
7
10
  import { flat } from '../list/module.f.mjs'
8
- /** @import { List, Thunk } from '../list/types.ts' */
9
11
  import { map } from '../nullable/module.f.mjs'
10
- /** @import { TNode, Tree } from './types/types.ts' */
11
12
 
12
13
  /** @type {<T>(node: TNode<T>) => Thunk<T>} */
13
14
  const nodeValues
@@ -1,4 +1,8 @@
1
- /** @import { Unknown } from '../../media/json/types.ts' */
1
+ /**
2
+ * @import { Unknown } from '../../media/json/types.ts'
3
+ * @import { TNode } from './types/types.ts'
4
+ * @import { List, Result } from '../list/types.ts'
5
+ */
2
6
  declare const valueTest1: () => void;
3
7
  declare const valuesTest2: () => void;
4
8
  declare const findTrue: () => void;
@@ -1,11 +1,13 @@
1
- /** @import { Unknown } from '../../media/json/types.ts' */
1
+ /**
2
+ * @import { Unknown } from '../../media/json/types.ts'
3
+ * @import { TNode } from './types/types.ts'
4
+ * @import { List, Result } from '../list/types.ts'
5
+ */
2
6
 
3
- /** @import { TNode } from './types/types.ts' */
4
7
  import { values } from './module.f.mjs'
5
8
  import { stringify as jsonStringify } from '../../media/json/module.f.mjs'
6
9
  import { sort } from '../object/module.f.mjs'
7
10
  import { cmp } from '../string/module.f.mjs'
8
- /** @import { List, Result } from '../list/types.ts' */
9
11
  import { next, toArray } from '../list/module.f.mjs'
10
12
  import { set as setSet } from './set/module.f.mjs'
11
13
  import { value, find as findFind } from './find/module.f.mjs'
@@ -1,3 +1,13 @@
1
+ /**
2
+ * Removal operations for persistent B-tree structures.
3
+ *
4
+ * @module
5
+ *
6
+ * @import { Leaf1, TNode, Branch1, Branch3, Branch5, Tree } from '../types/types.ts'
7
+ * @import { Compare } from '../../function/compare/types.ts'
8
+ * @import { Path, PathItem } from '../find/types.ts'
9
+ * @import { Tuple } from '../../array/types.ts'
10
+ */
1
11
  import type { Leaf1, TNode, Branch1, Branch3, Branch5, Tree } from '../types/types.ts';
2
12
  import type { Compare } from '../../function/compare/types.ts';
3
13
  import type { Path } from '../find/types.ts';
@@ -16,6 +26,7 @@ export declare const proof: {
16
26
  throw: {
17
27
  reduceValue0DefaultBranch: () => void;
18
28
  reduceValue2DefaultBranch: () => void;
29
+ initValue0DefaultBranch: () => void;
19
30
  initValue1DefaultBranch: () => void;
20
31
  };
21
32
  };
@@ -2,19 +2,16 @@
2
2
  * Removal operations for persistent B-tree structures.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Leaf1, TNode, Branch1, Branch3, Branch5, Tree } from '../types/types.ts'
7
+ * @import { Compare } from '../../function/compare/types.ts'
8
+ * @import { Path, PathItem } from '../find/types.ts'
9
+ * @import { Tuple } from '../../array/types.ts'
5
10
  */
6
- import { collapseRoot } from '../types/module.f.mjs'
7
- /** @import { Leaf1, TNode, Branch1, Branch3, Branch5, Tree } from '../types/types.ts' */
8
-
9
- /** @import { Compare } from '../../function/compare/types.ts' */
10
11
 
12
+ import { collapseRoot } from '../types/module.f.mjs'
11
13
  import { find } from '../find/module.f.mjs'
12
- /** @import { Path, PathItem } from '../find/types.ts' */
13
-
14
14
  import { fold, concat, next } from '../../list/module.f.mjs'
15
-
16
- /** @import { Tuple } from '../../array/types.ts' */
17
-
18
15
  import { map } from '../../nullable/module.f.mjs'
19
16
 
20
17
  /**
@@ -133,7 +130,7 @@ export const nodeRemove = c => node => {
133
130
  const { first, tail } = find(c)(node)
134
131
  /** @type {(n: TNode<T>) => (f: (v: T) => PathItem<T>) => _RemovePath<T>} */
135
132
  const branch = n => f => {
136
- const [v, p] = path(/** @type {Path<T>} */(null))(n)
133
+ const [v, p] = path(null)(n)
137
134
  return { first: p.first, tail: concat(p.tail)({ first: f(v), tail }) }
138
135
  }
139
136
  const [i, n] = first
@@ -180,6 +177,9 @@ export const proof = {
180
177
  reduceValue2DefaultBranch: () => {
181
178
  reduceValue2([['leaf']])([['x'], 's', ['y']])
182
179
  },
180
+ initValue0DefaultBranch: () => {
181
+ initValue0(null)([['x'], 's', [['a'], 'b', ['c']]])
182
+ },
183
183
  initValue1DefaultBranch: () => {
184
184
  initValue1(null)([[['a'], 'b', ['c']], 'd', ['e']])
185
185
  },
@@ -1,3 +1,6 @@
1
+ /**
2
+ * @import { TNode } from '../types/types.ts'
3
+ */
1
4
  declare const test: () => void;
2
5
  declare const test2: () => void;
3
6
  declare const test3: () => void;
@@ -1,5 +1,8 @@
1
+ /**
2
+ * @import { TNode } from '../types/types.ts'
3
+ */
4
+
1
5
  import { nodeRemove } from './module.f.mjs'
2
- /** @import { TNode } from '../types/types.ts' */
3
6
  import { set as setSet } from '../set/module.f.mjs'
4
7
  import { cmp } from '../../string/module.f.mjs'
5
8
  import { stringify } from '../../../media/json/module.f.mjs'
@@ -1,3 +1,12 @@
1
+ /**
2
+ * Insertion and update operations for persistent B-tree structures.
3
+ *
4
+ * @module
5
+ *
6
+ * @import { Branch1, Branch3, Branch5, Branch7, TNode, Tree } from '../types/types.ts'
7
+ * @import { First, PathItem, Result } from '../find/types.ts'
8
+ * @import { Compare } from '../../function/compare/types.ts'
9
+ */
1
10
  import type { Branch1, Branch3, TNode, Tree } from '../types/types.ts';
2
11
  import type { Compare } from '../../function/compare/types.ts';
3
12
  export type _Branch1To3<T> = Branch1<T> | Branch3<T>;
@@ -2,16 +2,16 @@
2
2
  * Insertion and update operations for persistent B-tree structures.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Branch1, Branch3, Branch5, Branch7, TNode, Tree } from '../types/types.ts'
7
+ * @import { First, PathItem, Result } from '../find/types.ts'
8
+ * @import { Compare } from '../../function/compare/types.ts'
5
9
  */
6
- import { collapseRoot } from '../types/module.f.mjs'
7
- /** @import { Branch1, Branch3, Branch5, Branch7, TNode, Tree } from '../types/types.ts' */
8
10
 
11
+ import { collapseRoot } from '../types/module.f.mjs'
9
12
  import { find } from '../find/module.f.mjs'
10
- /** @import { First, PathItem, Result } from '../find/types.ts' */
11
-
12
- /** @import { Compare } from '../../function/compare/types.ts' */
13
-
14
13
  import { fold } from '../../list/module.f.mjs'
14
+ import { assert } from '../../../asserts/module.f.mjs'
15
15
 
16
16
  /**
17
17
  * @template T
@@ -81,30 +81,27 @@ const nodeSet = c => g => node => {
81
81
  // insert
82
82
  const value = g(null)
83
83
  // TODO: remove after TSGO fix the regression.
84
- // const _xl: 1|2 = x.length
85
- switch (x.length) {
84
+ const xL = x.length
85
+ // See https://github.com/microsoft/typescript-go/issues/4613
86
+ assert(xL === 1 || xL === 2)
87
+ switch (xL) {
86
88
  case 1: { return [[x[0], value]] }
87
89
  case 2: { return [[x[0]], value, [x[1]]] }
88
90
  }
89
- // TODO: remove after TSGO fix the regression.
90
- // See https://github.com/microsoft/typescript-go/issues/4613
91
- throw 'unreachable'
92
91
  }
93
92
  case 3: {
94
93
  // replace
95
94
  // TODO: remove after TSGO fix the regression.
96
- // const _xl: 2|5 = x.length
97
- switch (x.length) {
95
+ const xL = x.length
96
+ // See https://github.com/microsoft/typescript-go/issues/4613
97
+ assert(xL === 2 || xL === 5)
98
+ switch (xL) {
98
99
  case 2: { return [[x[0], g(x[1])]] }
99
100
  case 5: { return [[x[0], x[1], x[2], g(x[3]), x[4]]] }
100
101
  }
101
- // TODO: remove after TSGO fix the regression.
102
- throw 'unreachable'
103
102
  }
104
103
  case 4: {
105
104
  // insert
106
- // TODO: remove after TSGO fix the regression.
107
- // const _xl: 2 = x.length
108
105
  const [v0, v1] = x
109
106
  return [[v0], v1, [g(null)]]
110
107
  }
@@ -1 +1,4 @@
1
+ /**
2
+ * @import { TNode } from '../types/types.ts'
3
+ */
1
4
  export declare const proof: (() => void)[];