functionalscript 0.44.0 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (571) hide show
  1. package/README.md +5 -3
  2. package/fjs/asn.1/module.f.mjs +8 -1
  3. package/fjs/asn.1/proof.f.d.mts +15 -0
  4. package/fjs/asn.1/proof.f.mjs +31 -3
  5. package/fjs/asserts/module.f.d.mts +14 -0
  6. package/fjs/asserts/module.f.mjs +20 -0
  7. package/fjs/asserts/proof.f.d.mts +3 -0
  8. package/fjs/asserts/proof.f.mjs +15 -1
  9. package/fjs/basen/base128/module.f.mjs +22 -5
  10. package/fjs/basen/base128/proof.f.d.mts +3 -1
  11. package/fjs/basen/base128/proof.f.mjs +3 -1
  12. package/fjs/basen/base64/module.f.mjs +7 -3
  13. package/fjs/basen/base64/proof.f.d.mts +3 -1
  14. package/fjs/basen/base64/proof.f.mjs +7 -4
  15. package/fjs/basen/cbase32/proof.f.d.mts +3 -1
  16. package/fjs/basen/cbase32/proof.f.mjs +3 -1
  17. package/fjs/bnf/data/module.f.d.mts +32 -6
  18. package/fjs/bnf/data/module.f.mjs +112 -7
  19. package/fjs/bnf/data/proof.f.d.mts +2 -0
  20. package/fjs/bnf/data/proof.f.mjs +74 -4
  21. package/fjs/bnf/data/types.d.ts +20 -2
  22. package/fjs/bnf/descent/module.f.d.mts +34 -5
  23. package/fjs/bnf/descent/module.f.mjs +176 -54
  24. package/fjs/bnf/descent/proof.f.d.mts +3 -0
  25. package/fjs/bnf/descent/proof.f.mjs +189 -27
  26. package/fjs/bnf/descent/types.d.ts +24 -18
  27. package/fjs/bnf/ll1/module.f.d.mts +74 -6
  28. package/fjs/bnf/ll1/module.f.mjs +297 -95
  29. package/fjs/bnf/ll1/proof.f.d.mts +17 -2
  30. package/fjs/bnf/ll1/proof.f.mjs +372 -137
  31. package/fjs/bnf/ll1/types.d.ts +25 -27
  32. package/fjs/bnf/matcher/module.f.d.mts +66 -0
  33. package/fjs/bnf/matcher/module.f.mjs +81 -0
  34. package/fjs/bnf/matcher/proof.f.d.mts +10 -0
  35. package/fjs/bnf/matcher/proof.f.mjs +79 -0
  36. package/fjs/bnf/matcher/types.d.ts +54 -0
  37. package/fjs/bnf/module.f.d.mts +15 -6
  38. package/fjs/bnf/module.f.mjs +52 -11
  39. package/fjs/bnf/proof.f.d.mts +2 -0
  40. package/fjs/bnf/proof.f.mjs +79 -3
  41. package/fjs/bnf/testlib.f.d.mts +31 -0
  42. package/fjs/bnf/testlib.f.mjs +80 -0
  43. package/fjs/bnf/token_symbol/module.f.d.mts +4 -3
  44. package/fjs/bnf/token_symbol/module.f.mjs +7 -6
  45. package/fjs/bnf/token_symbol/proof.f.mjs +5 -2
  46. package/fjs/bnf/token_symbol/types.d.ts +2 -2
  47. package/fjs/bnf/types.d.ts +10 -3
  48. package/fjs/cas/cli/module.f.d.mts +1 -1
  49. package/fjs/cas/cli/module.f.mjs +14 -20
  50. package/fjs/cas/cli/proof.f.d.mts +4 -4
  51. package/fjs/cas/cli/proof.f.mjs +47 -34
  52. package/fjs/cas/evo/module.f.d.mts +71 -31
  53. package/fjs/cas/evo/module.f.mjs +223 -138
  54. package/fjs/cas/evo/proof.f.d.mts +10 -1
  55. package/fjs/cas/evo/proof.f.mjs +311 -226
  56. package/fjs/cas/evo/types.d.ts +45 -9
  57. package/fjs/cas/module.f.d.mts +18 -32
  58. package/fjs/cas/module.f.mjs +164 -176
  59. package/fjs/cas/proof.f.d.mts +11 -8
  60. package/fjs/cas/proof.f.mjs +259 -147
  61. package/fjs/cas/types.d.ts +24 -10
  62. package/fjs/ci/common/module.f.d.mts +1 -1
  63. package/fjs/ci/common/module.f.mjs +1 -0
  64. package/fjs/ci/config/module.f.d.mts +3 -3
  65. package/fjs/ci/config/module.f.mjs +3 -3
  66. package/fjs/ci/module.f.d.mts +5 -5
  67. package/fjs/ci/module.f.mjs +8 -7
  68. package/fjs/ci/nix/module.f.d.mts +7 -5
  69. package/fjs/ci/nix/module.f.mjs +13 -12
  70. package/fjs/ci/nix/proof.f.d.mts +2 -0
  71. package/fjs/ci/nix/proof.f.mjs +4 -4
  72. package/fjs/ci/proof.f.d.mts +4 -2
  73. package/fjs/ci/proof.f.mjs +13 -8
  74. package/fjs/cli/module.f.d.mts +4 -6
  75. package/fjs/cli/module.f.mjs +4 -8
  76. package/fjs/cli/proof.f.d.mts +4 -2
  77. package/fjs/cli/proof.f.mjs +21 -18
  78. package/fjs/cli/types.d.ts +2 -3
  79. package/fjs/common/monoid/module.f.d.mts +70 -12
  80. package/fjs/common/monoid/module.f.mjs +177 -14
  81. package/fjs/common/monoid/proof.f.d.mts +12 -1
  82. package/fjs/common/monoid/proof.f.mjs +88 -4
  83. package/fjs/common/monoid/types.d.ts +23 -0
  84. package/fjs/crypto/hmac/module.f.mjs +2 -2
  85. package/fjs/crypto/secp/proof.f.d.mts +3 -1
  86. package/fjs/crypto/secp/proof.f.mjs +3 -1
  87. package/fjs/crypto/sha2/module.f.mjs +3 -1
  88. package/fjs/crypto/sha2/proof.f.d.mts +4 -1
  89. package/fjs/crypto/sha2/proof.f.mjs +27 -1
  90. package/fjs/crypto/sha2/types.d.ts +11 -0
  91. package/fjs/crypto/sign/module.f.mjs +2 -2
  92. package/fjs/crypto/vdf/module.f.d.mts +23 -4
  93. package/fjs/crypto/vdf/module.f.mjs +6 -4
  94. package/fjs/dev/module.f.d.mts +17 -5
  95. package/fjs/dev/module.f.mjs +60 -30
  96. package/fjs/dev/update/module.f.d.mts +11 -3
  97. package/fjs/dev/update/module.f.mjs +16 -11
  98. package/fjs/dev/update/proof.f.d.mts +4 -3
  99. package/fjs/dev/update/proof.f.mjs +11 -7
  100. package/fjs/djs/module.f.d.mts +13 -5
  101. package/fjs/djs/module.f.mjs +31 -16
  102. package/fjs/djs/parser/module.f.d.mts +16 -3
  103. package/fjs/djs/parser/module.f.mjs +135 -16
  104. package/fjs/djs/parser/proof.f.d.mts +8 -1
  105. package/fjs/djs/parser/proof.f.mjs +287 -13
  106. package/fjs/djs/parser/types.d.ts +7 -1
  107. package/fjs/djs/proof.f.d.mts +20 -1
  108. package/fjs/djs/proof.f.mjs +190 -12
  109. package/fjs/djs/serializer/module.f.d.mts +25 -8
  110. package/fjs/djs/serializer/module.f.mjs +66 -19
  111. package/fjs/djs/serializer/proof.f.d.mts +5 -0
  112. package/fjs/djs/serializer/proof.f.mjs +23 -1
  113. package/fjs/djs/tokenizer/module.f.d.mts +17 -5
  114. package/fjs/djs/tokenizer/module.f.mjs +120 -73
  115. package/fjs/djs/tokenizer/proof.f.d.mts +3 -0
  116. package/fjs/djs/tokenizer/proof.f.mjs +86 -67
  117. package/fjs/djs/transpiler/module.f.d.mts +13 -19
  118. package/fjs/djs/transpiler/module.f.mjs +79 -72
  119. package/fjs/djs/transpiler/types.d.ts +29 -0
  120. package/fjs/djs/types.d.ts +7 -1
  121. package/fjs/effects/list/module.f.d.mts +23 -12
  122. package/fjs/effects/list/module.f.mjs +16 -12
  123. package/fjs/effects/list/types.d.ts +27 -7
  124. package/fjs/effects/memory/module.f.d.mts +6 -3
  125. package/fjs/effects/memory/module.f.mjs +7 -7
  126. package/fjs/effects/memory/proof.f.d.mts +4 -0
  127. package/fjs/effects/memory/proof.f.mjs +18 -9
  128. package/fjs/effects/memory/types.d.ts +4 -3
  129. package/fjs/effects/mock/module.f.d.mts +28 -4
  130. package/fjs/effects/mock/module.f.mjs +39 -5
  131. package/fjs/effects/mock/types.d.ts +10 -1
  132. package/fjs/effects/module.d.mts +12 -2
  133. package/fjs/effects/module.f.d.mts +469 -281
  134. package/fjs/effects/module.f.mjs +538 -299
  135. package/fjs/effects/module.mjs +11 -2
  136. package/fjs/effects/node/memory/module.d.mts +7 -2
  137. package/fjs/effects/node/memory/module.mjs +9 -5
  138. package/fjs/effects/node/memory/proof.d.mts +2 -0
  139. package/fjs/effects/node/memory/proof.mjs +12 -5
  140. package/fjs/effects/node/module.d.mts +8 -2
  141. package/fjs/effects/node/module.f.d.mts +183 -43
  142. package/fjs/effects/node/module.f.mjs +260 -62
  143. package/fjs/effects/node/module.mjs +61 -50
  144. package/fjs/effects/node/proof.f.d.mts +28 -2
  145. package/fjs/effects/node/proof.f.mjs +161 -42
  146. package/fjs/effects/node/types.d.ts +106 -18
  147. package/fjs/effects/node/virtual/module.f.d.mts +21 -4
  148. package/fjs/effects/node/virtual/module.f.mjs +113 -70
  149. package/fjs/effects/node/virtual/proof.f.d.mts +31 -2
  150. package/fjs/effects/node/virtual/proof.f.mjs +201 -8
  151. package/fjs/effects/proof.f.d.mts +69 -34
  152. package/fjs/effects/proof.f.mjs +413 -130
  153. package/fjs/effects/types.d.ts +161 -33
  154. package/fjs/emergent_testing/all.test.d.mts +8 -0
  155. package/fjs/emergent_testing/all.test.mjs +14 -0
  156. package/fjs/emergent_testing/module.f.d.mts +22 -10
  157. package/fjs/emergent_testing/module.f.mjs +119 -85
  158. package/fjs/emergent_testing/proof.f.d.mts +21 -7
  159. package/fjs/emergent_testing/proof.f.mjs +169 -35
  160. package/fjs/emergent_testing/types.d.ts +22 -4
  161. package/fjs/fsc/bnf.f.d.mts +3 -0
  162. package/fjs/fsc/bnf.f.mjs +4 -1
  163. package/fjs/fsc/json.f.d.mts +3 -0
  164. package/fjs/fsc/json.f.mjs +4 -1
  165. package/fjs/fsc/module.f.d.mts +9 -0
  166. package/fjs/fsc/module.f.mjs +5 -3
  167. package/fjs/fsm/module.f.d.mts +14 -4
  168. package/fjs/fsm/module.f.mjs +54 -37
  169. package/fjs/fsm/proof.f.d.mts +5 -0
  170. package/fjs/fsm/proof.f.mjs +87 -115
  171. package/fjs/js/keywords/module.f.d.mts +52 -0
  172. package/fjs/js/keywords/module.f.mjs +72 -0
  173. package/fjs/{emergent_testing/scenarios/return-value.pass.d.ts → js/keywords/proof.f.d.mts} +1 -1
  174. package/fjs/js/keywords/proof.f.mjs +13 -0
  175. package/fjs/js/tokenizer/module.f.d.mts +30 -3
  176. package/fjs/js/tokenizer/module.f.mjs +161 -211
  177. package/fjs/js/tokenizer/proof.f.d.mts +1 -0
  178. package/fjs/js/tokenizer/proof.f.mjs +54 -24
  179. package/fjs/js/tokenizer/types.d.ts +33 -24
  180. package/fjs/mcp/cas/module.f.d.mts +1 -6
  181. package/fjs/mcp/cas/module.f.mjs +55 -51
  182. package/fjs/mcp/cas/proof.f.d.mts +15 -0
  183. package/fjs/mcp/cas/proof.f.mjs +174 -0
  184. package/fjs/mcp/evo/module.f.d.mts +19 -10
  185. package/fjs/mcp/evo/module.f.mjs +48 -27
  186. package/fjs/mcp/evo/proof.f.d.mts +6 -1
  187. package/fjs/mcp/evo/proof.f.mjs +115 -31
  188. package/fjs/mcp/module.f.d.mts +39 -4
  189. package/fjs/mcp/module.f.mjs +14 -12
  190. package/fjs/mcp/proof.f.d.mts +13 -1
  191. package/fjs/mcp/proof.f.mjs +120 -61
  192. package/fjs/media/html/module.f.d.mts +12 -0
  193. package/fjs/media/html/module.f.mjs +7 -5
  194. package/fjs/media/html/proof.f.d.mts +3 -0
  195. package/fjs/media/html/proof.f.mjs +4 -1
  196. package/fjs/media/json/extended/module.f.d.mts +82 -0
  197. package/fjs/media/json/extended/module.f.mjs +153 -0
  198. package/fjs/media/json/extended/proof.f.d.mts +42 -0
  199. package/fjs/media/json/extended/proof.f.mjs +127 -0
  200. package/fjs/media/json/extended/types.d.ts +23 -0
  201. package/fjs/media/json/module.f.d.mts +8 -2
  202. package/fjs/media/json/module.f.mjs +43 -41
  203. package/fjs/media/json/number/module.f.d.mts +59 -0
  204. package/fjs/media/json/number/module.f.mjs +136 -0
  205. package/fjs/media/json/number/proof.f.d.mts +24 -0
  206. package/fjs/media/json/number/proof.f.mjs +86 -0
  207. package/fjs/media/json/number/types.d.ts +28 -0
  208. package/fjs/media/json/parser/module.f.d.mts +25 -13
  209. package/fjs/media/json/parser/module.f.mjs +133 -72
  210. package/fjs/media/json/parser/proof.f.d.mts +5 -0
  211. package/fjs/media/json/parser/proof.f.mjs +31 -1
  212. package/fjs/media/json/parser/types.d.ts +38 -14
  213. package/fjs/media/json/rtti/module.f.d.mts +1 -1
  214. package/fjs/media/json/rtti/module.f.mjs +1 -1
  215. package/fjs/media/json/rtti/proof.f.d.mts +3 -0
  216. package/fjs/media/json/rtti/proof.f.mjs +12 -12
  217. package/fjs/media/json/schema/module.f.d.mts +61 -27
  218. package/fjs/media/json/schema/module.f.mjs +218 -63
  219. package/fjs/media/json/schema/proof.f.d.mts +41 -1
  220. package/fjs/media/json/schema/proof.f.mjs +220 -9
  221. package/fjs/media/json/serializer/module.f.d.mts +44 -0
  222. package/fjs/media/json/serializer/module.f.mjs +71 -9
  223. package/fjs/media/json/tokenizer/module.f.d.mts +8 -0
  224. package/fjs/media/json/tokenizer/module.f.mjs +31 -8
  225. package/fjs/media/json/tokenizer/proof.f.d.mts +6 -0
  226. package/fjs/media/json/tokenizer/proof.f.mjs +62 -21
  227. package/fjs/media/json/types.d.ts +36 -10
  228. package/fjs/media/lock/module.f.d.mts +100 -0
  229. package/fjs/media/lock/module.f.mjs +125 -0
  230. package/fjs/media/lock/proof.f.d.mts +33 -0
  231. package/fjs/media/lock/proof.f.mjs +196 -0
  232. package/fjs/media/lock/types.d.ts +15 -0
  233. package/fjs/media/module.f.d.mts +6 -5
  234. package/fjs/media/module.f.mjs +8 -7
  235. package/fjs/media/nix/module.f.d.mts +13 -0
  236. package/fjs/media/nix/module.f.mjs +4 -2
  237. package/fjs/media/nix/proof.f.d.mts +3 -0
  238. package/fjs/media/nix/proof.f.mjs +4 -1
  239. package/fjs/media/note/module.f.d.mts +121 -0
  240. package/fjs/media/note/module.f.mjs +131 -0
  241. package/fjs/media/note/proof.f.d.mts +29 -0
  242. package/fjs/media/note/proof.f.mjs +150 -0
  243. package/fjs/media/note/types.d.ts +10 -0
  244. package/fjs/media/proof.f.d.mts +4 -1
  245. package/fjs/media/proof.f.mjs +40 -21
  246. package/fjs/media/revision/module.f.d.mts +83 -7
  247. package/fjs/media/revision/module.f.mjs +127 -23
  248. package/fjs/media/revision/proof.f.d.mts +14 -0
  249. package/fjs/media/revision/proof.f.mjs +93 -2
  250. package/fjs/media/revision/types.d.ts +34 -5
  251. package/fjs/media/type/module.f.d.mts +53 -18
  252. package/fjs/media/type/module.f.mjs +87 -97
  253. package/fjs/media/type/proof.f.d.mts +17 -0
  254. package/fjs/media/type/proof.f.mjs +73 -13
  255. package/fjs/module.d.mts +5 -0
  256. package/fjs/module.f.d.mts +8 -0
  257. package/fjs/module.f.mjs +33 -10
  258. package/fjs/module.mjs +6 -0
  259. package/fjs/nanvm/proof.f.mjs +3 -3
  260. package/fjs/nanvm/rust/module.f.mjs +1 -1
  261. package/fjs/nanvm/update/module.f.d.mts +4 -4
  262. package/fjs/nanvm/update/module.f.mjs +8 -9
  263. package/fjs/nanvm/update/proof.f.mjs +4 -3
  264. package/fjs/path/module.f.d.mts +8 -0
  265. package/fjs/path/module.f.mjs +4 -2
  266. package/fjs/proof.f.d.mts +7 -3
  267. package/fjs/proof.f.mjs +41 -12
  268. package/fjs/protocol/json_rpc/module.f.d.mts +3 -3
  269. package/fjs/protocol/json_rpc/module.f.mjs +10 -7
  270. package/fjs/protocol/json_rpc/proof.f.d.mts +6 -0
  271. package/fjs/protocol/json_rpc/proof.f.mjs +26 -5
  272. package/fjs/protocol/mcp/module.f.d.mts +10 -13
  273. package/fjs/protocol/mcp/module.f.mjs +74 -58
  274. package/fjs/protocol/mcp/proof.f.d.mts +16 -3
  275. package/fjs/protocol/mcp/proof.f.mjs +224 -69
  276. package/fjs/protocol/mcp/stdio/module.f.d.mts +17 -11
  277. package/fjs/protocol/mcp/stdio/module.f.mjs +39 -33
  278. package/fjs/protocol/mcp/stdio/proof.f.d.mts +5 -3
  279. package/fjs/protocol/mcp/stdio/proof.f.mjs +46 -13
  280. package/fjs/protocol/mcp/stdio/types.d.ts +14 -0
  281. package/fjs/protocol/mcp/types.d.ts +17 -6
  282. package/fjs/sul/id/module.f.d.mts +4 -0
  283. package/fjs/sul/id/module.f.mjs +6 -6
  284. package/fjs/sul/level/hash/module.f.d.mts +4 -1
  285. package/fjs/sul/level/hash/module.f.mjs +6 -4
  286. package/fjs/sul/level/hash/proof.f.d.mts +4 -0
  287. package/fjs/sul/level/hash/proof.f.mjs +7 -4
  288. package/fjs/sul/level/literal/module.f.d.mts +4 -1
  289. package/fjs/sul/level/literal/module.f.mjs +4 -3
  290. package/fjs/sul/level/literal/proof.f.d.mts +3 -0
  291. package/fjs/sul/level/literal/proof.f.mjs +4 -1
  292. package/fjs/sul/module.f.d.mts +5 -3
  293. package/fjs/sul/module.f.mjs +23 -17
  294. package/fjs/sul/proof.f.d.mts +4 -0
  295. package/fjs/sul/proof.f.mjs +5 -2
  296. package/fjs/text/ascii/module.f.d.mts +26 -0
  297. package/fjs/text/ascii/module.f.mjs +49 -1
  298. package/fjs/text/ascii/proof.f.d.mts +10 -0
  299. package/fjs/text/ascii/proof.f.mjs +33 -1
  300. package/fjs/text/code_point/module.f.d.mts +29 -3
  301. package/fjs/text/code_point/module.f.mjs +32 -9
  302. package/fjs/text/code_point/proof.f.d.mts +2 -0
  303. package/fjs/text/code_point/proof.f.mjs +39 -0
  304. package/fjs/text/module.f.d.mts +4 -2
  305. package/fjs/text/module.f.mjs +4 -3
  306. package/fjs/text/proof.f.d.mts +3 -0
  307. package/fjs/text/proof.f.mjs +4 -1
  308. package/fjs/text/sgr/module.f.d.mts +6 -5
  309. package/fjs/text/sgr/module.f.mjs +8 -8
  310. package/fjs/text/sgr/proof.f.d.mts +3 -0
  311. package/fjs/text/sgr/proof.f.mjs +4 -1
  312. package/fjs/text/utf16/module.f.d.mts +5 -1
  313. package/fjs/text/utf16/module.f.mjs +38 -35
  314. package/fjs/text/utf16/proof.f.d.mts +3 -1
  315. package/fjs/text/utf16/proof.f.mjs +19 -2
  316. package/fjs/text/utf8/module.f.d.mts +9 -5
  317. package/fjs/text/utf8/module.f.mjs +20 -20
  318. package/fjs/types/array/module.f.d.mts +2 -1
  319. package/fjs/types/array/module.f.mjs +16 -4
  320. package/fjs/types/bigfloat/module.f.d.mts +21 -1
  321. package/fjs/types/bigfloat/module.f.mjs +33 -7
  322. package/fjs/types/bigfloat/proof.f.d.mts +1 -0
  323. package/fjs/types/bigfloat/proof.f.mjs +46 -0
  324. package/fjs/types/bigint/module.f.d.mts +4 -0
  325. package/fjs/types/bigint/module.f.mjs +4 -3
  326. package/fjs/types/bit_vec/module.f.d.mts +10 -16
  327. package/fjs/types/bit_vec/module.f.mjs +99 -95
  328. package/fjs/types/bit_vec/proof.f.d.mts +6 -0
  329. package/fjs/types/bit_vec/proof.f.mjs +31 -5
  330. package/fjs/types/btree/find/module.f.d.mts +5 -1
  331. package/fjs/types/btree/find/module.f.mjs +5 -5
  332. package/fjs/types/btree/find/proof.f.d.mts +5 -1
  333. package/fjs/types/btree/find/proof.f.mjs +5 -3
  334. package/fjs/types/btree/module.f.d.mts +3 -0
  335. package/fjs/types/btree/module.f.mjs +3 -2
  336. package/fjs/types/btree/proof.f.d.mts +5 -1
  337. package/fjs/types/btree/proof.f.mjs +5 -3
  338. package/fjs/types/btree/remove/module.f.d.mts +11 -0
  339. package/fjs/types/btree/remove/module.f.mjs +10 -10
  340. package/fjs/types/btree/remove/proof.f.d.mts +3 -0
  341. package/fjs/types/btree/remove/proof.f.mjs +4 -1
  342. package/fjs/types/btree/set/module.f.d.mts +9 -0
  343. package/fjs/types/btree/set/module.f.mjs +14 -17
  344. package/fjs/types/btree/set/proof.f.d.mts +3 -0
  345. package/fjs/types/btree/set/proof.f.mjs +16 -1
  346. package/fjs/types/btree/types/module.f.d.mts +2 -1
  347. package/fjs/types/btree/types/module.f.mjs +2 -1
  348. package/fjs/types/byte_set/module.f.d.mts +20 -4
  349. package/fjs/types/byte_set/module.f.mjs +18 -8
  350. package/fjs/types/byte_set/proof.f.d.mts +3 -1
  351. package/fjs/types/byte_set/proof.f.mjs +10 -8
  352. package/fjs/types/function/compare/module.f.d.mts +3 -2
  353. package/fjs/types/function/compare/module.f.mjs +13 -5
  354. package/fjs/types/function/module.f.d.mts +8 -1
  355. package/fjs/types/function/module.f.mjs +8 -1
  356. package/fjs/types/function/operator/module.f.d.mts +2 -1
  357. package/fjs/types/function/operator/module.f.mjs +2 -2
  358. package/fjs/types/list/module.f.d.mts +10 -3
  359. package/fjs/types/list/module.f.mjs +6 -4
  360. package/fjs/types/list/proof.f.d.mts +4 -1
  361. package/fjs/types/list/proof.f.mjs +4 -2
  362. package/fjs/types/nibble_set/module.f.d.mts +2 -1
  363. package/fjs/types/nibble_set/module.f.mjs +2 -2
  364. package/fjs/types/nominal/module.f.d.mts +2 -1
  365. package/fjs/types/nominal/module.f.mjs +2 -1
  366. package/fjs/types/nullable/module.f.d.mts +26 -6
  367. package/fjs/types/nullable/module.f.mjs +25 -6
  368. package/fjs/types/nullable/proof.f.d.mts +4 -0
  369. package/fjs/types/nullable/proof.f.mjs +15 -0
  370. package/fjs/types/number/module.f.d.mts +4 -0
  371. package/fjs/types/number/module.f.mjs +4 -3
  372. package/fjs/types/object/module.f.d.mts +26 -4
  373. package/fjs/types/object/module.f.mjs +26 -7
  374. package/fjs/types/object/proof.f.d.mts +5 -2
  375. package/fjs/types/object/proof.f.mjs +6 -3
  376. package/fjs/types/object/structurally_same/module.f.d.mts +39 -0
  377. package/fjs/types/object/structurally_same/module.f.mjs +59 -0
  378. package/fjs/types/object/structurally_same/proof.f.d.mts +6 -0
  379. package/fjs/types/object/structurally_same/proof.f.mjs +73 -0
  380. package/fjs/types/ordered_map/module.f.d.mts +5 -0
  381. package/fjs/types/ordered_map/module.f.mjs +5 -4
  382. package/fjs/types/ordered_map/proof.f.d.mts +3 -0
  383. package/fjs/types/ordered_map/proof.f.mjs +4 -1
  384. package/fjs/types/patricia_trie/module.f.d.mts +2 -1
  385. package/fjs/types/patricia_trie/module.f.mjs +27 -12
  386. package/fjs/types/patricia_trie/proof.f.d.mts +3 -0
  387. package/fjs/types/patricia_trie/proof.f.mjs +4 -1
  388. package/fjs/types/prime_field/module.f.d.mts +3 -1
  389. package/fjs/types/prime_field/module.f.mjs +3 -2
  390. package/fjs/types/range/module.f.d.mts +2 -1
  391. package/fjs/types/range/module.f.mjs +2 -2
  392. package/fjs/types/range_map/module.f.d.mts +6 -0
  393. package/fjs/types/range_map/module.f.mjs +6 -9
  394. package/fjs/types/range_map/proof.f.d.mts +5 -1
  395. package/fjs/types/range_map/proof.f.mjs +5 -3
  396. package/fjs/types/range_set/module.f.d.mts +5 -0
  397. package/fjs/types/range_set/module.f.mjs +1 -0
  398. package/fjs/types/range_set/proof.f.d.mts +3 -0
  399. package/fjs/types/range_set/proof.f.mjs +4 -1
  400. package/fjs/types/result/module.d.mts +8 -0
  401. package/fjs/types/result/module.f.d.mts +37 -7
  402. package/fjs/types/result/module.f.mjs +38 -8
  403. package/fjs/types/result/module.mjs +9 -1
  404. package/fjs/types/result/proof.f.d.mts +5 -0
  405. package/fjs/types/result/proof.f.mjs +22 -2
  406. package/fjs/types/rtti/common/module.f.d.mts +44 -14
  407. package/fjs/types/rtti/common/module.f.mjs +42 -36
  408. package/fjs/types/rtti/common/proof.f.d.mts +4 -0
  409. package/fjs/types/rtti/common/proof.f.mjs +10 -7
  410. package/fjs/types/rtti/data/module.f.d.mts +134 -0
  411. package/fjs/types/rtti/data/module.f.mjs +1053 -0
  412. package/fjs/types/rtti/data/proof.f.d.mts +76 -0
  413. package/fjs/types/rtti/data/proof.f.mjs +589 -0
  414. package/fjs/types/rtti/data/types.d.ts +83 -0
  415. package/fjs/types/rtti/module.f.d.mts +12 -5
  416. package/fjs/types/rtti/module.f.mjs +7 -5
  417. package/fjs/types/rtti/parse/module.f.d.mts +48 -0
  418. package/fjs/types/rtti/parse/module.f.mjs +45 -34
  419. package/fjs/types/rtti/parse/proof.f.d.mts +3 -2
  420. package/fjs/types/rtti/parse/proof.f.mjs +51 -52
  421. package/fjs/types/rtti/proof.f.d.mts +3 -1
  422. package/fjs/types/rtti/proof.f.mjs +6 -2
  423. package/fjs/types/rtti/ts/module.f.d.mts +68 -9
  424. package/fjs/types/rtti/ts/module.f.mjs +258 -30
  425. package/fjs/types/rtti/ts/proof.f.d.mts +44 -0
  426. package/fjs/types/rtti/ts/proof.f.mjs +152 -4
  427. package/fjs/types/rtti/ts/types.d.ts +25 -1
  428. package/fjs/types/rtti/types.d.ts +40 -0
  429. package/fjs/types/sorted_list/module.f.d.mts +4 -1
  430. package/fjs/types/sorted_list/module.f.mjs +21 -12
  431. package/fjs/types/sorted_list/proof.f.d.mts +3 -1
  432. package/fjs/types/sorted_list/proof.f.mjs +3 -1
  433. package/fjs/types/sorted_set/module.f.d.mts +49 -1
  434. package/fjs/types/sorted_set/module.f.mjs +26 -2
  435. package/fjs/types/sorted_set/proof.f.d.mts +4 -1
  436. package/fjs/types/sorted_set/proof.f.mjs +19 -2
  437. package/fjs/types/string/module.f.d.mts +4 -0
  438. package/fjs/types/string/module.f.mjs +4 -3
  439. package/fjs/types/string_set/module.f.d.mts +3 -1
  440. package/fjs/types/string_set/module.f.mjs +3 -2
  441. package/fjs/types/ts/module.f.d.mts +2 -0
  442. package/fjs/types/ts/module.f.mjs +3 -3
  443. package/fjs/types/ts/proof.f.d.mts +1 -0
  444. package/fjs/types/ts/proof.f.mjs +5 -0
  445. package/fjs/types/ts/types.d.ts +6 -1
  446. package/fjs/types/uint8array/module.f.d.mts +13 -2
  447. package/fjs/types/uint8array/module.f.mjs +20 -15
  448. package/fjs/website/module.f.d.mts +5 -2
  449. package/fjs/website/module.f.mjs +6 -8
  450. package/fjs/website/proof.f.mjs +2 -1
  451. package/package.json +3 -3
  452. package/fjs/asn.1/types.js +0 -6
  453. package/fjs/asserts/types.js +0 -6
  454. package/fjs/basen/types.js +0 -6
  455. package/fjs/bnf/data/types.js +0 -6
  456. package/fjs/bnf/descent/types.js +0 -6
  457. package/fjs/bnf/ll1/types.js +0 -6
  458. package/fjs/bnf/token_symbol/types.js +0 -6
  459. package/fjs/bnf/types.js +0 -6
  460. package/fjs/cas/evo/types.js +0 -7
  461. package/fjs/cas/types.js +0 -6
  462. package/fjs/ci/common/types.js +0 -1
  463. package/fjs/ci/nix/types.js +0 -6
  464. package/fjs/ci/types.js +0 -6
  465. package/fjs/cli/types.js +0 -6
  466. package/fjs/common/monoid/types.js +0 -6
  467. package/fjs/crypto/pow/types.js +0 -6
  468. package/fjs/crypto/secp/types.js +0 -6
  469. package/fjs/crypto/sha2/types.js +0 -6
  470. package/fjs/crypto/sign/types.js +0 -6
  471. package/fjs/crypto/vdf/types.js +0 -6
  472. package/fjs/dev/package_json/module.f.d.mts +0 -32
  473. package/fjs/dev/package_json/module.f.mjs +0 -37
  474. package/fjs/dev/package_json/proof.f.d.mts +0 -6
  475. package/fjs/dev/package_json/proof.f.mjs +0 -32
  476. package/fjs/dev/types.js +0 -6
  477. package/fjs/djs/ast/types.js +0 -8
  478. package/fjs/djs/parser/types.js +0 -7
  479. package/fjs/djs/tokenizer/types.js +0 -7
  480. package/fjs/djs/types.js +0 -7
  481. package/fjs/effects/eff/module.f.d.mts +0 -10
  482. package/fjs/effects/eff/module.f.mjs +0 -68
  483. package/fjs/effects/eff/proof.f.d.mts +0 -12
  484. package/fjs/effects/eff/proof.f.mjs +0 -66
  485. package/fjs/effects/eff/types.d.ts +0 -71
  486. package/fjs/effects/eff/types.js +0 -6
  487. package/fjs/effects/list/types.js +0 -6
  488. package/fjs/effects/memory/types.js +0 -6
  489. package/fjs/effects/mock/types.js +0 -6
  490. package/fjs/effects/node/types.js +0 -6
  491. package/fjs/effects/node/virtual/types.js +0 -7
  492. package/fjs/effects/types.js +0 -6
  493. package/fjs/emergent_testing/all.test.d.ts +0 -1
  494. package/fjs/emergent_testing/all.test.js +0 -5
  495. package/fjs/emergent_testing/scenarios/all.d.ts +0 -1
  496. package/fjs/emergent_testing/scenarios/all.js +0 -1
  497. package/fjs/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -6
  498. package/fjs/emergent_testing/scenarios/async-subtests.fail.js +0 -9
  499. package/fjs/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -6
  500. package/fjs/emergent_testing/scenarios/async-subtests.pass.js +0 -9
  501. package/fjs/emergent_testing/scenarios/async.fail.d.ts +0 -3
  502. package/fjs/emergent_testing/scenarios/async.fail.js +0 -6
  503. package/fjs/emergent_testing/scenarios/async.pass.d.ts +0 -3
  504. package/fjs/emergent_testing/scenarios/async.pass.js +0 -5
  505. package/fjs/emergent_testing/scenarios/fail.fail.d.ts +0 -3
  506. package/fjs/emergent_testing/scenarios/fail.fail.js +0 -3
  507. package/fjs/emergent_testing/scenarios/return-value.pass.js +0 -4
  508. package/fjs/emergent_testing/scenarios/thenable.pass.d.ts +0 -5
  509. package/fjs/emergent_testing/scenarios/thenable.pass.js +0 -11
  510. package/fjs/emergent_testing/scenarios/thenable2.pass.d.ts +0 -5
  511. package/fjs/emergent_testing/scenarios/thenable2.pass.js +0 -3
  512. package/fjs/emergent_testing/scenarios/throw.pass.d.ts +0 -5
  513. package/fjs/emergent_testing/scenarios/throw.pass.js +0 -3
  514. package/fjs/emergent_testing/types.js +0 -6
  515. package/fjs/js/tokenizer/types.js +0 -6
  516. package/fjs/media/html/types.js +0 -6
  517. package/fjs/media/json/parser/types.js +0 -6
  518. package/fjs/media/json/tokenizer/types.js +0 -6
  519. package/fjs/media/json/types.js +0 -13
  520. package/fjs/media/nix/types.js +0 -6
  521. package/fjs/media/revision/types.js +0 -8
  522. package/fjs/media/type/types.js +0 -6
  523. package/fjs/media/types.js +0 -7
  524. package/fjs/nanvm/types.js +0 -11
  525. package/fjs/protocol/json_rpc/types.js +0 -8
  526. package/fjs/protocol/mcp/types.js +0 -8
  527. package/fjs/sul/id/types.js +0 -6
  528. package/fjs/sul/level/hash/types.js +0 -6
  529. package/fjs/sul/level/literal/types.js +0 -6
  530. package/fjs/sul/types.js +0 -6
  531. package/fjs/text/sgr/types.js +0 -6
  532. package/fjs/text/types.js +0 -6
  533. package/fjs/text/utf16/types.js +0 -6
  534. package/fjs/text/utf8/types.js +0 -6
  535. package/fjs/types/array/types.js +0 -6
  536. package/fjs/types/bigfloat/types.js +0 -6
  537. package/fjs/types/bigint/types.js +0 -6
  538. package/fjs/types/bit_vec/types.js +0 -6
  539. package/fjs/types/btree/find/types.js +0 -6
  540. package/fjs/types/btree/types/types.js +0 -6
  541. package/fjs/types/byte_set/types.js +0 -6
  542. package/fjs/types/function/compare/types.js +0 -6
  543. package/fjs/types/function/operator/types.js +0 -6
  544. package/fjs/types/function/types.js +0 -6
  545. package/fjs/types/list/types.js +0 -6
  546. package/fjs/types/nibble_set/types.js +0 -6
  547. package/fjs/types/nominal/types.js +0 -6
  548. package/fjs/types/nullable/types.js +0 -6
  549. package/fjs/types/object/types.js +0 -8
  550. package/fjs/types/option/types.js +0 -6
  551. package/fjs/types/ordered_map/types.js +0 -6
  552. package/fjs/types/patricia_trie/types.js +0 -6
  553. package/fjs/types/phantom/types.js +0 -11
  554. package/fjs/types/prime_field/types.js +0 -6
  555. package/fjs/types/range/types.js +0 -6
  556. package/fjs/types/range_map/types.js +0 -6
  557. package/fjs/types/result/types.js +0 -6
  558. package/fjs/types/rtti/common/types.js +0 -1
  559. package/fjs/types/rtti/parse/types.js +0 -1
  560. package/fjs/types/rtti/ts/types.js +0 -1
  561. package/fjs/types/rtti/types.js +0 -1
  562. package/fjs/types/rtti/validate/module.f.d.mts +0 -6
  563. package/fjs/types/rtti/validate/module.f.mjs +0 -169
  564. package/fjs/types/rtti/validate/proof.f.d.mts +0 -125
  565. package/fjs/types/rtti/validate/proof.f.mjs +0 -437
  566. package/fjs/types/rtti/validate/types.d.ts +0 -6
  567. package/fjs/types/rtti/validate/types.js +0 -1
  568. package/fjs/types/sorted_list/types.js +0 -6
  569. package/fjs/types/sorted_set/types.js +0 -6
  570. package/fjs/types/string_set/types.js +0 -6
  571. package/fjs/types/ts/types.js +0 -8
@@ -1,11 +1,24 @@
1
- /** @import { Dir, JsModule } from './types.ts' */
1
+ /**
2
+ * @import { Dir } from './types.ts'
3
+ * @import { NodeOp } from '../types.ts'
4
+ * @import { Effect } from '../../types.ts'
5
+ * @import { IoChannel } from '../types.ts'
6
+ */
2
7
  export declare const proof: {
8
+ unimplemented: {
9
+ declaredButAbsent: () => void;
10
+ programChoosesAFallback: () => void;
11
+ throw: {
12
+ undeclaredCommand: () => void;
13
+ };
14
+ };
3
15
  rm: {
4
16
  success: () => void;
5
17
  notFound: () => void;
6
- isDirectory: () => void;
18
+ onDirectory: () => void;
7
19
  };
8
20
  writeFileOnDirectory: () => void;
21
+ writeFileOverJsModule: () => void;
9
22
  readdirRecursive: () => void;
10
23
  accessNestedPathThroughFile: () => void;
11
24
  readFileIntoDir: () => void;
@@ -15,7 +28,23 @@ export declare const proof: {
15
28
  importNonModule: () => void;
16
29
  throw: {
17
30
  readFileOnJsModule: () => void;
31
+ readBytesOnJsModule: () => void;
18
32
  };
33
+ readFileSkipsEmptyChunk: () => void;
34
+ readdirSkipsUndefinedEntry: () => void;
35
+ renameEmptySrc: () => void;
36
+ renameSrcThroughFile: () => void;
37
+ renameSrcThreeLevelsMissing: () => void;
38
+ renameDstMissingIntermediate: () => void;
39
+ renameDstThroughFile: () => void;
40
+ renameDstNestedError: () => void;
41
+ createExclusiveNestedMissing: () => void;
42
+ writeBytesNestedMissing: () => void;
43
+ writeBytesMissingFile: () => void;
44
+ writeBytesOnJsModule: () => void;
45
+ writeBytesNegativeOffset: () => void;
46
+ statNestedMissing: () => void;
47
+ statMissingFile: () => void;
19
48
  renameSamePath: () => void;
20
49
  renameIntoOwnSubtree: () => void;
21
50
  renameOntoOwnAncestor: () => void;
@@ -1,10 +1,64 @@
1
+ /**
2
+ * @import { Dir } from './types.ts'
3
+ * @import { NodeOp } from '../types.ts'
4
+ * @import { Effect } from '../../types.ts'
5
+ * @import { IoChannel } from '../types.ts'
6
+ */
7
+
1
8
  import { assert, assertEq } from '../../../asserts/module.f.mjs'
2
- import { access, awaitIfPromise, fetch, rm, writeFile, readFile, readdir, import_, rename, readBytes, writeBytes, stat } from '../module.f.mjs'
3
- import { maxLengthBytes, vec, vec8 } from '../../../types/bit_vec/module.f.mjs'
9
+ import { access, awaitIfPromise, exec, fetch, log, rm, writeFile, readFile, readdir, import_, rename, readBytes, writeBytes, stat, createExclusive } from '../module.f.mjs'
10
+ import { empty, length, maxLengthBytes, vec, vec8 } from '../../../types/bit_vec/module.f.mjs'
4
11
  import { emptyState, virtual } from './module.f.mjs'
5
- /** @import { Dir, JsModule } from './types.ts' */
12
+ import { do_ } from '../../module.f.mjs'
13
+ import { catchStep } from '../../module.f.mjs'
14
+
15
+ /**
16
+ * Asserts that a channel error is a host failure carrying `message` — the
17
+ * normalized shape every runner reports, virtual and Node alike.
18
+ * @type {(e: IoChannel, message: string) => void}
19
+ */
20
+ const assertIoMessage = (e, message) => {
21
+ assert(e[0] === 'ioError', e)
22
+ assertEq(e[1].message, message)
23
+ }
6
24
 
7
25
  export const proof = {
26
+ // The two ways a command can have no handler here, which are not the same
27
+ // failure and must not answer alike.
28
+ unimplemented: {
29
+ // `exec` is a `NodeOp` this runner deliberately lacks — an in-memory
30
+ // filesystem has no subprocesses. It used to be a `todo` handler that
31
+ // threw; the program now gets its control back and can decide.
32
+ declaredButAbsent: () => {
33
+ const [, result] = virtual(emptyState)(exec('ls'))
34
+ assert(result[0] === 'error', result)
35
+ assertEq(result[1][0], 'notImplemented', result[1])
36
+ assertEq(result[1][1], 'exec', result[1])
37
+ },
38
+ // What the whole stage is for: the program receives control back and
39
+ // chooses. `exec` is unavailable here, so this one falls back to
40
+ // writing a note instead of dying, and the run completes normally.
41
+ programChoosesAFallback: () => {
42
+ const e = catchStep(exec('ls'), () => log('exec unavailable'))
43
+ const [state, result] = virtual(emptyState)(e)
44
+ assert(result[0] === 'ok', result)
45
+ assertEq(state.stdout, 'exec unavailable\n')
46
+ },
47
+ // A `command` that is not a `NodeOp` at all is a malformed node: the
48
+ // type said it was one, so something built it from data that was never
49
+ // checked. That stays a panic — collapsing it into `notImplemented`
50
+ // would turn a probable bug into a routine outcome.
51
+ throw: {
52
+ undeclaredCommand: () => {
53
+ // `do_` cannot build this from a well-typed call — that is the
54
+ // point: only a node assembled outside the type system reaches
55
+ // an interpreter with a command like this.
56
+ const bogus = /** @type {Effect<NodeOp, never, never>} */ (
57
+ /** @type {any} */ (do_)('nope')())
58
+ virtual(emptyState)(bogus)
59
+ },
60
+ },
61
+ },
8
62
  rm: {
9
63
  success: () => {
10
64
  /** @type {Dir} */
@@ -16,7 +70,10 @@ export const proof = {
16
70
  const [, result] = virtual(emptyState)(rm('notexist.txt'))
17
71
  assert(result[0] === 'error')
18
72
  },
19
- isDirectory: () => {
73
+ onDirectory: () => {
74
+ // `operation`'s wrapper descends into 'mydir' (a plain object),
75
+ // so rmOp itself runs with an empty remaining path and rejects
76
+ // via its `path.length !== 1` guard, not a directory-specific one.
20
77
  /** @type {Dir} */
21
78
  const inner = {}
22
79
  /** @type {Dir} */
@@ -33,6 +90,15 @@ export const proof = {
33
90
  const [, result] = virtual({ ...emptyState, root })(writeFile('mydir', vec8(0x42n)))
34
91
  assert(result[0] === 'error')
35
92
  },
93
+ writeFileOverJsModule: () => {
94
+ // writeFile onto a path currently holding a JsModule (function) covers the
95
+ // `!Array.isArray(file)` branch of writeFileOp: the entry exists but is
96
+ // neither undefined nor an array.
97
+ /** @type {Dir} */
98
+ const root = { 'a.f.ts': () => ({}) }
99
+ const [, result] = virtual({ ...emptyState, root })(writeFile('a.f.ts', vec8(0x42n)))
100
+ assert(result[0] === 'error')
101
+ },
36
102
  readdirRecursive: () => {
37
103
  const file = /** @type {const} */ ([vec8(0x42n)])
38
104
  /** @type {Dir} */
@@ -71,7 +137,8 @@ export const proof = {
71
137
  awaitNonPromise: () => {
72
138
  // a non-promise value passes through the virtual `await` handler as-is
73
139
  const [, result] = virtual(emptyState)(awaitIfPromise(42))
74
- assertEq(result, 42)
140
+ assert(result[0] === 'ok', result)
141
+ assertEq(result[1], 42)
75
142
  },
76
143
  fetchNotFound: () => {
77
144
  // covers the `result === undefined` branch of the `fetch` handler
@@ -95,9 +162,135 @@ export const proof = {
95
162
  readFileOnJsModule: () => {
96
163
  // readFile on a JsModule path covers typeof file === 'function' branch
97
164
  /** @type {Dir} */
98
- const root = { 'a.f.ts': /** @type {JsModule} */ (() => ({})) }
165
+ const root = { 'a.f.ts': () => ({}) }
99
166
  virtual({ ...emptyState, root })(readFile('a.f.ts'))
100
167
  },
168
+ readBytesOnJsModule: () => {
169
+ // readBytes on a JsModule path covers typeof file === 'function' branch
170
+ /** @type {Dir} */
171
+ const root = { 'a.f.ts': () => ({}) }
172
+ virtual({ ...emptyState, root })(readBytes('a.f.ts', 0, 1))
173
+ },
174
+ },
175
+ readFileSkipsEmptyChunk: () => {
176
+ // A file stored with a zero-length chunk ahead of real data: readFile's
177
+ // loop must skip it (`chunkLen === 0n`) rather than concatenating it.
178
+ /** @type {Dir} */
179
+ const root = { 'f': [empty, vec8(0x42n)] }
180
+ const [, result] = virtual({ ...emptyState, root })(readFile('f'))
181
+ assert(result[0] === 'ok', result)
182
+ assertEq(length(result[1]), 8n)
183
+ },
184
+ readdirSkipsUndefinedEntry: () => {
185
+ // `Dir`'s index signature is optional (`{[name]?: _Entity}`), so an
186
+ // entry can legitimately be present with value `undefined` (e.g. after
187
+ // a rename leaves a stale key in some future refactor). readdir's loop
188
+ // must skip such entries rather than reporting them.
189
+ /** @type {Dir} */
190
+ const root = { 'd': { 'a': undefined, 'b': [vec8(0x42n)] } }
191
+ const [, result] = virtual({ ...emptyState, root })(readdir('d', {}))
192
+ assert(result[0] === 'ok', result)
193
+ assertEq(result[1].length, 1)
194
+ },
195
+ renameEmptySrc: () => {
196
+ // rename('', dst): src parses to the root path itself.
197
+ const [, result] = virtual(emptyState)(rename('', 'dst'))
198
+ assert(result[0] === 'error')
199
+ assertIoMessage(result[1], 'cannot extract root')
200
+ },
201
+ renameSrcThroughFile: () => {
202
+ // rename('a/b', dst) where 'a' is a file, not a directory: the
203
+ // intermediate segment can't be descended into.
204
+ /** @type {Dir} */
205
+ const root = { 'a': [vec8(0x42n)] }
206
+ const [, result] = virtual({ ...emptyState, root })(rename('a/b', 'dst'))
207
+ assert(result[0] === 'error')
208
+ },
209
+ renameSrcThreeLevelsMissing: () => {
210
+ // rename('a/b/c', dst) where 'a/b' exists but 'c' doesn't: the error
211
+ // from the deepest extractEntity call propagates through two levels
212
+ // of recursion.
213
+ /** @type {Dir} */
214
+ const root = { 'a': { 'b': {} } }
215
+ const [, result] = virtual({ ...emptyState, root })(rename('a/b/c', 'dst'))
216
+ assert(result[0] === 'error')
217
+ },
218
+ renameDstMissingIntermediate: () => {
219
+ // rename(src, 'missingdir/x'): the destination's parent doesn't exist.
220
+ /** @type {Dir} */
221
+ const root = { 'src': [vec8(0x42n)] }
222
+ const [, result] = virtual({ ...emptyState, root })(rename('src', 'missingdir/x'))
223
+ assert(result[0] === 'error')
224
+ },
225
+ renameDstThroughFile: () => {
226
+ // rename(src, 'blocker/x') where 'blocker' is a file, not a directory.
227
+ /** @type {Dir} */
228
+ const root = { 'src': [vec8(0x42n)], 'blocker': [vec8(0x1n)] }
229
+ const [, result] = virtual({ ...emptyState, root })(rename('src', 'blocker/x'))
230
+ assert(result[0] === 'error')
231
+ assertIoMessage(result[1], 'not a directory')
232
+ },
233
+ renameDstNestedError: () => {
234
+ // rename(src, 'a/b/c') where 'a/b' is a file: insertEntityAt's error
235
+ // one level down propagates through the outer recursive call.
236
+ /** @type {Dir} */
237
+ const root = { 'src': [vec8(0x1n)], 'a': { 'b': [vec8(0x2n)] } }
238
+ const [, result] = virtual({ ...emptyState, root })(rename('src', 'a/b/c'))
239
+ assert(result[0] === 'error')
240
+ assertIoMessage(result[1], 'not a directory')
241
+ },
242
+ createExclusiveNestedMissing: () => {
243
+ // createExclusive('a/b') where 'a' doesn't exist: the operation
244
+ // wrapper falls through with the full remaining path. Start from a
245
+ // non-empty root and check it survives untouched, so a mutant that
246
+ // returns the right error tag alongside a wiped dir would be caught.
247
+ /** @type {Dir} */
248
+ const root = { keep: [vec8(0x1n)] }
249
+ const [state, result] = virtual({ ...emptyState, root })(createExclusive('a/b'))
250
+ assert(result[0] === 'error')
251
+ assertEq(Object.keys(state.root).length, 1)
252
+ },
253
+ writeBytesNestedMissing: () => {
254
+ // writeBytes('a/b', ...) where 'a' doesn't exist. Non-empty root, as above.
255
+ /** @type {Dir} */
256
+ const root = { keep: [vec8(0x1n)] }
257
+ const [state, result] = virtual({ ...emptyState, root })(writeBytes('a/b', 0, vec8(0x1n)))
258
+ assert(result[0] === 'error')
259
+ assertEq(Object.keys(state.root).length, 1)
260
+ },
261
+ writeBytesMissingFile: () => {
262
+ // writeBytes on a path that doesn't exist at all: writeBytes never
263
+ // creates. Non-empty root, as above.
264
+ /** @type {Dir} */
265
+ const root = { keep: [vec8(0x1n)] }
266
+ const [state, result] = virtual({ ...emptyState, root })(writeBytes('missing', 0, vec8(0x1n)))
267
+ assert(result[0] === 'error')
268
+ assertEq(Object.keys(state.root).length, 1)
269
+ },
270
+ writeBytesOnJsModule: () => {
271
+ // writeBytes on a JsModule entry covers the `!Array.isArray(file)`
272
+ // branch (unlike readFile/readBytes, writeBytes has no separate throw
273
+ // for JsModule, so this is the reachable way to hit "not a file").
274
+ /** @type {Dir} */
275
+ const root = { 'a.f.ts': () => ({}) }
276
+ const [, result] = virtual({ ...emptyState, root })(writeBytes('a.f.ts', 0, vec8(0x1n)))
277
+ assert(result[0] === 'error')
278
+ },
279
+ writeBytesNegativeOffset: () => {
280
+ /** @type {Dir} */
281
+ const root = { 'file': [vec8(0x1n)] }
282
+ const [, result] = virtual({ ...emptyState, root })(writeBytes('file', -1, vec8(0x2n)))
283
+ assert(result[0] === 'error')
284
+ assertIoMessage(result[1], 'Offset -1 is invalid')
285
+ },
286
+ statNestedMissing: () => {
287
+ // stat('a/b') where 'a' doesn't exist.
288
+ const [, result] = virtual(emptyState)(stat('a/b'))
289
+ assert(result[0] === 'error')
290
+ },
291
+ statMissingFile: () => {
292
+ const [, result] = virtual(emptyState)(stat('missing'))
293
+ assert(result[0] === 'error')
101
294
  },
102
295
  renameSamePath: () => {
103
296
  // rename('a', 'a') should succeed as a no-op, not reject
@@ -207,10 +400,10 @@ export const proof = {
207
400
  // stat on a JsModule entry (neither an array nor a descendable
208
401
  // directory) covers the !Array.isArray(file) branch of statOp.
209
402
  /** @type {Dir} */
210
- const root = { 'a.f.ts': /** @type {JsModule} */ (() => ({})) }
403
+ const root = { 'a.f.ts': () => ({}) }
211
404
  const [, result] = virtual({ ...emptyState, root })(stat('a.f.ts'))
212
405
  assert(result[0] === 'error')
213
- assertEq(result[1], `'a.f.ts' is not a file`)
406
+ assertIoMessage(result[1], `'a.f.ts' is not a file`)
214
407
  },
215
408
  largeFileReadBytes: () => {
216
409
  // A file stored as two 128 KiB chunks is larger than maxLengthBytes.
@@ -1,39 +1,22 @@
1
- import type { Effect, Operation } from './types.ts';
2
1
  /**
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
- * @template {Operation} O
10
- * @template T
11
- * @param {Effect<O, T>} e
12
- * @param {T} expected
2
+ * @import { Effect, Func, Operation } from './types.ts'
3
+ * @import { Result } from '../types/result/types.ts'
13
4
  */
14
- export declare const assertPure: <O extends Operation, T>(e: Effect<O, T>, expected: T) => void;
15
- export type _AddOp = readonly ['add', (a: number, b: number) => number];
16
- export type _AnyOp = readonly [string, (a: number) => number];
5
+ import type { Result } from '../types/result/types.ts';
6
+ export type _AddOp = readonly ['add', (a: number, b: number) => Result<number, string>];
7
+ export type _AnyOp = readonly [string, (a: number) => Result<number, string>];
8
+ export type _DivOp = readonly ['div', (a: number, b: number) => Result<number, string>];
9
+ export type _NegOp = readonly ['neg', (a: number) => Result<number, string>];
10
+ export type _Op = _DivOp | _NegOp;
17
11
  export declare const proof: {
18
- foldStep: {
19
- empty: () => void;
20
- threadsState: () => void;
21
- order: () => void;
22
- };
23
- forEachStep: {
24
- empty: () => void;
25
- runs: () => void;
26
- };
27
- okStep: {
12
+ runPure: {
28
13
  ok: () => void;
29
14
  error: () => void;
30
- };
31
- runPure: {
32
- pure: () => void;
33
15
  pureNull: () => void;
34
16
  do_: () => void;
35
17
  };
36
18
  doNode: () => void;
19
+ failedCommandResumes: () => void;
37
20
  match: {
38
21
  done: () => void;
39
22
  cont: () => void;
@@ -43,20 +26,72 @@ export declare const proof: {
43
26
  toStringCommand: () => void;
44
27
  };
45
28
  };
29
+ partialMatch: {
30
+ implemented: () => void;
31
+ declined: () => void;
32
+ throw: {
33
+ unknownCommand: () => void;
34
+ };
35
+ };
36
+ pureOk: () => void;
37
+ pureError: () => void;
46
38
  step: {
47
- pure: () => void;
39
+ ok: () => void;
40
+ propagates: () => void;
41
+ errorTupleIsUnchanged: () => void;
48
42
  chain: () => void;
49
43
  overDo: () => void;
44
+ overFailedDo: () => void;
45
+ joinsOperations: () => void;
46
+ mixedErrorsOk: () => void;
47
+ mixedErrorsFirst: () => void;
48
+ mixedErrorsSecond: () => void;
50
49
  };
51
- mapStep: {
52
- pure: () => void;
53
- constant: () => void;
50
+ catchStep: {
51
+ recovers: () => void;
52
+ preservesOk: () => void;
53
+ overFailedDo: () => void;
54
+ unionsSuccess: () => void;
55
+ };
56
+ resultStep: {
57
+ ok: () => void;
58
+ error: () => void;
54
59
  overDo: () => void;
55
60
  };
56
61
  historyStep: {
57
- pure: () => void;
58
- overDo: () => void;
59
62
  chain: () => void;
60
- fReceivesWholeHistory: () => void;
63
+ carriesValues: () => void;
64
+ propagates: () => void;
65
+ propagatesFromHead: () => void;
66
+ overDo: () => void;
67
+ };
68
+ foldStep: {
69
+ empty: () => void;
70
+ threadsState: () => void;
71
+ shortCircuits: () => void;
72
+ };
73
+ forEachStep: {
74
+ empty: () => void;
75
+ runs: () => void;
76
+ stopsAtTheFirstError: () => void;
77
+ };
78
+ unwrapStep: {
79
+ ok: () => void;
80
+ throw: {
81
+ error: () => void;
82
+ };
83
+ };
84
+ mapStep: {
85
+ ok: () => void;
86
+ error: () => void;
87
+ overDo: () => void;
88
+ };
89
+ resultMapStep: {
90
+ ok: () => void;
91
+ error: () => void;
92
+ absorbs: () => void;
93
+ rejects: () => void;
94
+ overDo: () => void;
95
+ overFailedDo: () => void;
61
96
  };
62
97
  };