functionalscript 0.36.0 → 0.38.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 (523) hide show
  1. package/README.md +1 -1
  2. package/{fs → fjs}/asn.1/module.f.js +1 -1
  3. package/{fs → fjs}/asn.1/proof.f.js +32 -94
  4. package/fjs/asserts/module.f.d.ts +36 -0
  5. package/fjs/asserts/module.f.js +39 -0
  6. package/fjs/asserts/proof.f.d.ts +11 -0
  7. package/fjs/asserts/proof.f.js +18 -0
  8. package/{fs → fjs}/base_n/module.f.js +3 -3
  9. package/{fs → fjs}/base_n/proof.f.js +15 -39
  10. package/{fs → fjs/basen}/base128/module.f.d.ts +1 -1
  11. package/{fs → fjs/basen}/base128/module.f.js +1 -1
  12. package/{fs → fjs/basen}/base128/proof.f.js +3 -3
  13. package/{fs → fjs/basen}/base64/module.f.d.ts +2 -2
  14. package/{fs → fjs/basen}/base64/module.f.js +25 -15
  15. package/{fs → fjs/basen}/base64/proof.f.d.ts +2 -0
  16. package/{fs → fjs/basen}/base64/proof.f.js +26 -6
  17. package/{fs → fjs/basen}/cbase32/module.f.d.ts +2 -2
  18. package/{fs → fjs/basen}/cbase32/module.f.js +2 -2
  19. package/{fs → fjs/basen}/cbase32/proof.f.js +16 -43
  20. package/fjs/bnf/data/module.f.d.ts +52 -0
  21. package/{fs → fjs}/bnf/data/module.f.js +56 -6
  22. package/{fs → fjs}/bnf/data/proof.f.d.ts +1 -0
  23. package/{fs → fjs}/bnf/data/proof.f.js +59 -24
  24. package/{fs → fjs}/bnf/descent/module.f.d.ts +4 -14
  25. package/fjs/bnf/descent/module.f.js +124 -0
  26. package/{fs → fjs}/bnf/descent/proof.f.d.ts +1 -0
  27. package/{fs → fjs}/bnf/descent/proof.f.js +59 -28
  28. package/{fs → fjs}/bnf/ll1/module.f.d.ts +4 -4
  29. package/{fs → fjs}/bnf/ll1/module.f.js +15 -13
  30. package/{fs → fjs}/bnf/ll1/proof.f.d.ts +1 -0
  31. package/{fs → fjs}/bnf/ll1/proof.f.js +33 -16
  32. package/{fs → fjs}/bnf/module.f.d.ts +19 -5
  33. package/{fs → fjs}/bnf/module.f.js +14 -15
  34. package/fjs/bnf/proof.f.js +69 -0
  35. package/{fs → fjs}/bnf/testlib.f.js +2 -2
  36. package/{fs → fjs}/cas/cli/module.f.js +7 -7
  37. package/{fs → fjs}/cas/cli/proof.f.d.ts +4 -1
  38. package/{fs → fjs}/cas/cli/proof.f.js +37 -74
  39. package/fjs/cas/evo/mcp/module.f.d.ts +19 -0
  40. package/fjs/cas/evo/mcp/module.f.js +56 -0
  41. package/fjs/cas/evo/mcp/proof.f.d.ts +9 -0
  42. package/fjs/cas/evo/mcp/proof.f.js +95 -0
  43. package/fjs/cas/evo/module.f.d.ts +138 -0
  44. package/fjs/cas/evo/module.f.js +309 -0
  45. package/fjs/cas/evo/proof.f.d.ts +32 -0
  46. package/fjs/cas/evo/proof.f.js +453 -0
  47. package/fjs/cas/mcp/module.f.d.ts +49 -0
  48. package/fjs/cas/mcp/module.f.js +267 -0
  49. package/{fs → fjs}/cas/mcp/proof.f.d.ts +7 -2
  50. package/{fs → fjs}/cas/mcp/proof.f.js +116 -60
  51. package/{fs → fjs}/cas/module.f.d.ts +10 -0
  52. package/{fs → fjs}/cas/module.f.js +36 -10
  53. package/{fs → fjs}/cas/proof.f.d.ts +8 -2
  54. package/{fs → fjs}/cas/proof.f.js +85 -94
  55. package/{fs → fjs}/ci/bun/module.f.js +2 -2
  56. package/{fs → fjs}/ci/common/module.f.d.ts +2 -2
  57. package/{fs → fjs}/ci/common/module.f.js +4 -4
  58. package/fjs/ci/config/module.f.d.ts +42 -0
  59. package/{fs → fjs}/ci/config/module.f.js +6 -8
  60. package/fjs/ci/deno/module.f.js +20 -0
  61. package/{fs → fjs}/ci/module.f.js +9 -9
  62. package/{fs → fjs}/ci/node/module.f.d.ts +1 -1
  63. package/{fs → fjs}/ci/node/module.f.js +3 -5
  64. package/{fs → fjs}/ci/playwright/module.f.js +3 -3
  65. package/{fs → fjs}/ci/proof.f.js +27 -22
  66. package/{fs → fjs}/ci/rust/module.f.js +11 -3
  67. package/{fs → fjs}/cli/module.f.js +3 -3
  68. package/{fs → fjs}/cli/proof.f.js +25 -66
  69. package/{fs/types → fjs/common}/monoid/module.f.d.ts +1 -1
  70. package/{fs/types → fjs/common}/monoid/proof.f.js +4 -9
  71. package/{fs → fjs}/crypto/hmac/module.f.js +2 -2
  72. package/{fs → fjs}/crypto/hmac/proof.f.js +9 -17
  73. package/{fs → fjs}/crypto/pow/module.f.js +3 -3
  74. package/fjs/crypto/pow/proof.f.js +111 -0
  75. package/{fs → fjs}/crypto/secp/module.f.js +2 -2
  76. package/{fs → fjs}/crypto/secp/proof.f.js +14 -35
  77. package/{fs → fjs}/crypto/sha2/module.f.js +2 -2
  78. package/{fs → fjs}/crypto/sha2/proof.f.js +23 -54
  79. package/{fs → fjs}/crypto/sign/module.f.d.ts +0 -5
  80. package/{fs → fjs}/crypto/sign/module.f.js +11 -8
  81. package/{fs → fjs}/crypto/sign/proof.f.js +36 -105
  82. package/{fs → fjs}/crypto/vdf/module.f.js +1 -1
  83. package/{fs → fjs}/crypto/vdf/proof.f.js +23 -64
  84. package/{fs → fjs}/dev/module.f.js +6 -6
  85. package/{fs → fjs}/dev/package_json/module.f.js +6 -6
  86. package/{fs → fjs}/dev/package_json/proof.f.js +9 -9
  87. package/{fs → fjs}/dev/proof.f.js +3 -5
  88. package/{fs → fjs}/djs/ast/module.f.js +2 -2
  89. package/{fs → fjs}/djs/ast/proof.f.js +8 -16
  90. package/fjs/djs/examples/m.f.d.ts +2 -0
  91. package/{fs → fjs}/djs/module.f.d.ts +1 -1
  92. package/{fs → fjs}/djs/module.f.js +5 -5
  93. package/{fs → fjs}/djs/parser/module.f.d.ts +5 -0
  94. package/{fs → fjs}/djs/parser/module.f.js +24 -4
  95. package/{fs → fjs}/djs/parser/proof.f.js +145 -407
  96. package/{fs → fjs}/djs/proof.f.js +16 -39
  97. package/{fs → fjs}/djs/serializer/module.f.js +6 -6
  98. package/{fs → fjs}/djs/serializer/proof.f.js +18 -43
  99. package/fjs/djs/tokenizer/module.f.d.ts +24 -0
  100. package/fjs/djs/tokenizer/module.f.js +472 -0
  101. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.d.ts +4 -3
  102. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.js +447 -446
  103. package/{fs → fjs}/djs/transpiler/module.f.d.ts +5 -0
  104. package/{fs → fjs}/djs/transpiler/module.f.js +21 -11
  105. package/{fs → fjs}/djs/transpiler/proof.f.d.ts +3 -0
  106. package/fjs/djs/transpiler/proof.f.js +67 -0
  107. package/{fs → fjs}/effects/memory/module.f.js +4 -4
  108. package/{fs → fjs}/effects/memory/proof.f.js +11 -24
  109. package/{fs → fjs}/effects/module.f.js +1 -1
  110. package/{fs → fjs}/effects/node/memory/module.js +2 -2
  111. package/{fs → fjs}/effects/node/memory/proof.js +8 -15
  112. package/{fs → fjs}/effects/node/module.d.ts +1 -1
  113. package/{fs → fjs}/effects/node/module.f.d.ts +1 -1
  114. package/{fs → fjs}/effects/node/module.f.js +7 -7
  115. package/{fs → fjs}/effects/node/module.js +13 -13
  116. package/{fs → fjs}/effects/node/proof.f.d.ts +1 -0
  117. package/{fs → fjs}/effects/node/proof.f.js +106 -292
  118. package/{fs → fjs}/effects/node/virtual/module.f.js +7 -7
  119. package/{fs → fjs}/effects/node/virtual/proof.f.d.ts +2 -0
  120. package/{fs → fjs}/effects/node/virtual/proof.f.js +44 -30
  121. package/{fs → fjs}/effects/proof.f.js +18 -47
  122. package/fjs/emergent_testing/all.test.js +4 -0
  123. package/{fs → fjs}/emergent_testing/example.f.d.ts +1 -1
  124. package/{fs → fjs}/emergent_testing/module.f.js +6 -6
  125. package/{fs → fjs}/emergent_testing/proof.f.d.ts +19 -17
  126. package/{fs → fjs}/emergent_testing/proof.f.js +14 -14
  127. package/fjs/emergent_testing/scenarios/all.js +1 -0
  128. package/{fs → fjs}/fsc/bnf.f.js +2 -2
  129. package/{fs → fjs}/fsc/json.f.js +1 -1
  130. package/{fs → fjs}/fsc/module.f.js +7 -7
  131. package/{fs → fjs}/fsc/proof.f.js +16 -38
  132. package/{fs → fjs}/fsm/module.f.js +9 -9
  133. package/{fs → fjs}/fsm/proof.f.js +12 -19
  134. package/{fs → fjs}/js/tokenizer/module.f.js +7 -7
  135. package/{fs → fjs}/js/tokenizer/proof.f.js +5 -5
  136. package/{fs → fjs}/mcp/module.f.d.ts +20 -13
  137. package/{fs → fjs}/mcp/module.f.js +16 -9
  138. package/{fs → fjs}/mcp/proof.f.js +17 -17
  139. package/{fs → fjs}/mcp/stdio/module.f.d.ts +4 -4
  140. package/{fs → fjs}/mcp/stdio/module.f.js +12 -12
  141. package/{fs → fjs}/mcp/stdio/proof.f.js +10 -10
  142. package/{fs → fjs/media}/html/module.f.d.ts +3 -3
  143. package/{fs → fjs/media}/html/module.f.js +9 -9
  144. package/{fs → fjs/media}/html/proof.f.js +12 -33
  145. package/fjs/media/json/module.f.d.ts +50 -0
  146. package/{fs → fjs/media}/json/module.f.js +7 -7
  147. package/{fs → fjs/media}/json/parser/module.f.d.ts +7 -2
  148. package/{fs → fjs/media}/json/parser/module.f.js +21 -7
  149. package/{fs → fjs/media}/json/parser/proof.f.js +45 -120
  150. package/{fs → fjs/media}/json/proof.f.js +4 -4
  151. package/fjs/media/json/rpc/module.f.d.ts +114 -0
  152. package/{fs → fjs/media}/json/rpc/module.f.js +4 -4
  153. package/{fs → fjs/media}/json/rpc/proof.f.js +4 -4
  154. package/fjs/media/json/schema/module.f.d.ts +78 -0
  155. package/{fs → fjs/media}/json/schema/module.f.js +25 -41
  156. package/{fs → fjs/media}/json/schema/proof.f.js +6 -9
  157. package/{fs → fjs/media}/json/serializer/module.f.d.ts +1 -1
  158. package/{fs → fjs/media}/json/serializer/module.f.js +2 -2
  159. package/{fs → fjs/media}/json/serializer/proof.f.js +12 -29
  160. package/{fs → fjs/media}/json/tokenizer/module.f.d.ts +2 -2
  161. package/{fs → fjs/media}/json/tokenizer/module.f.js +4 -4
  162. package/{fs → fjs/media}/json/tokenizer/proof.f.js +5 -5
  163. package/fjs/media/module.f.d.ts +37 -0
  164. package/fjs/media/module.f.js +23 -0
  165. package/fjs/media/proof.f.d.ts +9 -0
  166. package/fjs/media/proof.f.js +58 -0
  167. package/fjs/media/revision/module.f.d.ts +78 -0
  168. package/fjs/media/revision/module.f.js +122 -0
  169. package/fjs/media/revision/proof.f.d.ts +31 -0
  170. package/fjs/media/revision/proof.f.js +140 -0
  171. package/{fs/mime → fjs/media/type}/module.f.d.ts +6 -6
  172. package/{fs/mime → fjs/media/type}/module.f.js +6 -6
  173. package/{fs/mime → fjs/media/type}/proof.f.js +8 -12
  174. package/fjs/module.f.d.ts +2 -0
  175. package/{fs/fjs → fjs}/module.f.js +9 -9
  176. package/fjs/module.js +4 -0
  177. package/{fs → fjs}/path/module.f.js +2 -2
  178. package/{fs → fjs}/path/proof.f.js +27 -78
  179. package/{fs/fjs → fjs}/proof.f.js +6 -4
  180. package/{fs → fjs}/sul/id/module.f.js +9 -9
  181. package/{fs → fjs}/sul/id/proof.f.js +12 -26
  182. package/{fs → fjs}/sul/level/hash/module.f.js +3 -3
  183. package/{fs → fjs}/sul/level/hash/proof.f.js +8 -8
  184. package/{fs → fjs}/sul/level/literal/module.f.js +5 -5
  185. package/{fs → fjs}/sul/level/literal/proof.f.js +15 -29
  186. package/{fs → fjs}/sul/module.f.js +3 -3
  187. package/{fs → fjs}/sul/proof.f.js +3 -3
  188. package/fjs/text/ascii/proof.f.d.ts +6 -0
  189. package/fjs/text/ascii/proof.f.js +14 -0
  190. package/{fs → fjs}/text/code_point/module.f.js +12 -12
  191. package/{fs → fjs}/text/code_point/proof.f.js +1 -1
  192. package/{fs → fjs}/text/module.f.js +5 -5
  193. package/{fs → fjs}/text/proof.f.js +7 -12
  194. package/{fs → fjs}/text/sgr/module.f.js +2 -2
  195. package/{fs → fjs}/text/sgr/proof.f.js +8 -17
  196. package/{fs → fjs}/text/utf16/module.f.js +6 -6
  197. package/{fs → fjs}/text/utf16/proof.f.js +27 -70
  198. package/{fs → fjs}/text/utf8/module.f.js +22 -17
  199. package/{fs → fjs}/text/utf8/proof.f.js +59 -128
  200. package/{fs → fjs}/types/array/module.f.js +1 -1
  201. package/{fs → fjs}/types/array/proof.f.js +21 -55
  202. package/{fs → fjs}/types/bigfloat/module.f.js +1 -1
  203. package/fjs/types/bigfloat/proof.f.js +217 -0
  204. package/{fs → fjs}/types/bigint/module.f.js +2 -2
  205. package/{fs → fjs}/types/bigint/proof.f.js +51 -147
  206. package/{fs → fjs}/types/bit_vec/module.f.js +8 -8
  207. package/{fs → fjs}/types/bit_vec/proof.f.js +76 -218
  208. package/{fs → fjs}/types/btree/find/module.f.js +1 -1
  209. package/fjs/types/btree/find/proof.f.d.ts +3 -0
  210. package/fjs/types/btree/find/proof.f.js +108 -0
  211. package/{fs → fjs}/types/btree/module.f.js +2 -2
  212. package/fjs/types/btree/proof.f.d.ts +13 -0
  213. package/{fs → fjs}/types/btree/proof.f.js +12 -19
  214. package/{fs → fjs}/types/btree/remove/module.f.js +4 -4
  215. package/fjs/types/btree/remove/proof.f.d.ts +9 -0
  216. package/{fs → fjs}/types/btree/remove/proof.f.js +88 -235
  217. package/{fs → fjs}/types/btree/set/module.f.js +8 -5
  218. package/{fs → fjs}/types/btree/set/proof.f.js +39 -28
  219. package/{fs → fjs}/types/byte_set/module.f.js +2 -2
  220. package/fjs/types/byte_set/proof.f.js +79 -0
  221. package/{fs → fjs}/types/function/compare/proof.f.js +14 -37
  222. package/fjs/types/function/operator/proof.f.d.ts +23 -0
  223. package/{fs → fjs}/types/function/operator/proof.f.js +18 -49
  224. package/{fs → fjs}/types/function/proof.f.js +3 -4
  225. package/{fs → fjs}/types/list/module.f.js +2 -2
  226. package/fjs/types/list/proof.f.d.ts +30 -0
  227. package/{fs → fjs}/types/list/proof.f.js +59 -167
  228. package/{fs → fjs}/types/map/proof.f.js +6 -14
  229. package/fjs/types/nibble_set/proof.f.js +60 -0
  230. package/{fs → fjs}/types/nominal/proof.f.js +5 -10
  231. package/{fs → fjs}/types/nullable/module.f.js +2 -2
  232. package/fjs/types/nullable/proof.f.js +29 -0
  233. package/{fs → fjs}/types/number/module.f.js +5 -5
  234. package/{fs → fjs}/types/number/proof.f.js +10 -25
  235. package/{fs → fjs}/types/object/module.f.js +4 -4
  236. package/{fs → fjs}/types/object/proof.f.js +4 -7
  237. package/{fs → fjs}/types/ordered_map/module.f.js +6 -6
  238. package/{fs → fjs}/types/ordered_map/proof.f.js +3 -3
  239. package/fjs/types/patricia_trie/proof.f.d.ts +13 -0
  240. package/{fs → fjs}/types/patricia_trie/proof.f.js +22 -22
  241. package/{fs → fjs}/types/prime_field/module.f.js +3 -8
  242. package/{fs → fjs}/types/prime_field/proof.f.js +2 -2
  243. package/{fs → fjs}/types/range/module.f.d.ts +1 -1
  244. package/fjs/types/range/module.f.js +2 -0
  245. package/fjs/types/range/proof.f.js +9 -0
  246. package/{fs → fjs}/types/range_map/module.f.js +4 -4
  247. package/{fs → fjs}/types/range_map/proof.f.js +35 -88
  248. package/{fs → fjs}/types/result/module.js +1 -1
  249. package/fjs/types/result/proof.f.d.ts +12 -0
  250. package/fjs/types/result/proof.f.js +31 -0
  251. package/{fs → fjs}/types/rtti/common/module.f.d.ts +36 -1
  252. package/{fs → fjs}/types/rtti/common/module.f.js +48 -4
  253. package/fjs/types/rtti/common/proof.f.d.ts +8 -0
  254. package/fjs/types/rtti/common/proof.f.js +51 -0
  255. package/{fs → fjs}/types/rtti/module.f.d.ts +2 -2
  256. package/{fs → fjs}/types/rtti/module.f.js +1 -1
  257. package/{fs → fjs}/types/rtti/parse/module.f.js +16 -25
  258. package/{fs → fjs}/types/rtti/parse/proof.f.js +9 -20
  259. package/{fs → fjs}/types/rtti/ts/module.f.d.ts +10 -4
  260. package/{fs → fjs}/types/rtti/ts/module.f.js +1 -1
  261. package/{fs → fjs}/types/rtti/ts/proof.f.js +2 -2
  262. package/{fs → fjs}/types/rtti/validate/module.f.js +11 -32
  263. package/{fs → fjs}/types/rtti/validate/proof.f.js +6 -11
  264. package/{fs → fjs}/types/sorted_list/module.f.js +3 -3
  265. package/{fs → fjs}/types/sorted_list/proof.f.js +14 -27
  266. package/{fs → fjs}/types/sorted_set/module.f.js +1 -1
  267. package/{fs → fjs}/types/sorted_set/proof.f.js +20 -45
  268. package/{fs → fjs}/types/string/module.f.js +4 -4
  269. package/fjs/types/string/proof.f.js +77 -0
  270. package/{fs → fjs}/types/string_set/module.f.js +6 -6
  271. package/fjs/types/string_set/proof.f.js +43 -0
  272. package/{fs → fjs}/types/ts/proof.f.d.ts +18 -18
  273. package/{fs → fjs}/types/ts/proof.f.js +16 -43
  274. package/{fs → fjs}/types/uint8array/module.f.js +10 -10
  275. package/{fs → fjs}/types/uint8array/proof.f.d.ts +4 -1
  276. package/{fs → fjs}/types/uint8array/proof.f.js +11 -11
  277. package/{fs → fjs}/website/module.f.js +3 -3
  278. package/fjs/website/proof.f.js +13 -0
  279. package/package.json +8 -8
  280. package/fs/asserts/module.f.d.ts +0 -4
  281. package/fs/asserts/module.f.js +0 -9
  282. package/fs/asserts/proof.f.d.ts +0 -8
  283. package/fs/asserts/proof.f.js +0 -51
  284. package/fs/bnf/data/module.f.d.ts +0 -30
  285. package/fs/bnf/descent/module.f.js +0 -119
  286. package/fs/bnf/proof.f.js +0 -104
  287. package/fs/cas/mcp/module.f.d.ts +0 -36
  288. package/fs/cas/mcp/module.f.js +0 -249
  289. package/fs/ci/config/module.f.d.ts +0 -43
  290. package/fs/ci/deno/module.f.js +0 -16
  291. package/fs/crypto/pow/proof.f.js +0 -161
  292. package/fs/djs/examples/m.f.d.ts +0 -2
  293. package/fs/djs/tokenizer/module.f.d.ts +0 -12
  294. package/fs/djs/tokenizer/module.f.js +0 -62
  295. package/fs/djs/tokenizer/proof.f.d.ts +0 -7
  296. package/fs/djs/tokenizer/proof.f.js +0 -543
  297. package/fs/djs/tokenizer-new/module.f.d.ts +0 -3
  298. package/fs/djs/tokenizer-new/module.f.js +0 -155
  299. package/fs/djs/transpiler/proof.f.js +0 -68
  300. package/fs/emergent_testing/all.test.js +0 -4
  301. package/fs/emergent_testing/scenarios/all.js +0 -1
  302. package/fs/fjs/module.f.d.ts +0 -2
  303. package/fs/fjs/module.js +0 -4
  304. package/fs/json/module.f.d.ts +0 -50
  305. package/fs/json/rpc/module.f.d.ts +0 -114
  306. package/fs/json/schema/module.f.d.ts +0 -77
  307. package/fs/text/ascii/proof.f.d.ts +0 -4
  308. package/fs/text/ascii/proof.f.js +0 -24
  309. package/fs/types/bigfloat/proof.f.js +0 -348
  310. package/fs/types/btree/find/proof.f.js +0 -151
  311. package/fs/types/btree/proof.f.d.ts +0 -7
  312. package/fs/types/btree/remove/proof.f.d.ts +0 -4
  313. package/fs/types/byte_set/proof.f.js +0 -120
  314. package/fs/types/function/operator/proof.f.d.ts +0 -12
  315. package/fs/types/list/proof.f.d.ts +0 -22
  316. package/fs/types/nibble_set/proof.f.js +0 -89
  317. package/fs/types/nullable/proof.f.js +0 -50
  318. package/fs/types/patricia_trie/proof.f.d.ts +0 -7
  319. package/fs/types/range/module.f.js +0 -2
  320. package/fs/types/range/proof.f.d.ts +0 -1
  321. package/fs/types/range/proof.f.js +0 -18
  322. package/fs/types/result/proof.f.d.ts +0 -6
  323. package/fs/types/result/proof.f.js +0 -52
  324. package/fs/types/string/proof.f.js +0 -118
  325. package/fs/types/string_set/proof.f.js +0 -82
  326. package/fs/website/proof.f.js +0 -16
  327. /package/{fs → fjs}/asn.1/module.f.d.ts +0 -0
  328. /package/{fs → fjs}/asn.1/proof.f.d.ts +0 -0
  329. /package/{fs → fjs}/base_n/module.f.d.ts +0 -0
  330. /package/{fs → fjs}/base_n/proof.f.d.ts +0 -0
  331. /package/{fs → fjs/basen}/base128/proof.f.d.ts +0 -0
  332. /package/{fs → fjs/basen}/cbase32/proof.f.d.ts +0 -0
  333. /package/{fs → fjs}/bnf/proof.f.d.ts +0 -0
  334. /package/{fs → fjs}/bnf/testlib.f.d.ts +0 -0
  335. /package/{fs → fjs}/cas/cli/module.f.d.ts +0 -0
  336. /package/{fs → fjs}/ci/bun/module.f.d.ts +0 -0
  337. /package/{fs → fjs}/ci/deno/module.f.d.ts +0 -0
  338. /package/{fs → fjs}/ci/module.f.d.ts +0 -0
  339. /package/{fs → fjs}/ci/playwright/module.f.d.ts +0 -0
  340. /package/{fs → fjs}/ci/proof.f.d.ts +0 -0
  341. /package/{fs → fjs}/ci/rust/module.f.d.ts +0 -0
  342. /package/{fs → fjs}/cli/module.f.d.ts +0 -0
  343. /package/{fs → fjs}/cli/proof.f.d.ts +0 -0
  344. /package/{fs/types → fjs/common}/monoid/module.f.js +0 -0
  345. /package/{fs/types → fjs/common}/monoid/proof.f.d.ts +0 -0
  346. /package/{fs → fjs}/crypto/hmac/module.f.d.ts +0 -0
  347. /package/{fs → fjs}/crypto/hmac/proof.f.d.ts +0 -0
  348. /package/{fs → fjs}/crypto/pow/module.f.d.ts +0 -0
  349. /package/{fs → fjs}/crypto/pow/proof.f.d.ts +0 -0
  350. /package/{fs → fjs}/crypto/secp/module.f.d.ts +0 -0
  351. /package/{fs → fjs}/crypto/secp/proof.f.d.ts +0 -0
  352. /package/{fs → fjs}/crypto/sha2/module.f.d.ts +0 -0
  353. /package/{fs → fjs}/crypto/sha2/proof.f.d.ts +0 -0
  354. /package/{fs → fjs}/crypto/sign/proof.f.d.ts +0 -0
  355. /package/{fs → fjs}/crypto/vdf/module.f.d.ts +0 -0
  356. /package/{fs → fjs}/crypto/vdf/proof.f.d.ts +0 -0
  357. /package/{fs → fjs}/dev/module.f.d.ts +0 -0
  358. /package/{fs → fjs}/dev/package_json/module.f.d.ts +0 -0
  359. /package/{fs → fjs}/dev/package_json/proof.f.d.ts +0 -0
  360. /package/{fs → fjs}/dev/proof.f.d.ts +0 -0
  361. /package/{fs → fjs}/djs/ast/module.f.d.ts +0 -0
  362. /package/{fs → fjs}/djs/ast/proof.f.d.ts +0 -0
  363. /package/{fs → fjs}/djs/examples/input.f.d.ts +0 -0
  364. /package/{fs → fjs}/djs/examples/input.f.js +0 -0
  365. /package/{fs → fjs}/djs/examples/m.f.js +0 -0
  366. /package/{fs → fjs}/djs/parser/proof.f.d.ts +0 -0
  367. /package/{fs → fjs}/djs/proof.f.d.ts +0 -0
  368. /package/{fs → fjs}/djs/serializer/module.f.d.ts +0 -0
  369. /package/{fs → fjs}/djs/serializer/proof.f.d.ts +0 -0
  370. /package/{fs → fjs}/effects/list/module.f.d.ts +0 -0
  371. /package/{fs → fjs}/effects/list/module.f.js +0 -0
  372. /package/{fs → fjs}/effects/memory/module.f.d.ts +0 -0
  373. /package/{fs → fjs}/effects/memory/proof.f.d.ts +0 -0
  374. /package/{fs → fjs}/effects/mock/module.f.d.ts +0 -0
  375. /package/{fs → fjs}/effects/mock/module.f.js +0 -0
  376. /package/{fs → fjs}/effects/module.d.ts +0 -0
  377. /package/{fs → fjs}/effects/module.f.d.ts +0 -0
  378. /package/{fs → fjs}/effects/module.js +0 -0
  379. /package/{fs → fjs}/effects/node/memory/module.d.ts +0 -0
  380. /package/{fs → fjs}/effects/node/memory/proof.d.ts +0 -0
  381. /package/{fs → fjs}/effects/node/virtual/module.f.d.ts +0 -0
  382. /package/{fs → fjs}/effects/proof.f.d.ts +0 -0
  383. /package/{fs → fjs}/emergent_testing/all.test.d.ts +0 -0
  384. /package/{fs → fjs}/emergent_testing/example.f.js +0 -0
  385. /package/{fs → fjs}/emergent_testing/module.f.d.ts +0 -0
  386. /package/{fs → fjs}/emergent_testing/scenarios/all.d.ts +0 -0
  387. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -0
  388. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.js +0 -0
  389. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -0
  390. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.js +0 -0
  391. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.d.ts +0 -0
  392. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.js +0 -0
  393. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.d.ts +0 -0
  394. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.js +0 -0
  395. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.d.ts +0 -0
  396. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.js +0 -0
  397. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.d.ts +0 -0
  398. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.js +0 -0
  399. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.d.ts +0 -0
  400. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.js +0 -0
  401. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.d.ts +0 -0
  402. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.js +0 -0
  403. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.d.ts +0 -0
  404. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.js +0 -0
  405. /package/{fs → fjs}/fsc/bnf.f.d.ts +0 -0
  406. /package/{fs → fjs}/fsc/json.f.d.ts +0 -0
  407. /package/{fs → fjs}/fsc/module.f.d.ts +0 -0
  408. /package/{fs → fjs}/fsc/proof.f.d.ts +0 -0
  409. /package/{fs → fjs}/fsm/module.f.d.ts +0 -0
  410. /package/{fs → fjs}/fsm/proof.f.d.ts +0 -0
  411. /package/{fs → fjs}/js/tokenizer/module.f.d.ts +0 -0
  412. /package/{fs → fjs}/js/tokenizer/proof.f.d.ts +0 -0
  413. /package/{fs → fjs}/mcp/proof.f.d.ts +0 -0
  414. /package/{fs → fjs}/mcp/stdio/proof.f.d.ts +0 -0
  415. /package/{fs → fjs/media}/html/proof.f.d.ts +0 -0
  416. /package/{fs → fjs/media}/json/parser/proof.f.d.ts +0 -0
  417. /package/{fs → fjs/media}/json/proof.f.d.ts +0 -0
  418. /package/{fs → fjs/media}/json/rpc/proof.f.d.ts +0 -0
  419. /package/{fs → fjs/media}/json/schema/proof.f.d.ts +0 -0
  420. /package/{fs → fjs/media}/json/serializer/proof.f.d.ts +0 -0
  421. /package/{fs → fjs/media}/json/tokenizer/proof.f.d.ts +0 -0
  422. /package/{fs/mime → fjs/media/type}/proof.f.d.ts +0 -0
  423. /package/{fs/fjs → fjs}/module.d.ts +0 -0
  424. /package/{fs → fjs}/path/module.f.d.ts +0 -0
  425. /package/{fs → fjs}/path/proof.f.d.ts +0 -0
  426. /package/{fs/fjs → fjs}/proof.f.d.ts +0 -0
  427. /package/{fs → fjs}/sul/id/module.f.d.ts +0 -0
  428. /package/{fs → fjs}/sul/id/proof.f.d.ts +0 -0
  429. /package/{fs → fjs}/sul/level/hash/module.f.d.ts +0 -0
  430. /package/{fs → fjs}/sul/level/hash/proof.f.d.ts +0 -0
  431. /package/{fs → fjs}/sul/level/literal/module.f.d.ts +0 -0
  432. /package/{fs → fjs}/sul/level/literal/proof.f.d.ts +0 -0
  433. /package/{fs → fjs}/sul/module.f.d.ts +0 -0
  434. /package/{fs → fjs}/sul/proof.f.d.ts +0 -0
  435. /package/{fs → fjs}/text/ascii/module.f.d.ts +0 -0
  436. /package/{fs → fjs}/text/ascii/module.f.js +0 -0
  437. /package/{fs → fjs}/text/code_point/module.f.d.ts +0 -0
  438. /package/{fs → fjs}/text/code_point/proof.f.d.ts +0 -0
  439. /package/{fs → fjs}/text/module.f.d.ts +0 -0
  440. /package/{fs → fjs}/text/proof.f.d.ts +0 -0
  441. /package/{fs → fjs}/text/sgr/module.f.d.ts +0 -0
  442. /package/{fs → fjs}/text/sgr/proof.f.d.ts +0 -0
  443. /package/{fs → fjs}/text/utf16/module.f.d.ts +0 -0
  444. /package/{fs → fjs}/text/utf16/proof.f.d.ts +0 -0
  445. /package/{fs → fjs}/text/utf8/module.f.d.ts +0 -0
  446. /package/{fs → fjs}/text/utf8/proof.f.d.ts +0 -0
  447. /package/{fs → fjs}/types/array/module.f.d.ts +0 -0
  448. /package/{fs → fjs}/types/array/proof.f.d.ts +0 -0
  449. /package/{fs → fjs}/types/bigfloat/module.f.d.ts +0 -0
  450. /package/{fs → fjs}/types/bigfloat/proof.f.d.ts +0 -0
  451. /package/{fs → fjs}/types/bigint/module.f.d.ts +0 -0
  452. /package/{fs → fjs}/types/bigint/proof.f.d.ts +0 -0
  453. /package/{fs → fjs}/types/bit_vec/module.f.d.ts +0 -0
  454. /package/{fs → fjs}/types/bit_vec/proof.f.d.ts +0 -0
  455. /package/{fs → fjs}/types/btree/find/module.f.d.ts +0 -0
  456. /package/{fs → fjs}/types/btree/module.f.d.ts +0 -0
  457. /package/{fs → fjs}/types/btree/remove/module.f.d.ts +0 -0
  458. /package/{fs → fjs}/types/btree/set/module.f.d.ts +0 -0
  459. /package/{fs → fjs}/types/btree/set/proof.f.d.ts +0 -0
  460. /package/{fs → fjs}/types/btree/types/module.f.d.ts +0 -0
  461. /package/{fs → fjs}/types/btree/types/module.f.js +0 -0
  462. /package/{fs → fjs}/types/byte_set/module.f.d.ts +0 -0
  463. /package/{fs → fjs}/types/byte_set/proof.f.d.ts +0 -0
  464. /package/{fs → fjs}/types/function/compare/module.f.d.ts +0 -0
  465. /package/{fs → fjs}/types/function/compare/module.f.js +0 -0
  466. /package/{fs/types/btree/find → fjs/types/function/compare}/proof.f.d.ts +0 -0
  467. /package/{fs → fjs}/types/function/module.f.d.ts +0 -0
  468. /package/{fs → fjs}/types/function/module.f.js +0 -0
  469. /package/{fs → fjs}/types/function/operator/module.f.d.ts +0 -0
  470. /package/{fs → fjs}/types/function/operator/module.f.js +0 -0
  471. /package/{fs/types/function/compare → fjs/types/function}/proof.f.d.ts +0 -0
  472. /package/{fs → fjs}/types/list/module.f.d.ts +0 -0
  473. /package/{fs → fjs}/types/map/module.f.d.ts +0 -0
  474. /package/{fs → fjs}/types/map/module.f.js +0 -0
  475. /package/{fs → fjs}/types/map/proof.f.d.ts +0 -0
  476. /package/{fs → fjs}/types/nibble_set/module.f.d.ts +0 -0
  477. /package/{fs → fjs}/types/nibble_set/module.f.js +0 -0
  478. /package/{fs → fjs}/types/nibble_set/proof.f.d.ts +0 -0
  479. /package/{fs → fjs}/types/nominal/module.f.d.ts +0 -0
  480. /package/{fs → fjs}/types/nominal/module.f.js +0 -0
  481. /package/{fs → fjs}/types/nominal/proof.f.d.ts +0 -0
  482. /package/{fs → fjs}/types/nullable/module.f.d.ts +0 -0
  483. /package/{fs → fjs}/types/nullable/proof.f.d.ts +0 -0
  484. /package/{fs → fjs}/types/number/module.f.d.ts +0 -0
  485. /package/{fs → fjs}/types/number/proof.f.d.ts +0 -0
  486. /package/{fs → fjs}/types/object/module.f.d.ts +0 -0
  487. /package/{fs → fjs}/types/object/proof.f.d.ts +0 -0
  488. /package/{fs → fjs}/types/option/module.f.d.ts +0 -0
  489. /package/{fs → fjs}/types/option/module.f.js +0 -0
  490. /package/{fs → fjs}/types/ordered_map/module.f.d.ts +0 -0
  491. /package/{fs → fjs}/types/ordered_map/proof.f.d.ts +0 -0
  492. /package/{fs → fjs}/types/patricia_trie/module.f.d.ts +0 -0
  493. /package/{fs → fjs}/types/patricia_trie/module.f.js +0 -0
  494. /package/{fs → fjs}/types/phantom/module.f.d.ts +0 -0
  495. /package/{fs → fjs}/types/phantom/module.f.js +0 -0
  496. /package/{fs → fjs}/types/prime_field/module.f.d.ts +0 -0
  497. /package/{fs → fjs}/types/prime_field/proof.f.d.ts +0 -0
  498. /package/{fs/types/function → fjs/types/range}/proof.f.d.ts +0 -0
  499. /package/{fs → fjs}/types/range_map/module.f.d.ts +0 -0
  500. /package/{fs → fjs}/types/range_map/proof.f.d.ts +0 -0
  501. /package/{fs → fjs}/types/result/module.d.ts +0 -0
  502. /package/{fs → fjs}/types/result/module.f.d.ts +0 -0
  503. /package/{fs → fjs}/types/result/module.f.js +0 -0
  504. /package/{fs → fjs}/types/rtti/parse/module.f.d.ts +0 -0
  505. /package/{fs → fjs}/types/rtti/parse/proof.f.d.ts +0 -0
  506. /package/{fs → fjs}/types/rtti/proof.f.d.ts +0 -0
  507. /package/{fs → fjs}/types/rtti/proof.f.js +0 -0
  508. /package/{fs → fjs}/types/rtti/ts/proof.f.d.ts +0 -0
  509. /package/{fs → fjs}/types/rtti/validate/module.f.d.ts +0 -0
  510. /package/{fs → fjs}/types/rtti/validate/proof.f.d.ts +0 -0
  511. /package/{fs → fjs}/types/sorted_list/module.f.d.ts +0 -0
  512. /package/{fs → fjs}/types/sorted_list/proof.f.d.ts +0 -0
  513. /package/{fs → fjs}/types/sorted_set/module.f.d.ts +0 -0
  514. /package/{fs → fjs}/types/sorted_set/proof.f.d.ts +0 -0
  515. /package/{fs → fjs}/types/string/module.f.d.ts +0 -0
  516. /package/{fs → fjs}/types/string/proof.f.d.ts +0 -0
  517. /package/{fs → fjs}/types/string_set/module.f.d.ts +0 -0
  518. /package/{fs → fjs}/types/string_set/proof.f.d.ts +0 -0
  519. /package/{fs → fjs}/types/ts/module.f.d.ts +0 -0
  520. /package/{fs → fjs}/types/ts/module.f.js +0 -0
  521. /package/{fs → fjs}/types/uint8array/module.f.d.ts +0 -0
  522. /package/{fs → fjs}/website/module.f.d.ts +0 -0
  523. /package/{fs → fjs}/website/proof.f.d.ts +0 -0
package/README.md CHANGED
@@ -60,7 +60,7 @@ The CAS is also exposed as an [MCP](https://modelcontextprotocol.io/) server so
60
60
  claude mcp add cas -- npx functionalscript m
61
61
  ```
62
62
 
63
- See [`fs/cas/mcp/README.md`](fs/cas/mcp/README.md) for details on the `cas_add`, `cas_get`, and `cas_list` tools.
63
+ See [`fjs/cas/mcp/README.md`](fjs/cas/mcp/README.md) for details on the `cas_add`, `cas_get`, and `cas_list` tools.
64
64
 
65
65
  ## Vision
66
66
 
@@ -8,7 +8,7 @@ import { bitLength, divUp8 } from "../types/bigint/module.f.js";
8
8
  import { empty, isVec, length, msb, uint, unpack, vec, vec8 } from "../types/bit_vec/module.f.js";
9
9
  import { identity } from "../types/function/module.f.js";
10
10
  import { max } from "../types/function/compare/module.f.js";
11
- import { encode as b128encode, decode as b128decode } from "../base128/module.f.js";
11
+ import { encode as b128encode, decode as b128decode } from "../basen/base128/module.f.js";
12
12
  const { popFront: pop, listToVec } = msb;
13
13
  const pop8 = pop(8n);
14
14
  const classPcMask = 224n;
@@ -1,7 +1,7 @@
1
1
  import { empty, isVec, length, msb, uint, unpack, vec, vec8 } from "../types/bit_vec/module.f.js";
2
2
  import { asBase } from "../types/nominal/module.f.js";
3
3
  import { decodeRaw, decodeInteger, encodeRaw, encodeInteger, integer, encode, decode, constructedSequence, octetString, boolean, constructedSet, encodeObjectIdentifier, decodeObjectIdentifier, } from "./module.f.js";
4
- import { assertEq } from "../asserts/module.f.js";
4
+ import { assert, assertEq } from '../asserts/module.f.js';
5
5
  const { concat, popFront: pop, listToVec } = msb;
6
6
  const pop8 = pop(8n);
7
7
  const check = (tag, v, rest) => {
@@ -23,9 +23,7 @@ const integerValueCheck = (i, v) => {
23
23
  throw `encode: ${asBase(v)}, ${asBase(v0)}`;
24
24
  }
25
25
  const i0 = decodeInteger(v);
26
- if (i !== i0) {
27
- throw [i, i0];
28
- }
26
+ assertEq(i, i0, [i, i0]);
29
27
  };
30
28
  const ch0 = (r, v, rest) => {
31
29
  const [r0, rest0] = decode(concat(v)(rest));
@@ -51,24 +49,14 @@ export const proof = {
51
49
  const v = vec8(0x13n);
52
50
  const x = encodeRaw([integer, v]);
53
51
  const lx = length(x);
54
- if (lx !== 24n) {
55
- throw lx;
56
- }
52
+ assertEq(lx, 24n);
57
53
  const [tag, x1] = pop8(x);
58
- if (tag !== BigInt(integer)) {
59
- throw tag;
60
- }
54
+ assertEq(tag, BigInt(integer));
61
55
  const [len, x2] = pop8(x1);
62
- if (len !== 1n) {
63
- throw len;
64
- }
56
+ assertEq(len, 1n);
65
57
  const { length: intLen, uint } = unpack(x2);
66
- if (intLen !== 8n) {
67
- throw intLen;
68
- }
69
- if (uint !== 0x13n) {
70
- throw uint;
71
- }
58
+ assertEq(intLen, 8n);
59
+ assertEq(uint, 0x13n);
72
60
  },
73
61
  encode7F: () => {
74
62
  const valueLen = 0x7fn << 3n;
@@ -76,24 +64,14 @@ export const proof = {
76
64
  const v = vec(valueLen)(value);
77
65
  const x = encodeRaw([integer, v]);
78
66
  const lx = length(x);
79
- if (lx !== 0x81n << 3n) {
80
- throw lx;
81
- }
67
+ assertEq(lx, 0x81n << 3n);
82
68
  const [tag, x1] = pop8(x);
83
- if (tag !== BigInt(integer)) {
84
- throw tag;
85
- }
69
+ assertEq(tag, BigInt(integer));
86
70
  const [len, x2] = pop8(x1);
87
- if (len !== 0x7fn) {
88
- throw len;
89
- }
71
+ assertEq(len, 0x7fn);
90
72
  const { length: intLen, uint } = unpack(x2);
91
- if (intLen !== valueLen) {
92
- throw intLen;
93
- }
94
- if (uint !== value) {
95
- throw uint;
96
- }
73
+ assertEq(intLen, valueLen);
74
+ assertEq(uint, value);
97
75
  },
98
76
  encode80: () => {
99
77
  const valueLen = 0x80n << 3n;
@@ -101,28 +79,16 @@ export const proof = {
101
79
  const v = vec(valueLen)(value);
102
80
  const x = encodeRaw([integer, v]);
103
81
  const lx = length(x);
104
- if (lx !== 0x83n << 3n) {
105
- throw lx;
106
- }
82
+ assertEq(lx, 0x83n << 3n);
107
83
  const [tag, x1] = pop8(x);
108
- if (tag !== BigInt(integer)) {
109
- throw tag;
110
- }
84
+ assertEq(tag, BigInt(integer));
111
85
  const [lenLen, x2] = pop8(x1);
112
- if (lenLen !== 0x81n) {
113
- throw lenLen;
114
- }
86
+ assertEq(lenLen, 0x81n);
115
87
  const [len, x3] = pop8(x2);
116
- if (len !== 0x80n) {
117
- throw len;
118
- }
88
+ assertEq(len, 0x80n);
119
89
  const { length: intLen, uint } = unpack(x3);
120
- if (intLen !== valueLen) {
121
- throw intLen;
122
- }
123
- if (uint !== value) {
124
- throw uint;
125
- }
90
+ assertEq(intLen, valueLen);
91
+ assertEq(uint, value);
126
92
  },
127
93
  encodeFF: () => {
128
94
  const valueLen = 0xffn << 3n;
@@ -134,24 +100,14 @@ export const proof = {
134
100
  throw `lx: ${lx}`;
135
101
  }
136
102
  const [tag, x1] = pop8(x);
137
- if (tag !== BigInt(integer)) {
138
- throw tag;
139
- }
103
+ assertEq(tag, BigInt(integer));
140
104
  const [lenLen, x2] = pop8(x1);
141
- if (lenLen !== 0x81n) {
142
- throw lenLen;
143
- }
105
+ assertEq(lenLen, 0x81n);
144
106
  const [len, x3] = pop8(x2);
145
- if (len !== 0xffn) {
146
- throw len;
147
- }
107
+ assertEq(len, 0xffn);
148
108
  const { length: intLen, uint } = unpack(x3);
149
- if (intLen !== valueLen) {
150
- throw intLen;
151
- }
152
- if (uint !== value) {
153
- throw uint;
154
- }
109
+ assertEq(intLen, valueLen);
110
+ assertEq(uint, value);
155
111
  },
156
112
  encode103: () => {
157
113
  const valueLen = 0x103n << 3n;
@@ -163,32 +119,20 @@ export const proof = {
163
119
  throw `lx: ${lx}`;
164
120
  }
165
121
  const [tag, x1] = pop8(x);
166
- if (tag !== BigInt(integer)) {
167
- throw tag;
168
- }
122
+ assertEq(tag, BigInt(integer));
169
123
  const [lenLen, x2] = pop8(x1);
170
- if (lenLen !== 0x82n) {
171
- throw lenLen;
172
- }
124
+ assertEq(lenLen, 0x82n);
173
125
  const [len, x3] = pop(16n)(x2);
174
- if (len !== 0x103n) {
175
- throw len;
176
- }
126
+ assertEq(len, 0x103n);
177
127
  const { length: intLen, uint } = unpack(x3);
178
- if (intLen !== valueLen) {
179
- throw intLen;
180
- }
181
- if (uint !== value) {
182
- throw uint;
183
- }
128
+ assertEq(intLen, valueLen);
129
+ assertEq(uint, value);
184
130
  },
185
131
  ed: [
186
132
  () => {
187
133
  const tag = integer;
188
134
  const v = vec(0x10n)(0x8234n);
189
- if (asBase(v) !== 0x8234n) {
190
- throw asBase(v).toString(16);
191
- }
135
+ assertEq(asBase(v), 0x8234n, asBase(v).toString(16));
192
136
  check(integer, v, empty);
193
137
  },
194
138
  {
@@ -297,16 +241,10 @@ export const proof = {
297
241
  // bitString (0x03) is not in SupportedRecord, exercises the default case in rawToRecord
298
242
  const raw = encodeRaw([0x03n, vec8(0x42n)]);
299
243
  const [decoded, rest] = decode(raw);
300
- if (!isVec(decoded)) {
301
- throw 'expected UnsupportedRecord (Vec)';
302
- }
303
- if (rest !== empty) {
304
- throw 'expected empty rest';
305
- }
244
+ assert(isVec(decoded), 'expected UnsupportedRecord (Vec)');
245
+ assertEq(rest, empty, 'expected empty rest');
306
246
  // Re-encoding an UnsupportedRecord returns it unchanged (it is already the TLV bytes)
307
- if (encode(decoded) !== raw) {
308
- throw 'encode should round-trip UnsupportedRecord';
309
- }
247
+ assertEq(encode(decoded), raw, 'encode should round-trip UnsupportedRecord');
310
248
  },
311
249
  raw: [
312
250
  () => {
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Assertion helpers for runtime checks and compile-time type-level tests.
3
+ *
4
+ * @module
5
+ */
6
+ /**
7
+ * Marks a code path as unimplemented. Always throws.
8
+ */
9
+ export declare const todo: () => never;
10
+ /**
11
+ * Throws `msg` (default `'assertion failed'`) if `v` is `false`.
12
+ *
13
+ * Narrows `v` to `true` via `asserts v`, so callers can rely on the
14
+ * condition holding for the rest of the enclosing scope.
15
+ */
16
+ export declare const assert: (v: boolean, msg?: unknown) => asserts v;
17
+ /**
18
+ * Asserts that `a` and `b` are `===`, throwing `x` (the `[a, b]` pair, plus
19
+ * an optional third element used as an extra message) if they differ.
20
+ */
21
+ export declare const assertEq: <T>(...x: readonly [T, T, unknown?]) => void;
22
+ /**
23
+ * Compile-time-only check: a type resolves only if it is exactly `true`.
24
+ * Used to assert type-level properties without any runtime cost, e.g.
25
+ * `type _ = Assert<Equal<A, B>>`.
26
+ */
27
+ export type Assert<T extends true> = T;
28
+ /**
29
+ * Asserts that `a` is neither `null` nor `undefined` and returns it,
30
+ * narrowed to `T`.
31
+ *
32
+ * Use this to chain directly off a call that may return a nullish value,
33
+ * e.g. `const r = assertNotNullish(f(x))`. For a variable that already
34
+ * exists, prefer `assert(a !== null && a !== undefined)` instead.
35
+ */
36
+ export declare const assertNotNullish: <T>(a: T | null | undefined, msg?: unknown) => T;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Assertion helpers for runtime checks and compile-time type-level tests.
3
+ *
4
+ * @module
5
+ */
6
+ /**
7
+ * Marks a code path as unimplemented. Always throws.
8
+ */
9
+ export const todo = () => { throw 'not implemented'; };
10
+ /**
11
+ * Throws `msg` (default `'assertion failed'`) if `v` is `false`.
12
+ *
13
+ * Narrows `v` to `true` via `asserts v`, so callers can rely on the
14
+ * condition holding for the rest of the enclosing scope.
15
+ */
16
+ export const assert = (v, msg = 'assertion failed') => {
17
+ if (!v)
18
+ throw msg;
19
+ };
20
+ /**
21
+ * Asserts that `a` and `b` are `===`, throwing `x` (the `[a, b]` pair, plus
22
+ * an optional third element used as an extra message) if they differ.
23
+ */
24
+ export const assertEq = (...x) => {
25
+ const [a, b] = x;
26
+ assert(a === b, x);
27
+ };
28
+ /**
29
+ * Asserts that `a` is neither `null` nor `undefined` and returns it,
30
+ * narrowed to `T`.
31
+ *
32
+ * Use this to chain directly off a call that may return a nullish value,
33
+ * e.g. `const r = assertNotNullish(f(x))`. For a variable that already
34
+ * exists, prefer `assert(a !== null && a !== undefined)` instead.
35
+ */
36
+ export const assertNotNullish = (a, msg) => {
37
+ assert(a !== null && a !== undefined, msg);
38
+ return a;
39
+ };
@@ -0,0 +1,11 @@
1
+ export declare const proof: {
2
+ assertPassesOnTrue: () => void;
3
+ assertEqPassesOnEqual: () => void;
4
+ throw: {
5
+ assertEqThrowsOnUnequal: () => void;
6
+ assertEqThrowsOnUnequal3: () => void;
7
+ assertThrowsDefaultMsg: () => void;
8
+ assertThrowsCustomMsg: () => void;
9
+ todoThrows: () => never;
10
+ };
11
+ };
@@ -0,0 +1,18 @@
1
+ import { assert, assertEq, todo } from './module.f.js';
2
+ export const proof = {
3
+ assertPassesOnTrue: () => {
4
+ assert(true);
5
+ assert(true, 'with message');
6
+ },
7
+ assertEqPassesOnEqual: () => {
8
+ assertEq(1, 1);
9
+ assertEq('x', 'x');
10
+ },
11
+ throw: {
12
+ assertEqThrowsOnUnequal: () => assertEq(1, 2),
13
+ assertEqThrowsOnUnequal3: () => assertEq(1, 2, "message"),
14
+ assertThrowsDefaultMsg: () => assert(false),
15
+ assertThrowsCustomMsg: () => assert(false, 'oops'),
16
+ todoThrows: () => todo(),
17
+ },
18
+ };
@@ -11,9 +11,9 @@
11
11
  *
12
12
  * @module
13
13
  */
14
- import { msb, lsb, vec, chunkList, unpack } from "../types/bit_vec/module.f.js";
15
- import { fold } from "../types/list/module.f.js";
16
- import { compose } from "../types/function/module.f.js";
14
+ import { msb, lsb, vec, chunkList, unpack } from '../types/bit_vec/module.f.js';
15
+ import { fold } from '../types/list/module.f.js';
16
+ import { compose } from '../types/function/module.f.js';
17
17
  const { unpackSplit } = msb;
18
18
  const { tryListToVec: reversedListToVec } = lsb;
19
19
  // `chunkList(msb)` doesn't depend on `bits` or `v` — shared across every
@@ -1,6 +1,6 @@
1
- import { assertEq } from "../asserts/module.f.js";
2
- import { empty, maxLength, vec, length } from "../types/bit_vec/module.f.js";
3
- import { baseN } from "./module.f.js";
1
+ import { assertEq } from '../asserts/module.f.js';
2
+ import { empty, maxLength, vec, length } from '../types/bit_vec/module.f.js';
3
+ import { baseN } from './module.f.js';
4
4
  const hex = baseN(4n, '0123456789abcdef');
5
5
  const cb32 = baseN(5n, '0123456789abcdefghjkmnpqrstvwxyz', c => {
6
6
  const lower = c.toLowerCase();
@@ -25,67 +25,43 @@ const bigSampleHex = `f`.repeat(Number(maxLength >> 2n));
25
25
  export const proof = {
26
26
  encodeEmpty: () => {
27
27
  const s = hex.vecToString(empty);
28
- if (s !== '') {
29
- throw [s];
30
- }
28
+ assertEq(s, '', [s]);
31
29
  },
32
30
  encodeAligned: () => {
33
31
  // Two 4-bit chunks → two hex digits
34
32
  const s = hex.vecToString(vec(8n)(0xa5n));
35
- if (s !== 'a5') {
36
- throw [s];
37
- }
33
+ assertEq(s, 'a5', [s]);
38
34
  },
39
35
  encodeUnaligned: () => {
40
36
  // 6 bits → first 4-bit chunk + a 2-bit tail that popFront pads with
41
37
  // trailing zeros (the standard `popFront` behaviour the codec inherits).
42
38
  const s = hex.vecToString(vec(6n)(41n));
43
- if (s !== 'a4') {
44
- throw [s];
45
- }
39
+ assertEq(s, 'a4', [s]);
46
40
  },
47
41
  decodeEmpty: () => {
48
42
  const v = hex.stringToVec('');
49
- if (v !== empty) {
50
- throw [v];
51
- }
43
+ assertEq(v, empty, [v]);
52
44
  },
53
45
  decodeRoundTrip: () => {
54
46
  const v = hex.stringToVec('ab');
55
- if (v !== vec(8n)(0xabn)) {
56
- throw [v];
57
- }
47
+ assertEq(v, vec(8n)(0xabn), [v]);
58
48
  },
59
49
  decodeInvalid: () => {
60
- if (hex.stringToVec('z') !== null) {
61
- throw 'invalid char should return null';
62
- }
63
- if (hex.stringToVec('aZ') !== null) {
64
- throw 'mixed invalid char should return null';
65
- }
50
+ assertEq(hex.stringToVec('z'), null, 'invalid char should return null');
51
+ assertEq(hex.stringToVec('aZ'), null, 'mixed invalid char should return null');
66
52
  },
67
53
  normalizeHit: () => {
68
54
  // 'A' lowercases to 'a' — same vector as the lowercase input.
69
55
  const a = cb32.stringToVec('A');
70
56
  const b = cb32.stringToVec('a');
71
- if (a !== b) {
72
- throw [a, b];
73
- }
57
+ assertEq(a, b, [a, b]);
74
58
  // Crockford folds: i,l → 1 and o → 0.
75
- if (cb32.stringToVec('I') !== cb32.stringToVec('1')) {
76
- throw 'I→1';
77
- }
78
- if (cb32.stringToVec('l') !== cb32.stringToVec('1')) {
79
- throw 'l→1';
80
- }
81
- if (cb32.stringToVec('o') !== cb32.stringToVec('0')) {
82
- throw 'o→0';
83
- }
59
+ assertEq(cb32.stringToVec('I'), cb32.stringToVec('1'), 'I→1');
60
+ assertEq(cb32.stringToVec('l'), cb32.stringToVec('1'), 'l→1');
61
+ assertEq(cb32.stringToVec('o'), cb32.stringToVec('0'), 'o→0');
84
62
  },
85
63
  normalizeMiss: () => {
86
- if (cb32.stringToVec('u') !== null) {
87
- throw 'unknown char should return null';
88
- }
64
+ assertEq(cb32.stringToVec('u'), null, 'unknown char should return null');
89
65
  },
90
66
  // Decodes a 1 Mibit hex string. With the O(n log n) `listToVec` builder this
91
67
  // runs in well under a second (was ~13 s node / ~43 s bun under the old
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * @module
5
5
  */
6
- import { type Vec } from '../types/bit_vec/module.f.ts';
6
+ import { type Vec } from '../../types/bit_vec/module.f.ts';
7
7
  /**
8
8
  * Encodes a bigint into an MSB Base128 vector.
9
9
  *
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * @module
5
5
  */
6
- import { vec8, msb, empty } from "../types/bit_vec/module.f.js";
6
+ import { vec8, msb, empty } from '../../types/bit_vec/module.f.js';
7
7
  const { concat, popFront } = msb;
8
8
  const pop8 = popFront(8n);
9
9
  /**
@@ -1,6 +1,6 @@
1
- import { empty, vec, vec8 } from "../types/bit_vec/module.f.js";
2
- import { asBase } from "../types/nominal/module.f.js";
3
- import { encode, decode } from "./module.f.js";
1
+ import { empty, vec, vec8 } from '../../types/bit_vec/module.f.js';
2
+ import { asBase } from '../../types/nominal/module.f.js';
3
+ import { encode, decode } from './module.f.js';
4
4
  const test = (a, b) => {
5
5
  const encoded = encode(a);
6
6
  if (encoded !== b) {
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * @module
5
5
  */
6
- import { type Vec } from "../types/bit_vec/module.f.ts";
7
- import type { Nullable } from "../types/nullable/module.f.ts";
6
+ import { type Vec } from "../../types/bit_vec/module.f.ts";
7
+ import type { Nullable } from "../../types/nullable/module.f.ts";
8
8
  export declare const encode: (input: Vec) => Nullable<string>;
9
9
  export declare const decode: (input: string) => Nullable<Vec>;
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * @module
5
5
  */
6
- import { msb, length, vec, empty } from "../types/bit_vec/module.f.js";
7
- import { baseN } from "../base_n/module.f.js";
6
+ import { msb, length, vec, maxLength } from "../../types/bit_vec/module.f.js";
7
+ import { baseN } from "../../base_n/module.f.js";
8
8
  const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
9
9
  const { popFront } = msb;
10
10
  const { vecToString, stringToVec } = baseN(6n, alphabet);
@@ -39,23 +39,33 @@ export const decode = (input) => {
39
39
  if ((body.length + padChars) % 4 !== 0) {
40
40
  return null;
41
41
  }
42
- // Decode each character to 6 bits.
43
- const result = stringToVec(body);
44
- if (result === null) {
45
- return null;
42
+ if (padChars === 0) {
43
+ return stringToVec(body);
46
44
  }
47
- // Remove the zero-padding bits introduced during encode.
48
- // padChars=1 2 padding bits removed, padChars=2 4 padding bits removed.
45
+ // `encode`'s zero-padding bits (added to reach a 6-bit boundary) live
46
+ // entirely inside the *last* character's chunk RFC 4648 padding never
47
+ // spans more than one base64 character. Decode every character but the
48
+ // last through `stringToVec` as usual, then decode and trim the last
49
+ // character on its own, so no intermediate `Vec` built here is ever
50
+ // wider than the final, post-trim result — even for input whose decoded
51
+ // payload lands exactly at `maxLength`.
49
52
  const removeBits = BigInt(padChars * 2);
50
- const totalBits = length(result);
51
- const targetLen = totalBits - removeBits;
52
- if (targetLen === 0n) {
53
- return empty;
53
+ const realBits = 6n - removeBits;
54
+ const head = stringToVec(body.slice(0, body.length - 1));
55
+ if (head === null) {
56
+ return null;
57
+ }
58
+ const lastChunk = stringToVec(body.slice(body.length - 1));
59
+ if (lastChunk === null) {
60
+ return null;
61
+ }
62
+ if (length(head) + realBits > maxLength) {
63
+ return null;
54
64
  }
55
- const [kept, padVec] = popFront(targetLen)(result);
65
+ const [kept, pad] = popFront(realBits)(lastChunk);
56
66
  // Padding bits must be zero (RFC 4648 §3.5).
57
- if (removeBits > 0n && padVec !== vec(removeBits)(0n)) {
67
+ if (pad !== vec(removeBits)(0n)) {
58
68
  return null;
59
69
  }
60
- return vec(targetLen)(kept);
70
+ return msb.concat(head)(vec(realBits)(kept));
61
71
  };
@@ -9,6 +9,8 @@ export declare const proof: {
9
9
  validPadding: () => void;
10
10
  knownVectors: () => void;
11
11
  decodeOverflow: () => void;
12
+ decodePaddedTailRejections: () => void;
12
13
  encodeAtMaxLengthSucceeds: () => void;
14
+ decodeAtMaxLengthSucceeds: () => void;
13
15
  encodeLargeVecIsSlow: () => void;
14
16
  };
@@ -1,5 +1,5 @@
1
- import { assertEq } from "../asserts/module.f.js";
2
- import { empty, vec, repeat, vec8, maxLength } from "../types/bit_vec/module.f.js";
1
+ import { assertEq } from '../../asserts/module.f.js';
2
+ import { empty, vec, repeat, vec8, maxLength } from "../../types/bit_vec/module.f.js";
3
3
  import { encode, decode } from "./module.f.js";
4
4
  const check = (s, v) => {
5
5
  assertEq(encode(v), s);
@@ -83,17 +83,37 @@ export const proof = {
83
83
  const oversized = 'A'.repeat(174_764);
84
84
  assertEq(decode(oversized), null);
85
85
  },
86
+ decodePaddedTailRejections: () => {
87
+ // These all take the padded branch of `decode` (`padChars > 0`,
88
+ // i.e. the `head`/`lastChunk` split), unlike `decodeOverflow` above
89
+ // which takes the unpadded fast path. An invalid character before
90
+ // the final char must be rejected via the `head` decode...
91
+ assertEq(decode('!A=='), null);
92
+ // ...and an invalid final character (the one holding the padding
93
+ // bits) must be rejected via the last-character decode.
94
+ assertEq(decode('A!=='), null);
95
+ // Same as `decodeOverflow`, but with a padded tail so it's the
96
+ // padded branch that measures the result against `maxLength` and
97
+ // rejects it.
98
+ assertEq(decode('A'.repeat(174_764) + '='), null);
99
+ },
86
100
  encodeAtMaxLengthSucceeds: () => {
87
101
  // A `maxLength`-sized vector's trailing partial 6-bit chunk is
88
102
  // left-padded by `vecToString` itself (see `baseN`), so `encode`
89
103
  // never needs to build an over-`maxLength` intermediate and must not
90
- // reject this boundary input. (`decode` of the resulting string
91
- // still fails on this exact boundary — a separate, still-open bug;
92
- // see `fs/base64/todo/decode-rejects-max-size-input.md`.)
104
+ // reject this boundary input.
93
105
  assertEq(encode(vec(maxLength)(0n)), 'A'.repeat(174_763) + '=');
94
106
  },
107
+ decodeAtMaxLengthSucceeds: () => {
108
+ // Companion to `encodeAtMaxLengthSucceeds`: the encoded string's raw,
109
+ // pre-trim bit count (1_048_578) is 2 over `maxLength` even though
110
+ // the payload it decodes to is exactly `maxLength`. `decode` must
111
+ // trim the last character's 2 zero-padding bits before — not after —
112
+ // measuring the result against `maxLength`.
113
+ check('A'.repeat(174_763) + '=', vec(maxLength)(0n));
114
+ },
95
115
  // Regression guard: `encode` used to be quadratic in the input size, not
96
- // linear. `baseN`'s `vecToString` (`fs/base_n/module.f.ts`) popped one
116
+ // linear. `baseN`'s `vecToString` (`fjs/base_n/module.f.ts`) popped one
97
117
  // 6-bit chunk off the front at a time via `popFront`, and each `popFront`
98
118
  // re-masked the entire remaining bigint through `vec()`'s `m & ui` —
99
119
  // O(remaining length) — so encoding a vector of `n` bits cost O(n²). A
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * @module
5
5
  */
6
- import { type Vec } from "../types/bit_vec/module.f.ts";
7
- import type { Nullable } from "../types/nullable/module.f.ts";
6
+ import { type Vec } from "../../types/bit_vec/module.f.ts";
7
+ import type { Nullable } from "../../types/nullable/module.f.ts";
8
8
  export declare const vec5xToCBase32: (v: Vec) => string;
9
9
  export declare const cBase32ToVec5x: (s: string) => Nullable<Vec>;
10
10
  export declare const vecToCBase32: (v: Vec) => string;
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * @module
5
5
  */
6
- import { msb, lsb, length, vec, empty } from "../types/bit_vec/module.f.js";
7
- import { baseN } from "../base_n/module.f.js";
6
+ import { msb, lsb, length, vec, empty } from "../../types/bit_vec/module.f.js";
7
+ import { baseN } from "../../base_n/module.f.js";
8
8
  // 0123456789abcdef
9
9
  const m = '0123456789abcdefghjkmnpqrstvwxyz';
10
10
  const { concat } = msb;