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
@@ -1,5 +1,5 @@
1
- import { assertEq } from '../../../asserts/module.f.js';
2
- import { awaitIfPromise, fetch, rm, writeFile, readFile, readdir, import_, rename, readBytes, writeBytes } from '../module.f.js';
1
+ import { assert, assertEq } from '../../../asserts/module.f.js';
2
+ import { access, awaitIfPromise, fetch, rm, writeFile, readFile, readdir, import_, rename, readBytes, writeBytes } from '../module.f.js';
3
3
  import { maxLengthBytes, vec, vec8 } from '../../../types/bit_vec/module.f.js';
4
4
  import { emptyState, virtual } from './module.f.js';
5
5
  export const proof = {
@@ -7,24 +7,24 @@ export const proof = {
7
7
  success: () => {
8
8
  const root = { 'a.txt': [vec8(0x42n)] };
9
9
  const [, result] = virtual({ ...emptyState, root })(rm('a.txt'));
10
- assertEq(result[0], 'ok');
10
+ assert(result[0] === 'ok');
11
11
  },
12
12
  notFound: () => {
13
13
  const [, result] = virtual(emptyState)(rm('notexist.txt'));
14
- assertEq(result[0], 'error');
14
+ assert(result[0] === 'error');
15
15
  },
16
16
  isDirectory: () => {
17
17
  const inner = {};
18
18
  const root = { 'mydir': inner };
19
19
  const [, result] = virtual({ ...emptyState, root })(rm('mydir'));
20
- assertEq(result[0], 'error');
20
+ assert(result[0] === 'error');
21
21
  },
22
22
  },
23
23
  writeFileOnDirectory: () => {
24
24
  const inner = {};
25
25
  const root = { 'mydir': inner };
26
26
  const [, result] = virtual({ ...emptyState, root })(writeFile('mydir', vec8(0x42n)));
27
- assertEq(result[0], 'error');
27
+ assert(result[0] === 'error');
28
28
  },
29
29
  readdirRecursive: () => {
30
30
  const file = [vec8(0x42n)];
@@ -32,12 +32,19 @@ export const proof = {
32
32
  const outer = { 'sub': sub };
33
33
  const root = { 'mydir': outer };
34
34
  const [, result] = virtual({ ...emptyState, root })(readdir('mydir', { recursive: true }));
35
- assertEq(result[0], 'ok');
36
- if (result[0] !== 'ok') {
37
- throw result;
38
- }
35
+ assert(result[0] === 'ok');
36
+ assert(result[0] === 'ok', result);
39
37
  assertEq(result[1].length, 2);
40
38
  },
39
+ accessNestedPathThroughFile: () => {
40
+ // 'a/b/c' where 'a' is a file: the operation wrapper's "not a directory"
41
+ // fallback passes the full remaining path through unchanged, covering the
42
+ // path.length !== 1 branch of the access op (only path.length === 0 was
43
+ // otherwise exercised).
44
+ const root = { 'a': [vec8(0x42n)] };
45
+ const [, result] = virtual({ ...emptyState, root })(access('a/b/c'));
46
+ assert(result[0] === 'error');
47
+ },
41
48
  readFileIntoDir: () => {
42
49
  // 'a/b' where both 'a' and 'b' are directories
43
50
  // hits path.length === 0 in operation's f and path.length !== 1 in readFile op
@@ -45,7 +52,7 @@ export const proof = {
45
52
  const outer = { 'b': inner };
46
53
  const root = { 'a': outer };
47
54
  const [, result] = virtual({ ...emptyState, root })(readFile('a/b'));
48
- assertEq(result[0], 'error');
55
+ assert(result[0] === 'error');
49
56
  },
50
57
  awaitNonPromise: () => {
51
58
  // a non-promise value passes through the virtual `await` handler as-is
@@ -55,19 +62,19 @@ export const proof = {
55
62
  fetchNotFound: () => {
56
63
  // covers the `result === undefined` branch of the `fetch` handler
57
64
  const [, result] = virtual(emptyState)(fetch('https://example.com/missing'));
58
- assertEq(result[0], 'error');
65
+ assert(result[0] === 'error');
59
66
  },
60
67
  importNestedPath: () => {
61
68
  // import_ on a path whose parent does not exist covers the
62
69
  // path.length !== 1 branch of the import_ op
63
70
  const [, result] = virtual(emptyState)(import_('a/b'));
64
- assertEq(result[0], 'error');
71
+ assert(result[0] === 'error');
65
72
  },
66
73
  importNonModule: () => {
67
74
  // import_ on a Vec (not a JsModule) covers typeof entry !== 'function' branch
68
75
  const root = { 'module.f.ts': [vec8(0x42n)] };
69
76
  const [, result] = virtual({ ...emptyState, root })(import_('module.f.ts'));
70
- assertEq(result[0], 'error');
77
+ assert(result[0] === 'error');
71
78
  },
72
79
  throw: {
73
80
  readFileOnJsModule: () => {
@@ -80,37 +87,37 @@ export const proof = {
80
87
  // rename('a', 'a') should succeed as a no-op, not reject
81
88
  const root = { 'a': [vec8(0x42n)] };
82
89
  const [, result] = virtual({ ...emptyState, root })(rename('a', 'a'));
83
- assertEq(result[0], 'ok');
90
+ assert(result[0] === 'ok');
84
91
  },
85
92
  renameIntoOwnSubtree: () => {
86
93
  // rename('a', 'a/b') should fail (dst inside src's subtree)
87
94
  const root = { 'a': { 'b': [vec8(0x42n)] } };
88
95
  const [, result] = virtual({ ...emptyState, root })(rename('a', 'a/b'));
89
- assertEq(result[0], 'error');
96
+ assert(result[0] === 'error');
90
97
  },
91
98
  renameOntoOwnAncestor: () => {
92
99
  // rename('a/b', 'a') should fail (src inside dst's subtree)
93
100
  const root = { 'a': { 'b': [vec8(0x42n)] } };
94
101
  const [, result] = virtual({ ...emptyState, root })(rename('a/b', 'a'));
95
- assertEq(result[0], 'error');
102
+ assert(result[0] === 'error');
96
103
  },
97
104
  renameNonEmptyDirOverEmptyDir: () => {
98
105
  // rename a directory onto an empty directory should succeed
99
106
  const root = { 'src': { 'file': [vec8(0x42n)] }, 'dst': {} };
100
107
  const [, result] = virtual({ ...emptyState, root })(rename('src', 'dst'));
101
- assertEq(result[0], 'ok');
108
+ assert(result[0] === 'ok');
102
109
  },
103
110
  renameEmptyDirOverNonEmptyDir: () => {
104
111
  // rename an empty directory onto a non-empty directory should fail
105
112
  const root = { 'src': {}, 'dst': { 'file': [vec8(0x42n)] } };
106
113
  const [, result] = virtual({ ...emptyState, root })(rename('src', 'dst'));
107
- assertEq(result[0], 'error');
114
+ assert(result[0] === 'error');
108
115
  },
109
116
  renameFileOntoDirectory: () => {
110
117
  // rename a file to a path that is already an existing directory should fail
111
118
  const root = { 'myfile': [vec8(0x42n)], 'mydir': {} };
112
119
  const [, result] = virtual({ ...emptyState, root })(rename('myfile', 'mydir'));
113
- assertEq(result[0], 'error');
120
+ assert(result[0] === 'error');
114
121
  },
115
122
  readFileTooLarge: () => {
116
123
  // a file stored as two max-size chunks exceeds the limit; readFile must return an error
@@ -118,37 +125,37 @@ export const proof = {
118
125
  const chunk1 = vec(1n)(1n);
119
126
  const root = { 'big': [chunk0, chunk1] };
120
127
  const [, result] = virtual({ ...emptyState, root })(readFile('big'));
121
- assertEq(result[0], 'error');
128
+ assert(result[0] === 'error');
122
129
  },
123
130
  readBytesNegativeSize: () => {
124
131
  // readBytes with negative size should fail
125
132
  const root = { 'file': [vec8(0x42n)] };
126
133
  const [, result] = virtual({ ...emptyState, root })(readBytes('file', 0, -1));
127
- assertEq(result[0], 'error');
134
+ assert(result[0] === 'error');
128
135
  },
129
136
  readBytesZeroSize: () => {
130
137
  // readBytes with zero size should succeed and return empty vec
131
138
  const root = { 'file': [vec8(0x42n)] };
132
139
  const [, result] = virtual({ ...emptyState, root })(readBytes('file', 0, 0));
133
- assertEq(result[0], 'ok');
140
+ assert(result[0] === 'ok');
134
141
  },
135
142
  readBytesNegativeOffset: () => {
136
143
  // readBytes with negative offset should fail
137
144
  const root = { 'file': [vec8(0x42n)] };
138
145
  const [, result] = virtual({ ...emptyState, root })(readBytes('file', -1, 1));
139
- assertEq(result[0], 'error');
146
+ assert(result[0] === 'error');
140
147
  },
141
148
  readBytesFractionalSize: () => {
142
149
  // readBytes with fractional size should fail rather than throw RangeError
143
150
  const root = { 'file': [vec8(0x42n)] };
144
151
  const [, result] = virtual({ ...emptyState, root })(readBytes('file', 0, 1.5));
145
- assertEq(result[0], 'error');
152
+ assert(result[0] === 'error');
146
153
  },
147
154
  readBytesFractionalOffset: () => {
148
155
  // readBytes with fractional offset should fail rather than throw RangeError
149
156
  const root = { 'file': [vec8(0x42n)] };
150
157
  const [, result] = virtual({ ...emptyState, root })(readBytes('file', 0.5, 1));
151
- assertEq(result[0], 'error');
158
+ assert(result[0] === 'error');
152
159
  },
153
160
  readBytesAcrossChunkBoundary: () => {
154
161
  // Two 128 KiB chunks; read 2 bytes spanning the boundary (last byte of chunk 0, first of chunk 1).
@@ -157,14 +164,14 @@ export const proof = {
157
164
  const chunk1 = vec(maxLengthBytes * 8n)(0xbbn);
158
165
  const root = { 'big': [chunk0, chunk1] };
159
166
  const [, result] = virtual({ ...emptyState, root })(readBytes('big', chunkSize - 1, 2));
160
- assertEq(result[0], 'ok');
167
+ assert(result[0] === 'ok');
161
168
  },
162
169
  writeBytesWrongOffset: () => {
163
170
  // writeBytes is append-only; an offset that doesn't match the current
164
171
  // file size must fail rather than silently create a hole.
165
172
  const root = { 'file': [vec8(0x42n)] };
166
173
  const [, result] = virtual({ ...emptyState, root })(writeBytes('file', 5, vec8(0x43n)));
167
- assertEq(result[0], 'error');
174
+ assert(result[0] === 'error');
168
175
  },
169
176
  largeFileReadBytes: () => {
170
177
  // A file stored as two 128 KiB chunks is larger than maxLengthBytes.
@@ -174,6 +181,6 @@ export const proof = {
174
181
  const chunk1 = vec(maxLengthBytes * 8n)(0xffn);
175
182
  const root = { 'large': [chunk0, chunk1] };
176
183
  const [, result] = virtual({ ...emptyState, root })(readBytes('large', chunkSize, 1));
177
- assertEq(result[0], 'ok');
184
+ assert(result[0] === 'ok');
178
185
  },
179
186
  };
@@ -0,0 +1,51 @@
1
+ import { type Effect, type Operation } from './module.f.ts';
2
+ /**
3
+ * Asserts that `e` yields `expected` without performing a command. Exported so
4
+ * `eff/proof.f.ts` shares this definition instead of repeating it.
5
+ *
6
+ * Not `assertEq(runPure(e), [expected])`: `assertEq` compares with `===`, so a
7
+ * freshly allocated `[expected]` is never equal to the returned option. Assert
8
+ * the option's shape first, then compare the value inside it.
9
+ */
10
+ export declare const assertPure: <O extends Operation, T>(e: Effect<O, T>, expected: T) => void;
11
+ export declare const proof: {
12
+ foldStep: {
13
+ empty: () => void;
14
+ threadsState: () => void;
15
+ order: () => void;
16
+ };
17
+ forEachStep: {
18
+ empty: () => void;
19
+ runs: () => void;
20
+ };
21
+ okStep: {
22
+ ok: () => void;
23
+ error: () => void;
24
+ };
25
+ runPure: {
26
+ pure: () => void;
27
+ pureNull: () => void;
28
+ do_: () => void;
29
+ };
30
+ doNode: () => void;
31
+ match: {
32
+ done: () => void;
33
+ cont: () => void;
34
+ };
35
+ step: {
36
+ pure: () => void;
37
+ chain: () => void;
38
+ overDo: () => void;
39
+ };
40
+ mapStep: {
41
+ pure: () => void;
42
+ constant: () => void;
43
+ overDo: () => void;
44
+ };
45
+ historyStep: {
46
+ pure: () => void;
47
+ overDo: () => void;
48
+ chain: () => void;
49
+ fReceivesWholeHistory: () => void;
50
+ };
51
+ };
@@ -0,0 +1,178 @@
1
+ import { step, do_, foldStep, forEachStep, mapStep, match, okStep, history, pure, runPure, historyStep } from './module.f.js';
2
+ import { error, ok } from '../types/result/module.f.js';
3
+ import { assert, assertEq } from '../asserts/module.f.js';
4
+ /**
5
+ * Asserts that `e` yields `expected` without performing a command. Exported so
6
+ * `eff/proof.f.ts` shares this definition instead of repeating it.
7
+ *
8
+ * Not `assertEq(runPure(e), [expected])`: `assertEq` compares with `===`, so a
9
+ * freshly allocated `[expected]` is never equal to the returned option. Assert
10
+ * the option's shape first, then compare the value inside it.
11
+ */
12
+ export const assertPure = (e, expected) => {
13
+ const o = runPure(e);
14
+ assert(o.length === 1, e);
15
+ assertEq(o[0], expected);
16
+ };
17
+ const next = match({ add: (a, b) => a + b });
18
+ export const proof = {
19
+ foldStep: {
20
+ empty: () => {
21
+ const e = foldStep(pure([]), 10, x => s => pure(s + x));
22
+ assertPure(e, 10);
23
+ },
24
+ threadsState: () => {
25
+ const e = foldStep(pure([1, 2, 3, 4]), 0, x => s => pure(s + x));
26
+ assertPure(e, 10);
27
+ },
28
+ order: () => {
29
+ const e = foldStep(pure(['a', 'b', 'c']), '', x => s => pure(s + x));
30
+ assertPure(e, 'abc');
31
+ },
32
+ },
33
+ forEachStep: {
34
+ empty: () => {
35
+ const e = forEachStep(pure([]), () => pure(undefined));
36
+ assertPure(e, undefined);
37
+ },
38
+ runs: () => {
39
+ const e = forEachStep(pure([1, 2, 3]), () => pure(undefined));
40
+ assertPure(e, undefined);
41
+ },
42
+ },
43
+ okStep: {
44
+ ok: () => {
45
+ const e = step(pure(ok(5)), okStep((v) => pure(ok(v * 2))));
46
+ const o = runPure(e);
47
+ assert(o.length === 1, e);
48
+ const [r] = o;
49
+ assert(r[0] === 'ok', r);
50
+ assertEq(r[1], 10);
51
+ },
52
+ error: () => {
53
+ const e = step(pure(error('oops')), okStep(v => pure(ok(v * 2))));
54
+ const o = runPure(e);
55
+ assert(o.length === 1, e);
56
+ const [r] = o;
57
+ assert(r[0] === 'error', r);
58
+ assertEq(r[1], 'oops');
59
+ },
60
+ },
61
+ runPure: {
62
+ pure: () => {
63
+ const o = runPure(pure(5));
64
+ assert(o.length === 1, o);
65
+ assertEq(o[0], 5);
66
+ },
67
+ // A pure `null` is `[null]`, never `[]`. Collapsing the two is what a
68
+ // `T | null` result would do, and why the option is tagged.
69
+ pureNull: () => {
70
+ const o = runPure(pure(null));
71
+ assertEq(o.length, 1, o);
72
+ assertEq(o[0], null);
73
+ },
74
+ do_: () => {
75
+ assertEq(runPure(do_('add')(2, 3)).length, 0);
76
+ },
77
+ },
78
+ // The one place a `Do` node is opened on purpose: `do_` builds the command,
79
+ // the payload it was called with, and a continuation that resumes with the
80
+ // command's output. Everything else goes through `step`, `match`, or
81
+ // `runPure`.
82
+ doNode: () => {
83
+ const e = do_('add')(2, 3);
84
+ assert(typeof e !== 'function', e);
85
+ const { command, payload, continuation } = e;
86
+ assertEq(command, 'add');
87
+ const [a, b] = payload;
88
+ assertEq(a, 2, payload);
89
+ assertEq(b, 3, payload);
90
+ assertPure(continuation(5), 5);
91
+ },
92
+ match: {
93
+ done: () => {
94
+ const r = next(pure(7));
95
+ assert(r[0] === 'done', r);
96
+ assertEq(r[1], 7);
97
+ },
98
+ cont: () => {
99
+ const r = next(do_('add')(2, 3));
100
+ assert(r[0] === 'cont', r);
101
+ assertEq(r[1], 5);
102
+ const r2 = next(r[2](r[1]));
103
+ assert(r2[0] === 'done', r2);
104
+ assertEq(r2[1], 5);
105
+ },
106
+ },
107
+ step: {
108
+ pure: () => {
109
+ assertPure(step(pure(3), v => pure(v + 1)), 4);
110
+ },
111
+ chain: () => {
112
+ // Chains as step(step(e, f), g), raw effect in and out.
113
+ assertPure(step(step(pure(3), v => pure(v + 1)), v => pure(v * 2)), 8);
114
+ },
115
+ overDo: () => {
116
+ // Stepping a Do node preserves the command and threads the result
117
+ // through the rebuilt continuation.
118
+ const e = step(do_('add')(2, 3), r => pure(r * 10));
119
+ const r = next(e);
120
+ assert(r[0] === 'cont', r);
121
+ assertEq(r[1], 5);
122
+ assertPure(r[2](r[1]), 50);
123
+ },
124
+ },
125
+ mapStep: {
126
+ pure: () => {
127
+ assertPure(mapStep(pure(3), v => v + 1), 4);
128
+ },
129
+ constant: () => {
130
+ // The `() => v` shape a `constStep` would have covered.
131
+ assertPure(mapStep(pure('ignored'), () => 1), 1);
132
+ },
133
+ overDo: () => {
134
+ // A projection over a `Do` node keeps the command intact and is
135
+ // applied to the command's output when the continuation resumes.
136
+ const r = next(mapStep(do_('add')(2, 3), v => v * 10));
137
+ assert(r[0] === 'cont', r);
138
+ assertEq(r[1], 5);
139
+ assertPure(r[2](r[1]), 50);
140
+ },
141
+ },
142
+ historyStep: {
143
+ pure: () => {
144
+ const o = runPure(historyStep(history(pure(3)), v => pure(v * 2)));
145
+ assert(o.length === 1, o);
146
+ const [[result, param]] = o;
147
+ assertEq(param, 3);
148
+ assertEq(result, 6);
149
+ },
150
+ overDo: () => {
151
+ // The captured value survives a command boundary: the history is
152
+ // rebuilt inside the continuation rather than lost when `e` is a Do.
153
+ const c = next(historyStep(history(do_('add')(2, 3)), r => pure(r * 10)));
154
+ assert(c[0] === 'cont', c);
155
+ assertEq(c[1], 5);
156
+ const o = runPure(c[2](c[1]));
157
+ assert(o.length === 1, o);
158
+ const [[result, param]] = o;
159
+ assertEq(param, 5);
160
+ assertEq(result, 50);
161
+ },
162
+ chain: () => {
163
+ // `historyStep` takes a history and returns one, so link two is
164
+ // spelled exactly like link one. The tuple is newest first, so a
165
+ // destructuring reads reverse-chronologically.
166
+ const a = historyStep(history(pure(1)), x => pure(x + 1));
167
+ const b = historyStep(a, (result, param) => pure(result + param));
168
+ assertPure(step(b, ([z, y, x]) => pure(`${x}${y}${z}`)), '123');
169
+ },
170
+ fReceivesWholeHistory: () => {
171
+ // `f` is handed the whole history spread as arguments, not just the
172
+ // most recent value - which is what lets a later link reach back.
173
+ const a = historyStep(history(pure(1)), x => pure(x + 1));
174
+ const b = historyStep(a, (...p) => pure(p[1] * 100 + p[0]));
175
+ assertPure(step(b, ([result]) => pure(result)), 102);
176
+ },
177
+ },
178
+ };
@@ -12,7 +12,8 @@
12
12
  */
13
13
  import { reset, fgGreen, fgRed, bold, csiWrite } from '../text/sgr/module.f.js';
14
14
  import { all, awaitIfPromise, sandbox, test } from '../effects/node/module.f.js';
15
- import { pure } from '../effects/module.f.js';
15
+ import { history, historyStep, pure, step } from '../effects/module.f.js';
16
+ import { eff } from '../effects/eff/module.f.js';
16
17
  import { loadModuleMap, shouldLoad } from '../dev/module.f.js';
17
18
  import { invert } from '../types/result/module.f.js';
18
19
  import { definedEntries } from '../types/object/module.f.js';
@@ -89,7 +90,7 @@ export const registerModule = (ctx, k, v, star) => {
89
90
  // test is expected to throw, so no extra suffix is needed.
90
91
  const base = fmtImport(k, path);
91
92
  const name = throws ? base : `${base}${star}`;
92
- return test(ctx, name, throws, (t) => awaitIfPromise(fn())
93
+ return test(ctx, name, throws, (t) => eff(awaitIfPromise(fn()))
93
94
  .step(resolved => {
94
95
  if (throws) {
95
96
  return pure(undefined);
@@ -98,42 +99,49 @@ export const registerModule = (ctx, k, v, star) => {
98
99
  if (sub.length === 0) {
99
100
  return pure(undefined);
100
101
  }
101
- return all(...sub.map(e => registerOne(t, e))).step(() => pure(undefined));
102
- }));
102
+ return eff(all(...sub.map(e => registerOne(t, e))))
103
+ .step(() => pure(undefined))
104
+ .value;
105
+ })
106
+ .value);
103
107
  };
104
108
  const tests = collectTests([], false, v);
105
109
  if (tests.length === 0) {
106
110
  return pure(undefined);
107
111
  }
108
- return all(...tests.map(e => registerOne(ctx, e))).step(() => pure(undefined));
112
+ return eff(all(...tests.map(e => registerOne(ctx, e))))
113
+ .step(() => pure(undefined))
114
+ .value;
109
115
  };
110
116
  const mergeState = (a, b) => ({ time: a.time + b.time, pass: a.pass + b.pass, fail: a.fail + b.fail });
111
117
  const zero = { time: 0, pass: 0, fail: 0 };
112
118
  const runModule = ({ result, test }) => (k, v) => (ts) => {
113
- const one = ([testPath, set]) => test(k, testPath, set)
114
- .step(sr => {
115
- const { result: [s, r], duration } = sr;
116
- return result(k, testPath, sr, set.throws)
117
- .step(() => {
118
- if (s === 'ok') {
119
- if (set.throws) {
120
- return pure(addPass(duration)(zero));
121
- }
122
- // Walk return-value sub-tree; null marks the call boundary so
123
- // paths render as e.g. `outer().inner`. throws resets to false.
124
- return walk([...testPath, null], false, r)
125
- .step(sub => pure(mergeState(addPass(duration)(zero), sub)));
119
+ const one = ([testPath, set]) => {
120
+ // The sandbox result is still needed after it has been reported, so the
121
+ // reporting call is captured rather than nested inside its own step.
122
+ const reported = historyStep(history(test(k, testPath, set)), sr => result(k, testPath, sr, set.throws));
123
+ return step(reported, ([, sr]) => {
124
+ const { result: [s, r], duration } = sr;
125
+ if (s !== 'ok') {
126
+ return pure(addFail(duration)(zero));
126
127
  }
127
- return pure(addFail(duration)(zero));
128
+ if (set.throws) {
129
+ return pure(addPass(duration)(zero));
130
+ }
131
+ // Walk return-value sub-tree; null marks the call boundary so
132
+ // paths render as e.g. `outer().inner`. throws resets to false.
133
+ return step(walk([...testPath, null], false, r), sub => pure(mergeState(addPass(duration)(zero), sub)));
128
134
  });
129
- });
135
+ };
130
136
  const walk = (path, throws, v) => {
131
137
  const effects = collectTests(path, throws, v).map(one);
132
- return all(...effects)
133
- .step(states => pure(states.reduce(mergeState, zero)));
138
+ return eff(all(...effects))
139
+ .step(states => pure(states.reduce(mergeState, zero)))
140
+ .value;
134
141
  };
135
- return walk([], false, v)
136
- .step(delta => pure(mergeState(ts, delta)));
142
+ return eff(walk([], false, v))
143
+ .step(delta => pure(mergeState(ts, delta)))
144
+ .value;
137
145
  };
138
146
  const proofEntries = (moduleMap) => definedEntries(moduleMap)
139
147
  .flatMap(([k, v]) => v.proof !== undefined ? [[k, v.proof]] : []);
@@ -145,17 +153,20 @@ const proofEntries = (moduleMap) => definedEntries(moduleMap)
145
153
  export const runModuleMap = (reporter) => (moduleMap) => {
146
154
  const { summary } = reporter;
147
155
  const modules = proofEntries(moduleMap);
148
- return all(...modules.map(([k, v]) => runModule(reporter)(k, v)(zero)))
156
+ return eff(all(...modules.map(([k, v]) => runModule(reporter)(k, v)(zero))))
149
157
  .step(m => pure(m.reduce(mergeState, zero)))
150
- .step(ts => summary(ts.pass, ts.fail, ts.time)
151
- .step(() => pure(ts.fail !== 0 ? 1 : 0)));
158
+ .step(ts => summary(ts.pass, ts.fail, ts.time))
159
+ .step((_, ts) => pure(ts.fail !== 0 ? 1 : 0))
160
+ .value;
152
161
  };
153
162
  /**
154
163
  * Discovers all test modules via `loadModuleMap`, then runs them through
155
164
  * `runModuleMap`. The composed effect is a `NodeProgram` entry point for the
156
165
  * `fjs t` test runner.
157
166
  */
158
- export const testAll = (reporter) => options => loadModuleMap(options.env).step(runModuleMap(reporter));
167
+ export const testAll = (reporter) => options => eff(loadModuleMap(options.env))
168
+ .step(runModuleMap(reporter))
169
+ .value;
159
170
  /**
160
171
  * Registers all modules in `moduleMap` that export a `proof` property with
161
172
  * `ctx`. Delegates to `registerModule` for each matching entry.
@@ -165,7 +176,9 @@ const registerModuleMap = (ctx, star) => (moduleMap) => {
165
176
  if (modules.length === 0) {
166
177
  return pure(undefined);
167
178
  }
168
- return all(...modules.map(([k, v]) => registerModule(ctx, k, v, star))).step(() => pure(undefined));
179
+ return eff(all(...modules.map(([k, v]) => registerModule(ctx, k, v, star))))
180
+ .step(() => pure(undefined))
181
+ .value;
169
182
  };
170
183
  const isAlpha = (c) => (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c === '_' || c === '$';
171
184
  const isDigit = (c) => c >= '0' && c <= '9';
@@ -219,8 +232,9 @@ export const ghEscape = (s) => s.replaceAll('%', '%25')
219
232
  * Default `Reporter.test` implementation: sandboxes `fn` once and inverts the
220
233
  * result when `throws` is `true` (caught error → pass, clean return → fail).
221
234
  */
222
- export const defaultTest = (file, path, { fn, throws }) => sandbox(fn)
223
- .step(r => pure(throws ? { ...r, result: invert(r.result) } : r));
235
+ export const defaultTest = (file, path, { fn, throws }) => eff(sandbox(fn))
236
+ .step(r => pure(throws ? { ...r, result: invert(r.result) } : r))
237
+ .value;
224
238
  const fmtResultLine = (file, path, color, label, duration) => `${fmtImport(file, path)}: ${color}${label}${reset}, ${timeFormat(duration)}`;
225
239
  /**
226
240
  * The terminal/GitHub reporter used by `fjs t`. Output goes through
@@ -244,12 +258,14 @@ export const defaultReporter = (options) => {
244
258
  ? csiLog(fmtResultLine(file, path, fgGreen, 'ok', duration) + (throws ? ' # EXPECTED TO THROW' : ''))
245
259
  : isGitHub
246
260
  ? csiError(`::error file=${file},line=1,title=${ghEscape(fmtImport(file, path))}::${ghEscape(String(v))}`)
247
- : csiError(fmtResultLine(file, path, fgRed, 'error', duration))
248
- .step(() => csiError(`${fgRed}${v}${reset}`)),
261
+ : eff(csiError(fmtResultLine(file, path, fgRed, 'error', duration)))
262
+ .step(() => csiError(`${fgRed}${v}${reset}`))
263
+ .value,
249
264
  summary: (pass, fail, time) => {
250
265
  const fgFail = fail === 0 ? fgGreen : fgRed;
251
- return csiLog(`${bold}Number of tests: pass: ${fgGreen}${pass}${reset}${bold}, fail: ${fgFail}${fail}${reset}${bold}, total: ${pass + fail}${reset}`)
252
- .step(() => csiLog(`${bold}Time: ${timeFormat(time)}${reset}`));
266
+ return eff(csiLog(`${bold}Number of tests: pass: ${fgGreen}${pass}${reset}${bold}, fail: ${fgFail}${fail}${reset}${bold}, total: ${pass + fail}${reset}`))
267
+ .step(() => csiLog(`${bold}Time: ${timeFormat(time)}${reset}`))
268
+ .value;
253
269
  },
254
270
  test: defaultTest,
255
271
  };
@@ -268,8 +284,8 @@ export const register = o => {
268
284
  const ctx = o.engine === 'bun' ? o.bunTestContext :
269
285
  o.engine === 'playwright' ? o.playwrightTestContext :
270
286
  o.testContext;
271
- const r = registerModuleMap(ctx, star);
272
- return loadModuleMap(o.env)
273
- .step(r)
274
- .step(() => pure(0));
287
+ return eff(loadModuleMap(o.env))
288
+ .step(registerModuleMap(ctx, star))
289
+ .step(() => pure(0))
290
+ .value;
275
291
  };
@@ -14,6 +14,8 @@ export declare const defaultReporterOutputLargeDuration: () => void;
14
14
  export declare const defaultReporterFailOutput: () => void;
15
15
  export declare const githubReporterOutput: () => void;
16
16
  export declare const registerSuffixes: () => void;
17
+ export declare const registerThrowsWithoutThrowing: () => void;
18
+ export declare const registerEmptyProof: () => void;
17
19
  export declare const helpers: {
18
20
  isInteger: () => void;
19
21
  isIdentifier: () => void;
@@ -45,6 +47,8 @@ export declare const proof: {
45
47
  defaultReporterFailOutput: typeof defaultReporterFailOutput;
46
48
  githubReporterOutput: typeof githubReporterOutput;
47
49
  registerSuffixes: typeof registerSuffixes;
50
+ registerThrowsWithoutThrowing: typeof registerThrowsWithoutThrowing;
51
+ registerEmptyProof: typeof registerEmptyProof;
48
52
  defaultReporterExpectedToThrow: typeof defaultReporterExpectedToThrow;
49
53
  helpers: {
50
54
  isInteger: () => void;