functionalscript 0.37.0 → 0.39.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 (517) hide show
  1. package/README.md +1 -1
  2. package/{fs → fjs}/asn.1/proof.f.js +32 -94
  3. package/fjs/asserts/module.f.d.ts +36 -0
  4. package/fjs/asserts/module.f.js +39 -0
  5. package/fjs/asserts/proof.f.d.ts +11 -0
  6. package/fjs/asserts/proof.f.js +18 -0
  7. package/{fs → fjs}/base_n/proof.f.js +12 -36
  8. package/{fs → fjs}/basen/base64/proof.f.d.ts +1 -0
  9. package/{fs → fjs}/basen/base64/proof.f.js +15 -1
  10. package/{fs → fjs}/basen/cbase32/proof.f.js +15 -42
  11. package/fjs/bnf/data/module.f.d.ts +52 -0
  12. package/{fs → fjs}/bnf/data/module.f.js +53 -3
  13. package/{fs → fjs}/bnf/data/proof.f.d.ts +1 -0
  14. package/{fs → fjs}/bnf/data/proof.f.js +54 -19
  15. package/{fs → fjs}/bnf/descent/module.f.d.ts +4 -14
  16. package/fjs/bnf/descent/module.f.js +124 -0
  17. package/{fs → fjs}/bnf/descent/proof.f.d.ts +1 -0
  18. package/{fs → fjs}/bnf/descent/proof.f.js +55 -24
  19. package/{fs → fjs}/bnf/ll1/module.f.d.ts +4 -4
  20. package/{fs → fjs}/bnf/ll1/module.f.js +7 -5
  21. package/{fs → fjs}/bnf/ll1/proof.f.d.ts +1 -0
  22. package/{fs → fjs}/bnf/ll1/proof.f.js +27 -10
  23. package/{fs → fjs}/bnf/module.f.d.ts +19 -5
  24. package/{fs → fjs}/bnf/module.f.js +10 -11
  25. package/fjs/bnf/proof.f.js +69 -0
  26. package/{fs → fjs}/bnf/testlib.f.js +2 -2
  27. package/fjs/bnf/token_symbol/module.f.d.ts +38 -0
  28. package/fjs/bnf/token_symbol/module.f.js +48 -0
  29. package/fjs/bnf/token_symbol/proof.f.d.ts +10 -0
  30. package/fjs/bnf/token_symbol/proof.f.js +37 -0
  31. package/{fs → fjs}/cas/cli/module.f.js +6 -9
  32. package/{fs → fjs}/cas/cli/proof.f.d.ts +4 -1
  33. package/{fs → fjs}/cas/cli/proof.f.js +29 -66
  34. package/fjs/cas/evo/mcp/module.f.d.ts +27 -0
  35. package/fjs/cas/evo/mcp/module.f.js +94 -0
  36. package/fjs/cas/evo/mcp/proof.f.d.ts +11 -0
  37. package/fjs/cas/evo/mcp/proof.f.js +126 -0
  38. package/fjs/cas/evo/module.f.d.ts +202 -0
  39. package/fjs/cas/evo/module.f.js +421 -0
  40. package/fjs/cas/evo/proof.f.d.ts +39 -0
  41. package/fjs/cas/evo/proof.f.js +572 -0
  42. package/fjs/cas/mcp/module.f.d.ts +49 -0
  43. package/{fs → fjs}/cas/mcp/module.f.js +61 -81
  44. package/{fs → fjs}/cas/mcp/proof.f.d.ts +4 -1
  45. package/{fs → fjs}/cas/mcp/proof.f.js +45 -17
  46. package/{fs → fjs}/cas/module.f.d.ts +10 -0
  47. package/{fs → fjs}/cas/module.f.js +89 -36
  48. package/fjs/cas/proof.f.d.ts +18 -0
  49. package/fjs/cas/proof.f.js +305 -0
  50. package/{fs → fjs}/ci/bun/module.f.js +3 -3
  51. package/{fs → fjs}/ci/common/module.f.d.ts +1 -2
  52. package/{fs → fjs}/ci/common/module.f.js +1 -5
  53. package/{fs → fjs}/ci/config/module.f.d.ts +8 -8
  54. package/{fs → fjs}/ci/config/module.f.js +8 -8
  55. package/{fs → fjs}/ci/deno/module.f.js +3 -3
  56. package/{fs → fjs}/ci/module.f.js +3 -4
  57. package/{fs → fjs}/ci/node/module.f.js +11 -9
  58. package/{fs → fjs}/ci/proof.f.js +16 -9
  59. package/{fs → fjs}/ci/rust/module.f.js +9 -1
  60. package/{fs → fjs}/cli/module.f.js +2 -2
  61. package/{fs → fjs}/cli/proof.f.js +22 -63
  62. package/{fs → fjs}/common/monoid/module.f.d.ts +46 -2
  63. package/fjs/common/monoid/module.f.js +88 -0
  64. package/fjs/common/monoid/proof.f.d.ts +9 -0
  65. package/fjs/common/monoid/proof.f.js +48 -0
  66. package/{fs → fjs}/crypto/hmac/proof.f.js +4 -12
  67. package/fjs/crypto/pow/proof.f.js +111 -0
  68. package/{fs → fjs}/crypto/secp/proof.f.js +12 -33
  69. package/{fs → fjs}/crypto/sha2/proof.f.js +18 -49
  70. package/{fs → fjs}/crypto/sign/module.f.d.ts +0 -5
  71. package/{fs → fjs}/crypto/sign/module.f.js +7 -4
  72. package/{fs → fjs}/crypto/sign/proof.f.js +36 -105
  73. package/{fs → fjs}/crypto/vdf/proof.f.js +22 -63
  74. package/{fs → fjs}/dev/module.f.js +25 -25
  75. package/{fs → fjs}/dev/package_json/proof.f.js +7 -7
  76. package/{fs → fjs}/dev/proof.f.js +2 -4
  77. package/{fs → fjs}/djs/ast/proof.f.js +4 -12
  78. package/{fs → fjs}/djs/module.f.js +5 -8
  79. package/{fs → fjs}/djs/parser/module.f.d.ts +8 -0
  80. package/{fs → fjs}/djs/parser/module.f.js +37 -0
  81. package/{fs → fjs}/djs/parser/proof.f.js +138 -400
  82. package/{fs → fjs}/djs/proof.f.js +13 -36
  83. package/{fs → fjs}/djs/serializer/proof.f.js +14 -39
  84. package/fjs/djs/tokenizer/module.f.d.ts +24 -0
  85. package/fjs/djs/tokenizer/module.f.js +472 -0
  86. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.d.ts +4 -3
  87. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.js +446 -445
  88. package/{fs → fjs}/djs/transpiler/module.f.js +6 -6
  89. package/{fs → fjs}/djs/transpiler/proof.f.d.ts +3 -0
  90. package/{fs → fjs}/djs/transpiler/proof.f.js +29 -30
  91. package/fjs/effects/eff/module.f.d.ts +72 -0
  92. package/fjs/effects/eff/module.f.js +46 -0
  93. package/fjs/effects/eff/proof.f.d.ts +11 -0
  94. package/fjs/effects/eff/proof.f.js +58 -0
  95. package/{fs → fjs}/effects/list/module.f.d.ts +11 -5
  96. package/{fs → fjs}/effects/list/module.f.js +2 -1
  97. package/{fs → fjs}/effects/memory/proof.f.js +15 -29
  98. package/fjs/effects/module.f.d.ts +388 -0
  99. package/fjs/effects/module.f.js +288 -0
  100. package/{fs → fjs}/effects/node/memory/proof.js +7 -13
  101. package/{fs → fjs}/effects/node/module.d.ts +1 -1
  102. package/{fs → fjs}/effects/node/module.f.d.ts +2 -2
  103. package/{fs → fjs}/effects/node/module.f.js +9 -11
  104. package/{fs → fjs}/effects/node/module.js +3 -3
  105. package/{fs → fjs}/effects/node/proof.f.d.ts +1 -0
  106. package/{fs → fjs}/effects/node/proof.f.js +121 -299
  107. package/{fs → fjs}/effects/node/virtual/proof.f.d.ts +1 -0
  108. package/{fs → fjs}/effects/node/virtual/proof.f.js +36 -29
  109. package/fjs/effects/proof.f.d.ts +51 -0
  110. package/fjs/effects/proof.f.js +178 -0
  111. package/{fs → fjs}/emergent_testing/module.f.js +55 -39
  112. package/{fs → fjs}/emergent_testing/proof.f.d.ts +4 -0
  113. package/{fs → fjs}/emergent_testing/proof.f.js +60 -27
  114. package/{fs → fjs}/fsc/proof.f.js +12 -34
  115. package/{fs → fjs}/fsm/proof.f.js +5 -12
  116. package/{fs → fjs}/mcp/module.f.d.ts +7 -0
  117. package/{fs → fjs}/mcp/module.f.js +17 -10
  118. package/{fs → fjs}/mcp/proof.f.js +17 -16
  119. package/{fs → fjs}/mcp/stdio/module.f.d.ts +4 -4
  120. package/{fs → fjs}/mcp/stdio/module.f.js +14 -14
  121. package/{fs → fjs}/media/html/proof.f.js +12 -33
  122. package/{fs → fjs}/media/json/parser/module.f.d.ts +5 -0
  123. package/{fs → fjs}/media/json/parser/module.f.js +14 -0
  124. package/{fs → fjs}/media/json/parser/proof.f.js +39 -114
  125. package/{fs → fjs}/media/json/rpc/module.f.js +1 -1
  126. package/{fs → fjs}/media/json/schema/module.f.d.ts +2 -2
  127. package/{fs → fjs}/media/json/schema/module.f.js +23 -39
  128. package/{fs → fjs}/media/json/schema/proof.f.js +3 -6
  129. package/{fs → fjs}/media/json/serializer/proof.f.js +10 -27
  130. package/{fs → fjs}/media/module.f.d.ts +6 -6
  131. package/{fs → fjs}/media/module.f.js +3 -4
  132. package/{fs → fjs}/media/proof.f.js +5 -4
  133. package/{fs → fjs}/media/revision/module.f.d.ts +31 -4
  134. package/{fs → fjs}/media/revision/module.f.js +35 -23
  135. package/{fs → fjs}/media/revision/proof.f.d.ts +10 -8
  136. package/fjs/media/revision/proof.f.js +140 -0
  137. package/{fs → fjs}/media/type/module.f.js +2 -2
  138. package/{fs → fjs}/media/type/proof.f.js +8 -15
  139. package/{fs → fjs}/module.f.js +5 -9
  140. package/{fs → fjs}/path/proof.f.js +27 -78
  141. package/{fs → fjs}/proof.f.js +2 -0
  142. package/{fs → fjs}/sul/id/proof.f.js +7 -21
  143. package/{fs → fjs}/sul/level/hash/proof.f.js +5 -5
  144. package/{fs → fjs}/sul/level/literal/proof.f.js +12 -26
  145. package/fjs/text/ascii/proof.f.d.ts +6 -0
  146. package/{fs → fjs}/text/ascii/proof.f.js +4 -14
  147. package/{fs → fjs}/text/code_point/module.f.js +10 -10
  148. package/{fs → fjs}/text/proof.f.js +4 -9
  149. package/{fs → fjs}/text/sgr/proof.f.js +6 -15
  150. package/{fs → fjs}/text/utf16/module.f.js +1 -1
  151. package/{fs → fjs}/text/utf16/proof.f.js +23 -66
  152. package/{fs → fjs}/text/utf8/proof.f.js +56 -125
  153. package/{fs → fjs}/types/array/proof.f.js +18 -52
  154. package/fjs/types/bigfloat/proof.f.js +217 -0
  155. package/{fs → fjs}/types/bigint/module.f.js +4 -3
  156. package/{fs → fjs}/types/bigint/proof.f.js +49 -145
  157. package/{fs → fjs}/types/bit_vec/module.f.js +5 -15
  158. package/{fs → fjs}/types/bit_vec/proof.f.js +72 -214
  159. package/{fs → fjs}/types/btree/find/proof.f.js +23 -66
  160. package/{fs → fjs}/types/btree/proof.f.js +5 -12
  161. package/{fs → fjs}/types/btree/remove/module.f.d.ts +5 -0
  162. package/{fs → fjs}/types/btree/remove/module.f.js +12 -0
  163. package/{fs → fjs}/types/btree/remove/proof.f.d.ts +2 -0
  164. package/{fs → fjs}/types/btree/remove/proof.f.js +83 -230
  165. package/{fs → fjs}/types/btree/set/module.f.js +5 -2
  166. package/{fs → fjs}/types/btree/set/proof.f.js +35 -24
  167. package/{fs → fjs}/types/byte_set/proof.f.js +22 -63
  168. package/{fs → fjs}/types/function/compare/proof.f.js +13 -36
  169. package/{fs → fjs}/types/function/operator/proof.f.js +17 -48
  170. package/{fs → fjs}/types/function/proof.f.js +2 -3
  171. package/{fs → fjs}/types/list/module.f.d.ts +21 -0
  172. package/{fs → fjs}/types/list/module.f.js +17 -0
  173. package/{fs → fjs}/types/list/proof.f.d.ts +1 -0
  174. package/{fs → fjs}/types/list/proof.f.js +79 -164
  175. package/{fs → fjs}/types/map/proof.f.js +4 -12
  176. package/{fs → fjs}/types/nibble_set/proof.f.js +16 -45
  177. package/{fs → fjs}/types/nominal/proof.f.js +5 -10
  178. package/fjs/types/nullable/proof.f.js +29 -0
  179. package/{fs → fjs}/types/number/module.f.js +2 -1
  180. package/{fs → fjs}/types/number/proof.f.js +9 -24
  181. package/{fs → fjs}/types/object/proof.f.js +3 -6
  182. package/{fs → fjs}/types/patricia_trie/proof.f.js +21 -21
  183. package/{fs → fjs}/types/prime_field/module.f.js +2 -7
  184. package/{fs → fjs}/types/range/module.f.d.ts +1 -1
  185. package/fjs/types/range/module.f.js +2 -0
  186. package/fjs/types/range/proof.f.js +9 -0
  187. package/{fs → fjs}/types/range_map/proof.f.js +28 -81
  188. package/{fs → fjs}/types/result/proof.f.d.ts +3 -2
  189. package/fjs/types/result/proof.f.js +31 -0
  190. package/{fs → fjs}/types/rtti/common/module.f.d.ts +36 -1
  191. package/{fs → fjs}/types/rtti/common/module.f.js +44 -0
  192. package/fjs/types/rtti/common/proof.f.d.ts +8 -0
  193. package/fjs/types/rtti/common/proof.f.js +51 -0
  194. package/{fs → fjs}/types/rtti/parse/module.f.js +13 -22
  195. package/{fs → fjs}/types/rtti/parse/proof.f.js +7 -18
  196. package/{fs → fjs}/types/rtti/ts/module.f.d.ts +10 -4
  197. package/{fs → fjs}/types/rtti/validate/module.f.js +8 -29
  198. package/{fs → fjs}/types/rtti/validate/proof.f.js +4 -9
  199. package/{fs → fjs}/types/sorted_list/proof.f.js +8 -21
  200. package/{fs → fjs}/types/sorted_set/proof.f.js +14 -39
  201. package/{fs → fjs}/types/string/module.f.js +10 -2
  202. package/fjs/types/string/proof.f.js +77 -0
  203. package/fjs/types/string_set/proof.f.js +43 -0
  204. package/{fs → fjs}/types/ts/proof.f.js +15 -42
  205. package/{fs → fjs}/types/uint8array/module.f.js +7 -7
  206. package/{fs → fjs}/types/uint8array/proof.f.d.ts +4 -1
  207. package/{fs → fjs}/types/uint8array/proof.f.js +7 -7
  208. package/{fs → fjs}/website/module.f.js +2 -3
  209. package/{fs → fjs}/website/proof.f.js +3 -6
  210. package/package.json +8 -8
  211. package/fs/asserts/module.f.d.ts +0 -4
  212. package/fs/asserts/module.f.js +0 -9
  213. package/fs/asserts/proof.f.d.ts +0 -8
  214. package/fs/asserts/proof.f.js +0 -51
  215. package/fs/bnf/data/module.f.d.ts +0 -30
  216. package/fs/bnf/descent/module.f.js +0 -119
  217. package/fs/bnf/proof.f.js +0 -104
  218. package/fs/cas/mcp/module.f.d.ts +0 -36
  219. package/fs/cas/proof.f.d.ts +0 -20
  220. package/fs/cas/proof.f.js +0 -294
  221. package/fs/common/monoid/module.f.js +0 -44
  222. package/fs/common/monoid/proof.f.d.ts +0 -4
  223. package/fs/common/monoid/proof.f.js +0 -27
  224. package/fs/crypto/pow/proof.f.js +0 -161
  225. package/fs/djs/tokenizer/module.f.d.ts +0 -12
  226. package/fs/djs/tokenizer/module.f.js +0 -62
  227. package/fs/djs/tokenizer/proof.f.d.ts +0 -7
  228. package/fs/djs/tokenizer/proof.f.js +0 -543
  229. package/fs/djs/tokenizer-new/module.f.d.ts +0 -3
  230. package/fs/djs/tokenizer-new/module.f.js +0 -155
  231. package/fs/effects/module.f.d.ts +0 -106
  232. package/fs/effects/module.f.js +0 -80
  233. package/fs/effects/proof.f.d.ts +0 -25
  234. package/fs/effects/proof.f.js +0 -115
  235. package/fs/media/revision/proof.f.js +0 -119
  236. package/fs/text/ascii/proof.f.d.ts +0 -4
  237. package/fs/types/bigfloat/proof.f.js +0 -348
  238. package/fs/types/nullable/proof.f.js +0 -50
  239. package/fs/types/range/module.f.js +0 -2
  240. package/fs/types/range/proof.f.js +0 -18
  241. package/fs/types/result/proof.f.js +0 -52
  242. package/fs/types/string/proof.f.js +0 -118
  243. package/fs/types/string_set/proof.f.js +0 -82
  244. /package/{fs → fjs}/asn.1/module.f.d.ts +0 -0
  245. /package/{fs → fjs}/asn.1/module.f.js +0 -0
  246. /package/{fs → fjs}/asn.1/proof.f.d.ts +0 -0
  247. /package/{fs → fjs}/base_n/module.f.d.ts +0 -0
  248. /package/{fs → fjs}/base_n/module.f.js +0 -0
  249. /package/{fs → fjs}/base_n/proof.f.d.ts +0 -0
  250. /package/{fs → fjs}/basen/base128/module.f.d.ts +0 -0
  251. /package/{fs → fjs}/basen/base128/module.f.js +0 -0
  252. /package/{fs → fjs}/basen/base128/proof.f.d.ts +0 -0
  253. /package/{fs → fjs}/basen/base128/proof.f.js +0 -0
  254. /package/{fs → fjs}/basen/base64/module.f.d.ts +0 -0
  255. /package/{fs → fjs}/basen/base64/module.f.js +0 -0
  256. /package/{fs → fjs}/basen/cbase32/module.f.d.ts +0 -0
  257. /package/{fs → fjs}/basen/cbase32/module.f.js +0 -0
  258. /package/{fs → fjs}/basen/cbase32/proof.f.d.ts +0 -0
  259. /package/{fs → fjs}/bnf/proof.f.d.ts +0 -0
  260. /package/{fs → fjs}/bnf/testlib.f.d.ts +0 -0
  261. /package/{fs → fjs}/cas/cli/module.f.d.ts +0 -0
  262. /package/{fs → fjs}/ci/bun/module.f.d.ts +0 -0
  263. /package/{fs → fjs}/ci/deno/module.f.d.ts +0 -0
  264. /package/{fs → fjs}/ci/module.f.d.ts +0 -0
  265. /package/{fs → fjs}/ci/node/module.f.d.ts +0 -0
  266. /package/{fs → fjs}/ci/playwright/module.f.d.ts +0 -0
  267. /package/{fs → fjs}/ci/playwright/module.f.js +0 -0
  268. /package/{fs → fjs}/ci/proof.f.d.ts +0 -0
  269. /package/{fs → fjs}/ci/rust/module.f.d.ts +0 -0
  270. /package/{fs → fjs}/cli/module.f.d.ts +0 -0
  271. /package/{fs → fjs}/cli/proof.f.d.ts +0 -0
  272. /package/{fs → fjs}/crypto/hmac/module.f.d.ts +0 -0
  273. /package/{fs → fjs}/crypto/hmac/module.f.js +0 -0
  274. /package/{fs → fjs}/crypto/hmac/proof.f.d.ts +0 -0
  275. /package/{fs → fjs}/crypto/pow/module.f.d.ts +0 -0
  276. /package/{fs → fjs}/crypto/pow/module.f.js +0 -0
  277. /package/{fs → fjs}/crypto/pow/proof.f.d.ts +0 -0
  278. /package/{fs → fjs}/crypto/secp/module.f.d.ts +0 -0
  279. /package/{fs → fjs}/crypto/secp/module.f.js +0 -0
  280. /package/{fs → fjs}/crypto/secp/proof.f.d.ts +0 -0
  281. /package/{fs → fjs}/crypto/sha2/module.f.d.ts +0 -0
  282. /package/{fs → fjs}/crypto/sha2/module.f.js +0 -0
  283. /package/{fs → fjs}/crypto/sha2/proof.f.d.ts +0 -0
  284. /package/{fs → fjs}/crypto/sign/proof.f.d.ts +0 -0
  285. /package/{fs → fjs}/crypto/vdf/module.f.d.ts +0 -0
  286. /package/{fs → fjs}/crypto/vdf/module.f.js +0 -0
  287. /package/{fs → fjs}/crypto/vdf/proof.f.d.ts +0 -0
  288. /package/{fs → fjs}/dev/module.f.d.ts +0 -0
  289. /package/{fs → fjs}/dev/package_json/module.f.d.ts +0 -0
  290. /package/{fs → fjs}/dev/package_json/module.f.js +0 -0
  291. /package/{fs → fjs}/dev/package_json/proof.f.d.ts +0 -0
  292. /package/{fs → fjs}/dev/proof.f.d.ts +0 -0
  293. /package/{fs → fjs}/djs/ast/module.f.d.ts +0 -0
  294. /package/{fs → fjs}/djs/ast/module.f.js +0 -0
  295. /package/{fs → fjs}/djs/ast/proof.f.d.ts +0 -0
  296. /package/{fs → fjs}/djs/examples/input.f.d.ts +0 -0
  297. /package/{fs → fjs}/djs/examples/input.f.js +0 -0
  298. /package/{fs → fjs}/djs/examples/m.f.d.ts +0 -0
  299. /package/{fs → fjs}/djs/examples/m.f.js +0 -0
  300. /package/{fs → fjs}/djs/module.f.d.ts +0 -0
  301. /package/{fs → fjs}/djs/parser/proof.f.d.ts +0 -0
  302. /package/{fs → fjs}/djs/proof.f.d.ts +0 -0
  303. /package/{fs → fjs}/djs/serializer/module.f.d.ts +0 -0
  304. /package/{fs → fjs}/djs/serializer/module.f.js +0 -0
  305. /package/{fs → fjs}/djs/serializer/proof.f.d.ts +0 -0
  306. /package/{fs → fjs}/djs/transpiler/module.f.d.ts +0 -0
  307. /package/{fs → fjs}/effects/memory/module.f.d.ts +0 -0
  308. /package/{fs → fjs}/effects/memory/module.f.js +0 -0
  309. /package/{fs → fjs}/effects/memory/proof.f.d.ts +0 -0
  310. /package/{fs → fjs}/effects/mock/module.f.d.ts +0 -0
  311. /package/{fs → fjs}/effects/mock/module.f.js +0 -0
  312. /package/{fs → fjs}/effects/module.d.ts +0 -0
  313. /package/{fs → fjs}/effects/module.js +0 -0
  314. /package/{fs → fjs}/effects/node/memory/module.d.ts +0 -0
  315. /package/{fs → fjs}/effects/node/memory/module.js +0 -0
  316. /package/{fs → fjs}/effects/node/memory/proof.d.ts +0 -0
  317. /package/{fs → fjs}/effects/node/virtual/module.f.d.ts +0 -0
  318. /package/{fs → fjs}/effects/node/virtual/module.f.js +0 -0
  319. /package/{fs → fjs}/emergent_testing/all.test.d.ts +0 -0
  320. /package/{fs → fjs}/emergent_testing/all.test.js +0 -0
  321. /package/{fs → fjs}/emergent_testing/example.f.d.ts +0 -0
  322. /package/{fs → fjs}/emergent_testing/example.f.js +0 -0
  323. /package/{fs → fjs}/emergent_testing/module.f.d.ts +0 -0
  324. /package/{fs → fjs}/emergent_testing/scenarios/all.d.ts +0 -0
  325. /package/{fs → fjs}/emergent_testing/scenarios/all.js +0 -0
  326. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -0
  327. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.js +0 -0
  328. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -0
  329. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.js +0 -0
  330. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.d.ts +0 -0
  331. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.js +0 -0
  332. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.d.ts +0 -0
  333. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.js +0 -0
  334. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.d.ts +0 -0
  335. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.js +0 -0
  336. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.d.ts +0 -0
  337. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.js +0 -0
  338. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.d.ts +0 -0
  339. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.js +0 -0
  340. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.d.ts +0 -0
  341. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.js +0 -0
  342. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.d.ts +0 -0
  343. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.js +0 -0
  344. /package/{fs → fjs}/fsc/bnf.f.d.ts +0 -0
  345. /package/{fs → fjs}/fsc/bnf.f.js +0 -0
  346. /package/{fs → fjs}/fsc/json.f.d.ts +0 -0
  347. /package/{fs → fjs}/fsc/json.f.js +0 -0
  348. /package/{fs → fjs}/fsc/module.f.d.ts +0 -0
  349. /package/{fs → fjs}/fsc/module.f.js +0 -0
  350. /package/{fs → fjs}/fsc/proof.f.d.ts +0 -0
  351. /package/{fs → fjs}/fsm/module.f.d.ts +0 -0
  352. /package/{fs → fjs}/fsm/module.f.js +0 -0
  353. /package/{fs → fjs}/fsm/proof.f.d.ts +0 -0
  354. /package/{fs → fjs}/js/tokenizer/module.f.d.ts +0 -0
  355. /package/{fs → fjs}/js/tokenizer/module.f.js +0 -0
  356. /package/{fs → fjs}/js/tokenizer/proof.f.d.ts +0 -0
  357. /package/{fs → fjs}/js/tokenizer/proof.f.js +0 -0
  358. /package/{fs → fjs}/mcp/proof.f.d.ts +0 -0
  359. /package/{fs → fjs}/mcp/stdio/proof.f.d.ts +0 -0
  360. /package/{fs → fjs}/mcp/stdio/proof.f.js +0 -0
  361. /package/{fs → fjs}/media/html/module.f.d.ts +0 -0
  362. /package/{fs → fjs}/media/html/module.f.js +0 -0
  363. /package/{fs → fjs}/media/html/proof.f.d.ts +0 -0
  364. /package/{fs → fjs}/media/json/module.f.d.ts +0 -0
  365. /package/{fs → fjs}/media/json/module.f.js +0 -0
  366. /package/{fs → fjs}/media/json/parser/proof.f.d.ts +0 -0
  367. /package/{fs → fjs}/media/json/proof.f.d.ts +0 -0
  368. /package/{fs → fjs}/media/json/proof.f.js +0 -0
  369. /package/{fs → fjs}/media/json/rpc/module.f.d.ts +0 -0
  370. /package/{fs → fjs}/media/json/rpc/proof.f.d.ts +0 -0
  371. /package/{fs → fjs}/media/json/rpc/proof.f.js +0 -0
  372. /package/{fs → fjs}/media/json/schema/proof.f.d.ts +0 -0
  373. /package/{fs → fjs}/media/json/serializer/module.f.d.ts +0 -0
  374. /package/{fs → fjs}/media/json/serializer/module.f.js +0 -0
  375. /package/{fs → fjs}/media/json/serializer/proof.f.d.ts +0 -0
  376. /package/{fs → fjs}/media/json/tokenizer/module.f.d.ts +0 -0
  377. /package/{fs → fjs}/media/json/tokenizer/module.f.js +0 -0
  378. /package/{fs → fjs}/media/json/tokenizer/proof.f.d.ts +0 -0
  379. /package/{fs → fjs}/media/json/tokenizer/proof.f.js +0 -0
  380. /package/{fs → fjs}/media/proof.f.d.ts +0 -0
  381. /package/{fs → fjs}/media/type/module.f.d.ts +0 -0
  382. /package/{fs → fjs}/media/type/proof.f.d.ts +0 -0
  383. /package/{fs → fjs}/module.d.ts +0 -0
  384. /package/{fs → fjs}/module.f.d.ts +0 -0
  385. /package/{fs → fjs}/module.js +0 -0
  386. /package/{fs → fjs}/path/module.f.d.ts +0 -0
  387. /package/{fs → fjs}/path/module.f.js +0 -0
  388. /package/{fs → fjs}/path/proof.f.d.ts +0 -0
  389. /package/{fs → fjs}/proof.f.d.ts +0 -0
  390. /package/{fs → fjs}/sul/id/module.f.d.ts +0 -0
  391. /package/{fs → fjs}/sul/id/module.f.js +0 -0
  392. /package/{fs → fjs}/sul/id/proof.f.d.ts +0 -0
  393. /package/{fs → fjs}/sul/level/hash/module.f.d.ts +0 -0
  394. /package/{fs → fjs}/sul/level/hash/module.f.js +0 -0
  395. /package/{fs → fjs}/sul/level/hash/proof.f.d.ts +0 -0
  396. /package/{fs → fjs}/sul/level/literal/module.f.d.ts +0 -0
  397. /package/{fs → fjs}/sul/level/literal/module.f.js +0 -0
  398. /package/{fs → fjs}/sul/level/literal/proof.f.d.ts +0 -0
  399. /package/{fs → fjs}/sul/module.f.d.ts +0 -0
  400. /package/{fs → fjs}/sul/module.f.js +0 -0
  401. /package/{fs → fjs}/sul/proof.f.d.ts +0 -0
  402. /package/{fs → fjs}/sul/proof.f.js +0 -0
  403. /package/{fs → fjs}/text/ascii/module.f.d.ts +0 -0
  404. /package/{fs → fjs}/text/ascii/module.f.js +0 -0
  405. /package/{fs → fjs}/text/code_point/module.f.d.ts +0 -0
  406. /package/{fs → fjs}/text/code_point/proof.f.d.ts +0 -0
  407. /package/{fs → fjs}/text/code_point/proof.f.js +0 -0
  408. /package/{fs → fjs}/text/module.f.d.ts +0 -0
  409. /package/{fs → fjs}/text/module.f.js +0 -0
  410. /package/{fs → fjs}/text/proof.f.d.ts +0 -0
  411. /package/{fs → fjs}/text/sgr/module.f.d.ts +0 -0
  412. /package/{fs → fjs}/text/sgr/module.f.js +0 -0
  413. /package/{fs → fjs}/text/sgr/proof.f.d.ts +0 -0
  414. /package/{fs → fjs}/text/utf16/module.f.d.ts +0 -0
  415. /package/{fs → fjs}/text/utf16/proof.f.d.ts +0 -0
  416. /package/{fs → fjs}/text/utf8/module.f.d.ts +0 -0
  417. /package/{fs → fjs}/text/utf8/module.f.js +0 -0
  418. /package/{fs → fjs}/text/utf8/proof.f.d.ts +0 -0
  419. /package/{fs → fjs}/types/array/module.f.d.ts +0 -0
  420. /package/{fs → fjs}/types/array/module.f.js +0 -0
  421. /package/{fs → fjs}/types/array/proof.f.d.ts +0 -0
  422. /package/{fs → fjs}/types/bigfloat/module.f.d.ts +0 -0
  423. /package/{fs → fjs}/types/bigfloat/module.f.js +0 -0
  424. /package/{fs → fjs}/types/bigfloat/proof.f.d.ts +0 -0
  425. /package/{fs → fjs}/types/bigint/module.f.d.ts +0 -0
  426. /package/{fs → fjs}/types/bigint/proof.f.d.ts +0 -0
  427. /package/{fs → fjs}/types/bit_vec/module.f.d.ts +0 -0
  428. /package/{fs → fjs}/types/bit_vec/proof.f.d.ts +0 -0
  429. /package/{fs → fjs}/types/btree/find/module.f.d.ts +0 -0
  430. /package/{fs → fjs}/types/btree/find/module.f.js +0 -0
  431. /package/{fs → fjs}/types/btree/find/proof.f.d.ts +0 -0
  432. /package/{fs → fjs}/types/btree/module.f.d.ts +0 -0
  433. /package/{fs → fjs}/types/btree/module.f.js +0 -0
  434. /package/{fs → fjs}/types/btree/proof.f.d.ts +0 -0
  435. /package/{fs → fjs}/types/btree/set/module.f.d.ts +0 -0
  436. /package/{fs → fjs}/types/btree/set/proof.f.d.ts +0 -0
  437. /package/{fs → fjs}/types/btree/types/module.f.d.ts +0 -0
  438. /package/{fs → fjs}/types/btree/types/module.f.js +0 -0
  439. /package/{fs → fjs}/types/byte_set/module.f.d.ts +0 -0
  440. /package/{fs → fjs}/types/byte_set/module.f.js +0 -0
  441. /package/{fs → fjs}/types/byte_set/proof.f.d.ts +0 -0
  442. /package/{fs → fjs}/types/function/compare/module.f.d.ts +0 -0
  443. /package/{fs → fjs}/types/function/compare/module.f.js +0 -0
  444. /package/{fs → fjs}/types/function/compare/proof.f.d.ts +0 -0
  445. /package/{fs → fjs}/types/function/module.f.d.ts +0 -0
  446. /package/{fs → fjs}/types/function/module.f.js +0 -0
  447. /package/{fs → fjs}/types/function/operator/module.f.d.ts +0 -0
  448. /package/{fs → fjs}/types/function/operator/module.f.js +0 -0
  449. /package/{fs → fjs}/types/function/operator/proof.f.d.ts +0 -0
  450. /package/{fs → fjs}/types/function/proof.f.d.ts +0 -0
  451. /package/{fs → fjs}/types/map/module.f.d.ts +0 -0
  452. /package/{fs → fjs}/types/map/module.f.js +0 -0
  453. /package/{fs → fjs}/types/map/proof.f.d.ts +0 -0
  454. /package/{fs → fjs}/types/nibble_set/module.f.d.ts +0 -0
  455. /package/{fs → fjs}/types/nibble_set/module.f.js +0 -0
  456. /package/{fs → fjs}/types/nibble_set/proof.f.d.ts +0 -0
  457. /package/{fs → fjs}/types/nominal/module.f.d.ts +0 -0
  458. /package/{fs → fjs}/types/nominal/module.f.js +0 -0
  459. /package/{fs → fjs}/types/nominal/proof.f.d.ts +0 -0
  460. /package/{fs → fjs}/types/nullable/module.f.d.ts +0 -0
  461. /package/{fs → fjs}/types/nullable/module.f.js +0 -0
  462. /package/{fs → fjs}/types/nullable/proof.f.d.ts +0 -0
  463. /package/{fs → fjs}/types/number/module.f.d.ts +0 -0
  464. /package/{fs → fjs}/types/number/proof.f.d.ts +0 -0
  465. /package/{fs → fjs}/types/object/module.f.d.ts +0 -0
  466. /package/{fs → fjs}/types/object/module.f.js +0 -0
  467. /package/{fs → fjs}/types/object/proof.f.d.ts +0 -0
  468. /package/{fs → fjs}/types/option/module.f.d.ts +0 -0
  469. /package/{fs → fjs}/types/option/module.f.js +0 -0
  470. /package/{fs → fjs}/types/ordered_map/module.f.d.ts +0 -0
  471. /package/{fs → fjs}/types/ordered_map/module.f.js +0 -0
  472. /package/{fs → fjs}/types/ordered_map/proof.f.d.ts +0 -0
  473. /package/{fs → fjs}/types/ordered_map/proof.f.js +0 -0
  474. /package/{fs → fjs}/types/patricia_trie/module.f.d.ts +0 -0
  475. /package/{fs → fjs}/types/patricia_trie/module.f.js +0 -0
  476. /package/{fs → fjs}/types/patricia_trie/proof.f.d.ts +0 -0
  477. /package/{fs → fjs}/types/phantom/module.f.d.ts +0 -0
  478. /package/{fs → fjs}/types/phantom/module.f.js +0 -0
  479. /package/{fs → fjs}/types/prime_field/module.f.d.ts +0 -0
  480. /package/{fs → fjs}/types/prime_field/proof.f.d.ts +0 -0
  481. /package/{fs → fjs}/types/prime_field/proof.f.js +0 -0
  482. /package/{fs → fjs}/types/range/proof.f.d.ts +0 -0
  483. /package/{fs → fjs}/types/range_map/module.f.d.ts +0 -0
  484. /package/{fs → fjs}/types/range_map/module.f.js +0 -0
  485. /package/{fs → fjs}/types/range_map/proof.f.d.ts +0 -0
  486. /package/{fs → fjs}/types/result/module.d.ts +0 -0
  487. /package/{fs → fjs}/types/result/module.f.d.ts +0 -0
  488. /package/{fs → fjs}/types/result/module.f.js +0 -0
  489. /package/{fs → fjs}/types/result/module.js +0 -0
  490. /package/{fs → fjs}/types/rtti/module.f.d.ts +0 -0
  491. /package/{fs → fjs}/types/rtti/module.f.js +0 -0
  492. /package/{fs → fjs}/types/rtti/parse/module.f.d.ts +0 -0
  493. /package/{fs → fjs}/types/rtti/parse/proof.f.d.ts +0 -0
  494. /package/{fs → fjs}/types/rtti/proof.f.d.ts +0 -0
  495. /package/{fs → fjs}/types/rtti/proof.f.js +0 -0
  496. /package/{fs → fjs}/types/rtti/ts/module.f.js +0 -0
  497. /package/{fs → fjs}/types/rtti/ts/proof.f.d.ts +0 -0
  498. /package/{fs → fjs}/types/rtti/ts/proof.f.js +0 -0
  499. /package/{fs → fjs}/types/rtti/validate/module.f.d.ts +0 -0
  500. /package/{fs → fjs}/types/rtti/validate/proof.f.d.ts +0 -0
  501. /package/{fs → fjs}/types/sorted_list/module.f.d.ts +0 -0
  502. /package/{fs → fjs}/types/sorted_list/module.f.js +0 -0
  503. /package/{fs → fjs}/types/sorted_list/proof.f.d.ts +0 -0
  504. /package/{fs → fjs}/types/sorted_set/module.f.d.ts +0 -0
  505. /package/{fs → fjs}/types/sorted_set/module.f.js +0 -0
  506. /package/{fs → fjs}/types/sorted_set/proof.f.d.ts +0 -0
  507. /package/{fs → fjs}/types/string/module.f.d.ts +0 -0
  508. /package/{fs → fjs}/types/string/proof.f.d.ts +0 -0
  509. /package/{fs → fjs}/types/string_set/module.f.d.ts +0 -0
  510. /package/{fs → fjs}/types/string_set/module.f.js +0 -0
  511. /package/{fs → fjs}/types/string_set/proof.f.d.ts +0 -0
  512. /package/{fs → fjs}/types/ts/module.f.d.ts +0 -0
  513. /package/{fs → fjs}/types/ts/module.f.js +0 -0
  514. /package/{fs → fjs}/types/ts/proof.f.d.ts +0 -0
  515. /package/{fs → fjs}/types/uint8array/module.f.d.ts +0 -0
  516. /package/{fs → fjs}/website/module.f.d.ts +0 -0
  517. /package/{fs → fjs}/website/proof.f.d.ts +0 -0
@@ -42,7 +42,7 @@ export const flat = () => {
42
42
  const [e0, e1, e2] = events;
43
43
  assert(e0[0] === 'result' && e0[2][0] === 'a');
44
44
  assert(e1[0] === 'result' && e1[2][0] === 'b');
45
- assertEq(e2[0], 'summary');
45
+ assert(e2[0] === 'summary');
46
46
  const [, pass, fail] = e2;
47
47
  assertEq(pass, 2);
48
48
  assertEq(fail, 0);
@@ -56,7 +56,7 @@ export const nested = () => {
56
56
  const [e0, e1, e2] = events;
57
57
  assert(e0[0] === 'result' && e0[2][1] === 'add');
58
58
  assert(e1[0] === 'result' && e1[2][1] === 'sub');
59
- assertEq(e2[0], 'summary');
59
+ assert(e2[0] === 'summary');
60
60
  const [, pass, fail] = e2;
61
61
  assertEq(pass, 2);
62
62
  assertEq(fail, 0);
@@ -69,7 +69,7 @@ export const throwKey = () => {
69
69
  assertEq(exit, 0);
70
70
  const [e0, e1] = events;
71
71
  assert(e0[0] === 'result' && e0[2][0] === 'throw' && e0[2][1] === 'a');
72
- assertEq(e1[0], 'summary');
72
+ assert(e1[0] === 'summary');
73
73
  const [, pass, fail] = e1;
74
74
  assertEq(pass, 1);
75
75
  assertEq(fail, 0);
@@ -81,7 +81,7 @@ export const throwKeyFail = () => {
81
81
  });
82
82
  assertEq(exit, 1);
83
83
  const [e0, e1] = events;
84
- assertEq(e0[0], 'result');
84
+ assert(e0[0] === 'result');
85
85
  const [, pass, fail] = e1;
86
86
  assertEq(pass, 0);
87
87
  assertEq(fail, 1);
@@ -93,7 +93,7 @@ export const mixedPassFail = () => {
93
93
  });
94
94
  assertEq(exit, 1);
95
95
  const summary = events[events.length - 1];
96
- assertEq(summary[0], 'summary');
96
+ assert(summary[0] === 'summary');
97
97
  const [, pass, fail] = summary;
98
98
  assertEq(pass, 1);
99
99
  assertEq(fail, 1);
@@ -218,41 +218,72 @@ export const githubReporterOutput = () => {
218
218
  assertEq(exit, 1);
219
219
  assertEq(stderr, '::error file=./s.proof.f.ts,line=1,title=import("./s.proof.f.ts").proof["a%3Ab%2Cc%25d"]()::oops\n');
220
220
  };
221
- // registerModule appends ' ...' for inline runners (Bun/Playwright).
222
- // Uses a minimal synchronous mock for the Test/All/Await effect operations.
223
- export const registerSuffixes = () => {
221
+ const registerNoopCtx = { test: (_n, _o, _f) => Promise.resolve() };
222
+ /**
223
+ * Builds a synchronous mock runner for `registerModule`'s `Test`/`All`/`Await`
224
+ * effect operations. Only the `test` op varies between call sites (whether it
225
+ * invokes the registered callback), so `all`/`await` are shared here.
226
+ */
227
+ const makeRegisterRunner = (testOp) => {
224
228
  let runner;
225
- const noopCtx = { test: (_n, _o, _f) => Promise.resolve() };
226
- const makeRunner = () => mockRun({
227
- test: (_ctx, name, _xf, _fn) => (s) => [[...s, name], undefined],
228
- all: (...effects) => (s) => {
229
- let st = s;
230
- const rs = [];
231
- for (const e of effects) {
232
- const [ns, r] = runner(st)(e);
233
- st = ns;
234
- rs.push(r);
235
- }
236
- return [st, rs];
237
- },
238
- await: p => (s) => [s, [p]],
229
+ runner = mockRun({
230
+ test: (ctx, name, xf, fn) => testOp(runner, ctx, name, xf, fn),
231
+ all: (...effects) => (s) => effects.reduce(([st, rs], e) => {
232
+ const [ns, r] = runner(st)(e);
233
+ return [ns, [...rs, r]];
234
+ }, [s, []]),
235
+ await: (p) => (s) => [s, [p]],
239
236
  });
240
- runner = makeRunner();
237
+ return runner;
238
+ };
239
+ // registerModule appends ' ...' for inline runners (Bun/Playwright).
240
+ // This mock never invokes the registered callback; it only records names.
241
+ export const registerSuffixes = () => {
242
+ const runner = makeRegisterRunner((_runner, _ctx, name, _xf, _fn) => (s) => [[...s, name], undefined]);
241
243
  const proof = {
242
244
  ok: () => { },
243
245
  throw: { a: () => { throw 'expected'; } },
244
246
  };
245
247
  // Node (star = ''): no suffixes
246
- const [nodeNames] = runner([])(registerModule(noopCtx, './a.f.ts', proof, ''));
248
+ const [nodeNames] = runner([])(registerModule(registerNoopCtx, './a.f.ts', proof, ''));
247
249
  assertEq(nodeNames.length, 2);
248
- assertEq(nodeNames[0], 'import("./a.f.ts").proof.ok()');
250
+ assert(nodeNames[0] === 'import("./a.f.ts").proof.ok()');
249
251
  assertEq(nodeNames[1], 'import("./a.f.ts").proof.throw.a()');
250
252
  // Bun/Playwright (star = ' ...'): ... on normal tests, path shows throw for throw-tests
251
- const [inlineNames] = runner([])(registerModule(noopCtx, './a.f.ts', proof, ' ...'));
253
+ const [inlineNames] = runner([])(registerModule(registerNoopCtx, './a.f.ts', proof, ' ...'));
252
254
  assertEq(inlineNames.length, 2);
253
- assertEq(inlineNames[0], 'import("./a.f.ts").proof.ok() ...');
255
+ assert(inlineNames[0] === 'import("./a.f.ts").proof.ok() ...');
254
256
  assertEq(inlineNames[1], 'import("./a.f.ts").proof.throw.a()');
255
257
  };
258
+ // A `throw`-tagged test whose function completes without throwing (the
259
+ // external framework, not this module, is responsible for turning that into
260
+ // a failure via `expectFailure`). registerModule's own callback must still
261
+ // short-circuit before walking the returned value for sub-tests: it invokes
262
+ // the callback and returns without recursing, rather than treating the
263
+ // returned object as a sub-tree.
264
+ export const registerThrowsWithoutThrowing = () => {
265
+ // Unlike registerSuffixes' mock, this one actually invokes the registered
266
+ // callback so registerOne's inner `.step` body runs, and asserts the
267
+ // callback is registered with `expectFailure: true`.
268
+ const runner = makeRegisterRunner((runner, ctx, name, xf, fn) => (s) => {
269
+ assert(xf);
270
+ const [ns] = runner(s)(fn(ctx));
271
+ return [[...ns, name], undefined];
272
+ });
273
+ // Returns a sub-tree that would register more tests if it were walked.
274
+ const proof = { throw: { a: () => ({ sub: () => { } }) } };
275
+ const [names] = runner([])(registerModule(registerNoopCtx, './a.f.ts', proof, ''));
276
+ // Only the throw-test itself is registered; `sub` is never reached.
277
+ assertEq(names.length, 1);
278
+ assertEq(names[0], 'import("./a.f.ts").proof.throw.a()');
279
+ };
280
+ // registerModule with an empty proof object registers zero tests and
281
+ // returns without invoking the mock's `test` op at all.
282
+ export const registerEmptyProof = () => {
283
+ const runner = makeRegisterRunner((_runner, _ctx, name, _xf, _fn) => (s) => [[...s, name], undefined]);
284
+ const [names] = runner([])(registerModule(registerNoopCtx, './a.f.ts', {}, ''));
285
+ assertEq(names.length, 0);
286
+ };
256
287
  // direct unit tests for the pure path-format helpers
257
288
  export const helpers = {
258
289
  isInteger: () => {
@@ -361,6 +392,8 @@ export const proof = {
361
392
  defaultReporterFailOutput,
362
393
  githubReporterOutput,
363
394
  registerSuffixes,
395
+ registerThrowsWithoutThrowing,
396
+ registerEmptyProof,
364
397
  defaultReporterExpectedToThrow,
365
398
  helpers
366
399
  };
@@ -15,24 +15,18 @@ Object.getOwnPropertyDescriptor({ [name]: () => undefined }, name).value;
15
15
  export const proof = {
16
16
  a: () => {
17
17
  const x = f('1');
18
- if (x !== '["1"]') {
19
- throw x;
20
- }
18
+ assertEq(x, '["1"]');
21
19
  },
22
20
  b: () => {
23
21
  // exercises toInit: terminal returns empty output and loops back to init
24
22
  const result = init(terminal);
25
- if (result[0].length !== 0) {
26
- throw result[0];
27
- }
23
+ assertEq(result[0].length, 0, result[0]);
28
24
  },
29
25
  c: () => {
30
26
  // exercises unexpectedSymbol: next state after a token returns an error message
31
27
  const next = init(one('1'))[1];
32
28
  const result = next(42);
33
- if (result[0][0] !== 'unexpected symbol 42') {
34
- throw result[0][0];
35
- }
29
+ assertEq(result[0][0], 'unexpected symbol 42');
36
30
  },
37
31
  fn: () => {
38
32
  const o = {
@@ -40,58 +34,42 @@ export const proof = {
40
34
  };
41
35
  const f = o["hello world!"];
42
36
  const { name } = f;
43
- if (name !== "hello world!") {
44
- throw name;
45
- }
37
+ assertEq(name, "hello world!");
46
38
  //
47
39
  const f1 = { ["boring"]: () => undefined }["boring"];
48
- if (f1.name !== "boring") {
49
- throw f1.name;
50
- }
40
+ assertEq(f1.name, "boring");
51
41
  //
52
42
  const x = fn(() => undefined, "hello").name;
53
- if (x !== "") {
54
- throw x;
55
- }
43
+ assertEq(x, "");
56
44
  //
57
45
  const m = withName("boring2").name;
58
- if (m !== "boring2") {
59
- throw m;
60
- }
46
+ assertEq(m, "boring2");
61
47
  //
62
48
  const a = function x() { return undefined; };
63
- if (a.name !== "x") {
64
- throw a.name;
65
- }
49
+ assertEq(a.name, "x");
66
50
  },
67
51
  //
68
52
  f1: () => {
69
53
  const m1 = () => undefined;
70
- if (m1.name !== "m1") {
71
- throw m1.name;
72
- }
54
+ assertEq(m1.name, "m1");
73
55
  },
74
56
  //
75
57
  f2: () => {
76
58
  const m11 = (() => undefined);
77
- if (m11.name !== "m11") {
78
- throw m11.name;
79
- }
59
+ assertEq(m11.name, "m11");
80
60
  },
81
61
  //
82
62
  f3: () => {
83
63
  const m2 = true ? () => undefined : () => undefined;
84
64
  // for `bun` it is `m2`:
85
- // if (m2.name !== "") { throw m2.name }
65
+ // assertEq(m2.name, "")
86
66
  // see also https://github.com/oven-sh/bun/issues/20398
87
67
  },
88
68
  f4: () => {
89
69
  const id = (i) => i;
90
70
  const f = id(() => undefined);
91
71
  // for `bun` it is `m2`:
92
- if (f.name !== "") {
93
- throw f.name;
94
- }
72
+ assertEq(f.name, "");
95
73
  },
96
74
  chars: {
97
75
  whitespace: () => {
@@ -5,6 +5,7 @@ import { stringify } from '../media/json/module.f.js';
5
5
  import { identity } from '../types/function/module.f.js';
6
6
  import { toArray } from '../types/list/module.f.js';
7
7
  import { stringToList } from '../text/utf16/module.f.js';
8
+ import { assertEq } from '../asserts/module.f.js';
8
9
  const stringifyIdentity = stringify(identity);
9
10
  const buildDfa = () => {
10
11
  const lowercaseAlpha = toRange('az');
@@ -85,9 +86,7 @@ export const proof = {
85
86
  '["id"]'
86
87
  ];
87
88
  const expectedResult = stringifyIdentity(expectedOutput);
88
- if (result !== expectedResult) {
89
- throw result;
90
- }
89
+ assertEq(result, expectedResult);
91
90
  },
92
91
  () => {
93
92
  const dfa = buildDfa();
@@ -99,9 +98,7 @@ export const proof = {
99
98
  '["float"]'
100
99
  ];
101
100
  const expectedResult = stringifyIdentity(expectedOutput);
102
- if (result !== expectedResult) {
103
- throw result;
104
- }
101
+ assertEq(result, expectedResult);
105
102
  },
106
103
  () => {
107
104
  const dfa = buildDfa();
@@ -112,9 +109,7 @@ export const proof = {
112
109
  '[]'
113
110
  ];
114
111
  const expectedResult = stringifyIdentity(expectedOutput);
115
- if (result !== expectedResult) {
116
- throw result;
117
- }
112
+ assertEq(result, expectedResult);
118
113
  },
119
114
  () => {
120
115
  const dfa = buildDfa();
@@ -125,9 +120,7 @@ export const proof = {
125
120
  '[]'
126
121
  ];
127
122
  const expectedResult = stringifyIdentity(expectedOutput);
128
- if (result !== expectedResult) {
129
- throw result;
130
- }
123
+ assertEq(result, expectedResult);
131
124
  }
132
125
  ]
133
126
  };
@@ -166,6 +166,13 @@ export type ToolEntry<O extends Operation> = {
166
166
  * @returns A `ToolEntry` ready to be added to a registry
167
167
  */
168
168
  export declare const toolEntry: <T extends Type, O extends Operation>(name: string, description: string, inputRtti: T, handle: (args: Ts<T>) => Effect<O, ToolsCallResult>) => ToolEntry<O>;
169
+ /**
170
+ * Helper to create a successful single-text-block tool result.
171
+ *
172
+ * @param text - The text to return to the client
173
+ * @returns A `ToolsCallResult` with the text content
174
+ */
175
+ export declare const okResult: (text: string) => ToolsCallResult;
169
176
  /**
170
177
  * Helper to create a tool-level error result with plain text explanation.
171
178
  *
@@ -9,13 +9,13 @@
9
9
  *
10
10
  * Each schema is both a runtime decoder (`validate(schema)`) and a static
11
11
  * TypeScript type (`Ts<typeof schema>`). Transport framing (stdio) and the
12
- * JSON-RPC dispatcher are in `fs/media/json/rpc/module.f.ts`.
12
+ * JSON-RPC dispatcher are in `fjs/media/json/rpc/module.f.ts`.
13
13
  *
14
14
  * @module
15
15
  */
16
16
  import { boolean, string, option, array, record, or } from '../types/rtti/module.f.js';
17
17
  import { unknown } from '../media/json/module.f.js';
18
- import { pure } from '../effects/module.f.js';
18
+ import { pure, step } from '../effects/module.f.js';
19
19
  import { read, write } from '../effects/memory/module.f.js';
20
20
  import { decodeRequest, rpcError, invalidRequest, invalidParams, methodNotFound, jsonrpc, } from '../media/json/rpc/module.f.js';
21
21
  import { validate } from '../types/rtti/validate/module.f.js';
@@ -125,13 +125,20 @@ export const toolEntry = (name, description, inputRtti, handle) => ({
125
125
  : handle(r);
126
126
  }
127
127
  });
128
+ /**
129
+ * Helper to create a successful single-text-block tool result.
130
+ *
131
+ * @param text - The text to return to the client
132
+ * @returns A `ToolsCallResult` with the text content
133
+ */
134
+ export const okResult = (text) => ({ content: [{ type: 'text', text }] });
128
135
  /**
129
136
  * Helper to create a tool-level error result with plain text explanation.
130
137
  *
131
138
  * @param text - The error message to return to the client
132
139
  * @returns A `ToolsCallResult` with `isError: true` and the text explanation
133
140
  */
134
- export const errorResult = (text) => ({ content: [{ type: 'text', text }], isError: true });
141
+ export const errorResult = (text) => ({ ...okResult(text), isError: true });
135
142
  /**
136
143
  * Builds `McpHandlers` from a registry of tool entries.
137
144
  *
@@ -204,8 +211,8 @@ export const mcpStep = ({ protocolVersion, capabilities, serverInfo, }) => (hand
204
211
  // Malformed handshake — ignore it; the session stays gated.
205
212
  return pure(null);
206
213
  }
207
- return read(stateKey).step(([t]) => t === 'initializing'
208
- ? write(stateKey, ['initialized', true]).step(() => pure(null))
214
+ return step(read(stateKey), ([t]) => t === 'initializing'
215
+ ? step(write(stateKey, ['initialized', true]), () => pure(null))
209
216
  : pure(null));
210
217
  }
211
218
  return pure(null);
@@ -220,7 +227,7 @@ export const mcpStep = ({ protocolVersion, capabilities, serverInfo, }) => (hand
220
227
  }
221
228
  // `initialize` transitions uninitialized → initializing; reject if already done.
222
229
  if (method === 'initialize') {
223
- return read(stateKey).step(([t]) => {
230
+ return step(read(stateKey), ([t]) => {
224
231
  if (t !== 'uninitialized') {
225
232
  return pure(_errResponse(id)(invalidRequest));
226
233
  }
@@ -233,11 +240,11 @@ export const mcpStep = ({ protocolVersion, capabilities, serverInfo, }) => (hand
233
240
  capabilities,
234
241
  serverInfo,
235
242
  };
236
- return write(stateKey, ['initializing']).step(() => pure(_okResponse(id)(result)));
243
+ return step(write(stateKey, ['initializing']), () => pure(_okResponse(id)(result)));
237
244
  });
238
245
  }
239
246
  // All other methods require fully initialized state — read it first.
240
- return read(stateKey).step(([t]) => {
247
+ return step(read(stateKey), ([t]) => {
241
248
  if (t !== 'initialized') {
242
249
  return pure(_errResponse(id)(notInitialized));
243
250
  }
@@ -249,7 +256,7 @@ export const mcpStep = ({ protocolVersion, capabilities, serverInfo, }) => (hand
249
256
  const [t, pr] = validate(toolsListParams)(params === undefined ? {} : params);
250
257
  return t === 'error'
251
258
  ? pure(_errResponse(id)(invalidParams))
252
- : handlers.toolsList(pr).step(r => pure(_okResponse(id)(r)));
259
+ : step(handlers.toolsList(pr), r => pure(_okResponse(id)(r)));
253
260
  }
254
261
  if (method === 'tools/call') {
255
262
  if (capabilities.tools === undefined) {
@@ -258,7 +265,7 @@ export const mcpStep = ({ protocolVersion, capabilities, serverInfo, }) => (hand
258
265
  const [t, pr] = validate(toolsCallParams)(params);
259
266
  return t === 'error'
260
267
  ? pure(_errResponse(id)(invalidParams))
261
- : handlers.toolsCall(pr).step(r => pure(_okResponse(id)(r)));
268
+ : step(handlers.toolsCall(pr), r => pure(_okResponse(id)(r)));
262
269
  }
263
270
  return pure(_errResponse(id)(methodNotFound));
264
271
  });
@@ -1,5 +1,6 @@
1
1
  import { assert, assertEq } from '../asserts/module.f.js';
2
- import { pure } from '../effects/module.f.js';
2
+ import { pure, step } from '../effects/module.f.js';
3
+ import { eff } from '../effects/eff/module.f.js';
3
4
  import { run } from '../effects/mock/module.f.js';
4
5
  import { asBase, asNominal, create, read } from '../effects/memory/module.f.js';
5
6
  import { uninitializedState, mcpStep, notInitialized, } from './module.f.js';
@@ -36,11 +37,11 @@ const runMem = (effect) => run(mock)(initial)(effect)[1];
36
37
  // O flows through McpHandlers<never>, so we cast the widened type down to MemOp.
37
38
  const asMemEffect = (e) => e;
38
39
  // Run one step from uninitializedState, return [response, newState].
39
- const step1 = (cfg) => (msg) => runMem(asMemEffect(create(uninitializedState).step(key => mcpStep(cfg)(handlers)(key)(msg).step(resp => read(key).step(state => pure([resp, state]))))));
40
+ const step1 = (cfg) => (msg) => runMem(asMemEffect(step(create(uninitializedState), key => step(mcpStep(cfg)(handlers)(key)(msg), resp => step(read(key), state => pure([resp, state]))))));
40
41
  // Run initialize then a second step, return [response, newState] of the second.
41
- const step2 = (cfg) => (msg1) => (msg2) => runMem(asMemEffect(create(uninitializedState).step(key => mcpStep(cfg)(handlers)(key)(msg1).step(() => mcpStep(cfg)(handlers)(key)(msg2).step(resp => read(key).step(state => pure([resp, state])))))));
42
+ const step2 = (cfg) => (msg1) => (msg2) => runMem(asMemEffect(eff(create(uninitializedState)).step(key => eff(mcpStep(cfg)(handlers)(key)(msg1)).step(() => eff(mcpStep(cfg)(handlers)(key)(msg2)).step(resp => step(read(key), state => pure([resp, state]))).value).value).value));
42
43
  // Run initialize, notifications/initialized, then a third step; return [response, newState] of the third.
43
- const step3 = (cfg) => (msg1) => (msg2) => (msg3) => runMem(asMemEffect(create(uninitializedState).step(key => mcpStep(cfg)(handlers)(key)(msg1).step(() => mcpStep(cfg)(handlers)(key)(msg2).step(() => mcpStep(cfg)(handlers)(key)(msg3).step(resp => read(key).step(state => pure([resp, state]))))))));
44
+ const step3 = (cfg) => (msg1) => (msg2) => (msg3) => runMem(asMemEffect(eff(create(uninitializedState)).step(key => eff(mcpStep(cfg)(handlers)(key)(msg1)).step(() => eff(mcpStep(cfg)(handlers)(key)(msg2)).step(() => eff(mcpStep(cfg)(handlers)(key)(msg3)).step(resp => eff(read(key)).step(state => pure([resp, state])).value).value).value).value).value));
44
45
  // ── Test messages ─────────────────────────────────────────────────────────────
45
46
  const initMsg = { jsonrpc: '2.0', method: 'initialize', id: 1,
46
47
  params: { protocolVersion: '2024-11-05', capabilities: {}, clientInfo: { name: 'client', version: '0.0.1' } } };
@@ -49,16 +50,16 @@ const initNotif = { jsonrpc: '2.0', method: 'notifications/initialized' };
49
50
  export const proof = {
50
51
  lifecycle: {
51
52
  initialStateIsUninitialized: () => {
52
- assertEq(uninitializedState[0], 'uninitialized');
53
+ assert(uninitializedState[0] === 'uninitialized');
53
54
  },
54
55
  initializeTransitionsToInitializing: () => {
55
56
  const [, newState] = step1(config)(initMsg);
56
- assertEq(newState[0], 'initializing');
57
+ assert(newState[0] === 'initializing');
57
58
  },
58
59
  initializedNotificationTransitionsToInitialized: () => {
59
60
  const [resp, newState] = step2(config)(initMsg)(initNotif);
60
61
  assertEq(resp, null);
61
- assertEq(newState[0], 'initialized');
62
+ assert(newState[0] === 'initialized');
62
63
  },
63
64
  initializeReturnsResult: () => {
64
65
  const [resp] = step1(config)(initMsg);
@@ -69,12 +70,12 @@ export const proof = {
69
70
  initializeWithBadParamsReturnsInvalidParams: () => {
70
71
  const bad = { jsonrpc: '2.0', method: 'initialize', id: 2, params: { wrong: true } };
71
72
  const [resp, newState] = step1(config)(bad);
72
- assertEq(newState[0], 'uninitialized');
73
+ assert(newState[0] === 'uninitialized');
73
74
  assertEq(resp.error.code, -32602);
74
75
  },
75
76
  notificationBeforeInitReturnNull: () => {
76
77
  const [resp, newState] = step1(config)(initNotif);
77
- assertEq(newState[0], 'uninitialized');
78
+ assert(newState[0] === 'uninitialized');
78
79
  assertEq(resp, null);
79
80
  },
80
81
  unknownNotificationReturnNull: () => {
@@ -84,19 +85,19 @@ export const proof = {
84
85
  },
85
86
  doubleInitializeReturnsInvalidRequest: () => {
86
87
  const [resp, newState] = step2(config)(initMsg)(initMsg);
87
- assertEq(newState[0], 'initializing');
88
+ assert(newState[0] === 'initializing');
88
89
  assertEq(resp.error.code, -32600);
89
90
  },
90
91
  pingBeforeInitSucceeds: () => {
91
92
  const msg = { jsonrpc: '2.0', method: 'ping', id: 11 };
92
93
  const [resp, newState] = step1(config)(msg);
93
- assertEq(newState[0], 'uninitialized');
94
+ assert(newState[0] === 'uninitialized');
94
95
  assert(!('error' in resp));
95
96
  },
96
97
  pingDuringInitializingSucceeds: () => {
97
98
  const msg = { jsonrpc: '2.0', method: 'ping', id: 12 };
98
99
  const [resp, newState] = step2(config)(initMsg)(msg);
99
- assertEq(newState[0], 'initializing');
100
+ assert(newState[0] === 'initializing');
100
101
  assert(!('error' in resp));
101
102
  },
102
103
  pingAfterInitSucceeds: () => {
@@ -118,24 +119,24 @@ export const proof = {
118
119
  const notif = { jsonrpc: '2.0', method: 'notifications/initialized', params: {} };
119
120
  const [resp, newState] = step2(config)(initMsg)(notif);
120
121
  assertEq(resp, null);
121
- assertEq(newState[0], 'initialized');
122
+ assert(newState[0] === 'initialized');
122
123
  },
123
124
  initializedNotificationBadParamsIgnored: () => {
124
125
  const notif = { jsonrpc: '2.0', method: 'notifications/initialized', params: 1 };
125
126
  const [resp, newState] = step2(config)(initMsg)(notif);
126
127
  assertEq(resp, null);
127
- assertEq(newState[0], 'initializing');
128
+ assert(newState[0] === 'initializing');
128
129
  },
129
130
  methodBeforeInitReturnsNotInitialized: () => {
130
131
  const msg = { jsonrpc: '2.0', method: 'tools/list', id: 3 };
131
132
  const [resp, newState] = step1(config)(msg);
132
- assertEq(newState[0], 'uninitialized');
133
+ assert(newState[0] === 'uninitialized');
133
134
  assertEq(resp.error.code, notInitialized.code);
134
135
  },
135
136
  methodDuringInitializingReturnsNotInitialized: () => {
136
137
  const msg = { jsonrpc: '2.0', method: 'tools/list', id: 16 };
137
138
  const [resp, newState] = step2(config)(initMsg)(msg);
138
- assertEq(newState[0], 'initializing');
139
+ assert(newState[0] === 'initializing');
139
140
  assertEq(resp.error.code, notInitialized.code);
140
141
  },
141
142
  invalidEnvelopeReturnsInvalidRequest: () => {
@@ -2,10 +2,10 @@
2
2
  * stdio transport for JSON-RPC / MCP servers.
3
3
  *
4
4
  * `stdioTransport` wraps a step function — the `mcpStep`-shaped
5
- * `(value) => Effect<O, Response | null>` from `fs/mcp/module.f.ts` — in the
5
+ * `(value) => Effect<O, Response | null>` from `fjs/mcp/module.f.ts` — in the
6
6
  * canonical read → parse → dispatch → write loop, expressed as a recursive
7
7
  * effect so it stays in the pure effect model and is fully testable against a
8
- * mock stdin / stdout (see `fs/effects/node/virtual`) with no real process.
8
+ * mock stdin / stdout (see `fjs/effects/node/virtual`) with no real process.
9
9
  *
10
10
  * The loop only consumes `Read` (stdin, one byte at a time, via the pure
11
11
  * `readLine` combinator) and emits `Write` (stdout) on top of whatever `O` the
@@ -39,9 +39,9 @@ import { type Response } from '../../media/json/rpc/module.f.ts';
39
39
  */
40
40
  export type Step<O extends Operation> = (value: Unknown) => Effect<O, Response | null>;
41
41
  /**
42
- * Drives the read-parse-dispatch-write loop for `step` over stdin/stdout.
42
+ * Drives the read-parse-dispatch-write loop for `handler` over stdin/stdout.
43
43
  *
44
44
  * Recurses after each handled line; terminates (resolving to `void`) when
45
45
  * `readLine` reports EOF.
46
46
  */
47
- export declare const stdioTransport: <O extends Operation>(step: Step<O>) => Effect<Read | Write | O, void>;
47
+ export declare const stdioTransport: <O extends Operation>(handler: Step<O>) => Effect<Read | Write | O, void>;
@@ -2,10 +2,10 @@
2
2
  * stdio transport for JSON-RPC / MCP servers.
3
3
  *
4
4
  * `stdioTransport` wraps a step function — the `mcpStep`-shaped
5
- * `(value) => Effect<O, Response | null>` from `fs/mcp/module.f.ts` — in the
5
+ * `(value) => Effect<O, Response | null>` from `fjs/mcp/module.f.ts` — in the
6
6
  * canonical read → parse → dispatch → write loop, expressed as a recursive
7
7
  * effect so it stays in the pure effect model and is fully testable against a
8
- * mock stdin / stdout (see `fs/effects/node/virtual`) with no real process.
8
+ * mock stdin / stdout (see `fjs/effects/node/virtual`) with no real process.
9
9
  *
10
10
  * The loop only consumes `Read` (stdin, one byte at a time, via the pure
11
11
  * `readLine` combinator) and emits `Write` (stdout) on top of whatever `O` the
@@ -29,7 +29,7 @@
29
29
  *
30
30
  * @module
31
31
  */
32
- import { pure } from '../../effects/module.f.js';
32
+ import { pure, step } from '../../effects/module.f.js';
33
33
  import { readLine, write } from '../../effects/node/module.f.js';
34
34
  import { tryUtf8 } from '../../text/module.f.js';
35
35
  import { stringToList } from '../../text/utf16/module.f.js';
@@ -49,24 +49,24 @@ const writeResponse = (resp) => {
49
49
  const v = tryUtf8(stringifyJson(resp) + '\n');
50
50
  return v === null
51
51
  ? pure(error(undefined))
52
- : write('stdout', v).step(() => pure(ok(undefined)));
52
+ : step(write('stdout', v), () => pure(ok(undefined)));
53
53
  };
54
54
  /**
55
- * Drives the read-parse-dispatch-write loop for `step` over stdin/stdout.
55
+ * Drives the read-parse-dispatch-write loop for `handler` over stdin/stdout.
56
56
  *
57
57
  * Recurses after each handled line; terminates (resolving to `void`) when
58
58
  * `readLine` reports EOF.
59
59
  */
60
- export const stdioTransport = (step) => readLine('stdin').step(line => line === null
60
+ export const stdioTransport = (handler) => step(readLine('stdin'), line => line === null
61
61
  ? pure(undefined)
62
- : handleLine(step)(line));
63
- const handleLine = (step) => (line) => {
62
+ : handleLine(handler)(line));
63
+ const handleLine = (handler) => (line) => {
64
64
  const [t, value] = parse(tokenize(stringToList(line)));
65
- return (t === 'error'
65
+ return step(t === 'error'
66
66
  ? writeResponse(parseErrorResponse)
67
- : step(value).step(resp => resp === null
67
+ : step(handler(value), resp => resp === null
68
68
  ? pure(undefined)
69
- : writeResponse(resp).step(([t2]) => t2 === 'error'
69
+ : step(writeResponse(resp), ([t2]) => t2 === 'error'
70
70
  // The real response didn't fit. Retry with a fixed, small
71
71
  // internal-error body carrying `resp.id` — but a
72
72
  // caller-controlled `id` (e.g. a very large string) can
@@ -74,8 +74,8 @@ const handleLine = (step) => (line) => {
74
74
  // that retry is bounded by one more: an `id: null`
75
75
  // internal-error, whose fully-constant shape is the only
76
76
  // line in this transport guaranteed to always encode.
77
- ? writeResponse(internalErrorResponse(resp.id)).step(([t3]) => t3 === 'error'
78
- ? writeResponse(internalErrorResponse(null)).step(() => pure(undefined))
77
+ ? step(writeResponse(internalErrorResponse(resp.id)), ([t3]) => t3 === 'error'
78
+ ? step(writeResponse(internalErrorResponse(null)), () => pure(undefined))
79
79
  : pure(undefined))
80
- : pure(undefined)))).step(() => stdioTransport(step));
80
+ : pure(undefined))), () => stdioTransport(handler));
81
81
  };