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
@@ -3,19 +3,102 @@
3
3
  *
4
4
  * @module
5
5
  */
6
- export type Operation = readonly [string, (..._: readonly never[]) => unknown];
6
+ import type { Ok, Error, Result } from '../types/result/types.ts';
7
7
  /**
8
- * An `Effect<O, T>` is the raw value: a {@link Pure} thunk that yields `T`, or a
9
- * {@link Do} node describing a command to perform. It is plain data — compose
10
- * effects with the external `step`, which is eager wherever the head is
11
- * `Pure`.
8
+ * A command name paired with the signature a runner implements it at.
9
+ *
10
+ * **The return type is a {@link Result}, and that is a rule rather than a
11
+ * convention every operation happens to follow.** A runner may decline any
12
+ * command it was not given a handler for — `partialMatch` answers
13
+ * `error(notImplemented(command))` through the command's own output — so an
14
+ * operation whose return admitted no error would be a hole in that mechanism:
15
+ * there would be nowhere to put the refusal. Every *host* operation already
16
+ * returned `OpResult<…>` or `IoResult<…>` when this constraint was added, and
17
+ * so did four of the six declared inside proofs — through a bare `Result`
18
+ * rather than either alias, since those two are node conveniences. The two in
19
+ * `./proof.f.mjs` returned a bare `number`, and the commit that added the rule
20
+ * rewrote them.
21
+ *
22
+ * It is also the latch the whole representation now rests on. An operation
23
+ * *cannot* be declared infallible, so every {@link Effect} built from one has a
24
+ * `Result` to carry — which is what lets {@link Effect} name its error channel
25
+ * rather than leaving it inside an opaque payload.
12
26
  */
13
- export type Effect<O extends Operation, T> = Pure<T> | Do<O, T>;
27
+ export type Operation = readonly [string, (..._: readonly never[]) => Result<unknown, unknown>];
14
28
  /**
15
- * A pure effect: an *already-computed* `T` behind a thunk.
29
+ * The runner cannot dispatch this operation and has **not** started it.
30
+ *
31
+ * It is ordinary recoverable effect data rather than a fatal runner condition:
32
+ * the program receives control back and decides what an incompatible runner
33
+ * means for it — recover, choose a fallback operation, or treat it as fatal and
34
+ * panic itself (`throw`, e.g. via `unwrap`). Escalation belongs to the program,
35
+ * so the missing-handler path answers with `error(notImplemented)` rather than
36
+ * panicking on the program's behalf.
37
+ *
38
+ * **It identifies the operation by command name only.** An operation's payload
39
+ * may hold functions — `createServer`'s listener, `sandbox`'s thunk, `test`'s
40
+ * body — so carrying it would break the serializability the asserts in
41
+ * the asserts at the bottom of this file pin against the JSON data model.
42
+ *
43
+ * **It is not a security boundary.** A runner keeps its authority over
44
+ * execution through a separate, out-of-band mechanism: it may interrupt or
45
+ * terminate a program that is malicious, over budget, or violating host policy,
46
+ * and nothing in the error channel obliges it to hand control back. A
47
+ * capability the runner merely lacks is answered with this error; a refusal to
48
+ * continue is an interruption, never dressed up as `NotImplemented`.
49
+ *
50
+ * **It is why there is no infallible effect.** Every {@link Do} node is
51
+ * dispatched by a runner that may decline the command, so an effect that
52
+ * declared no error channel would be describing today's runner rather than the
53
+ * computation. That observation is what collapsed the representation into this
54
+ * one type — see {@link Effect}.
55
+ */
56
+ export type NotImplemented = readonly ['notImplemented', string];
57
+ /**
58
+ * An `Effect<O, T, E>` is the raw value: a {@link Pure} thunk yielding
59
+ * `Result<T, E>`, or a {@link Do} node describing a command to perform. It is
60
+ * plain data — compose effects with the combinators in
61
+ * [`./module.f.mjs`](./module.f.mjs), which are eager wherever the head
62
+ * is `Pure`.
63
+ *
64
+ * **The error channel is part of the representation, not a wrapper over it.**
65
+ * This used to be two types: a `RawEffect<O, T>` with an opaque payload, and an
66
+ * `Effect<O, T, E>` alias for `RawEffect<O, Result<T, E>>`. The division was
67
+ * described as *composition* against *representation*, and it was defended on
68
+ * the grounds that the representation is generic over its payload by
69
+ * definition — the runners, {@link match}, `runPure`, `do_`. That is true and
70
+ * it is not a reason for two names: {@link Operation} requires a `Result`
71
+ * return, so the payload a runner is generic over is *always* `Result<T, E>`
72
+ * already. Naming its two halves costs nothing and lets every signature in the
73
+ * system say which half it means.
16
74
  *
17
- * The thunk is a **discriminator, not a suspension**. `Effect` is a union with
18
- * no tag field, so telling its two cases apart needs a runtime test, and
75
+ * **`E` defaults to {@link NotImplemented}**, the one error every operation can
76
+ * answer with, so the common case is written `Effect<Sandbox, T>`. An
77
+ * operation's own failures extend the channel — `Effect<ReadFile, Vec,
78
+ * IoChannel>`, that alias being the node standard of
79
+ * `NotImplemented | IoError`.
80
+ *
81
+ * **`Effect<O, T, never>` is a claim, not an absence.** It says this code
82
+ * absorbs its own failures *here* — an MCP handler turning one into a JSON-RPC
83
+ * error response, a decoder turning one into `null`, a test body turning one
84
+ * into a panic. A reader who thinks the absorption is wrong has something to
85
+ * point at, which is what the opaque payload could not offer.
86
+ *
87
+ * The channel is where **short-circuiting** lives, not specifically where a
88
+ * runner's refusal lives. A parse failure, a domain verdict, or a non-zero exit
89
+ * code belongs in it for the same reason {@link NotImplemented} does: `step`
90
+ * should stop the chain and carry it out.
91
+ *
92
+ * It widens and does not narrow, in both channels and in `O` — the asserts in
93
+ * the asserts at the bottom of this file pin each direction, so an unhandled error
94
+ * type is a compile error rather than a value nobody looked at.
95
+ */
96
+ export type Effect<O extends Operation, T, E = NotImplemented> = Pure<T, E> | Do<O, T, E>;
97
+ /**
98
+ * A pure effect: an *already-computed* `Result<T, E>` behind a thunk.
99
+ *
100
+ * The thunk is a **discriminator, not a suspension**. {@link Effect} is a union
101
+ * with no tag field, so telling its two cases apart needs a runtime test, and
19
102
  * `typeof e === 'function'` is it — wrapping the value in a function is what
20
103
  * makes that test work. Deferral is not what the thunk is for. A `Pure` never
21
104
  * holds work that has yet to happen; everything that *does* something is a
@@ -26,19 +109,19 @@ export type Effect<O extends Operation, T> = Pure<T> | Do<O, T>;
26
109
  * - **The thunk must be pure and total.** Work hidden behind it is an effect
27
110
  * that no runner ever sees and no `OperationMap` can interpret or mock.
28
111
  * - **It may be called more than once.** Nothing memoizes it. The same effect
29
- * can be decoded repeatedly `Eff` re-forces the effect it wraps on each
30
- * `.step` — and under the first rule that costs nothing and changes nothing.
112
+ * can be decoded repeatedly, and under the first rule that costs nothing and
113
+ * changes nothing.
31
114
  *
32
115
  * A `lazy` constructor (`<T>(t: () => T): Effect<never, T> => t`) once existed
33
116
  * to advertise the thunk as a suspension. It was the identity function, and it
34
117
  * promised a deferral this representation does not keep; it has been removed.
35
118
  * Reintroducing it would reintroduce the contradiction, not fix one.
36
119
  */
37
- export type Pure<T> = () => T;
120
+ export type Pure<T, E> = () => Result<T, E>;
38
121
  export type Pr<O extends Operation, K extends O[0]> = O extends readonly [K, (...args: infer P) => infer R] ? readonly [P, R] : never;
39
122
  /**
40
- * A `Do` node's continuation: given the command's output, produce the rest of
41
- * the effect.
123
+ * A {@link Do} node's continuation: given the command's output, produce the
124
+ * rest of the effect.
42
125
  *
43
126
  * The `out O` annotation asserts a covariance TypeScript cannot derive through
44
127
  * the conditional `Pr` type: the command's output sits in the *contravariant*
@@ -55,7 +138,7 @@ export type Pr<O extends Operation, K extends O[0]> = O extends readonly [K, (..
55
138
  * the continuation representation must re-check this argument before keeping the
56
139
  * annotation.
57
140
  */
58
- export type Cont<out O extends Operation, T> = (_: Pr<O, O[0]>[1]) => Effect<O, T>;
141
+ export type Cont<out O extends Operation, T, E> = (_: Pr<O, O[0]>[1]) => Effect<O, T, E>;
59
142
  /**
60
143
  * A `Do` node: the command to perform, its payload, and the continuation to
61
144
  * resume with the command's output. Its runtime value is exactly this record,
@@ -64,7 +147,7 @@ export type Cont<out O extends Operation, T> = (_: Pr<O, O[0]>[1]) => Effect<O,
64
147
  *
65
148
  * It must be an object rather than a tuple, and that is not a style choice:
66
149
  * only object / function / mapped-type aliases may carry a variance annotation
67
- * (`TS2637` forbids `out` on a tuple), and the raw `Effect` union must be
150
+ * (`TS2637` forbids `out` on a tuple), and the {@link Effect} union must be
68
151
  * covariant in `O` end to end. `command` and `payload` are indexed/conditional
69
152
  * types over `O` that TypeScript will not widen generically on their own —
70
153
  * annotating only {@link Cont} is not enough — so the whole node carries
@@ -78,27 +161,25 @@ export type Cont<out O extends Operation, T> = (_: Pr<O, O[0]>[1]) => Effect<O,
78
161
  * tuple's price without being a tuple. Named fields make the node
79
162
  * self-describing at every read and leave no layout to memorize.
80
163
  */
81
- export type Do<out O extends Operation, T> = {
164
+ export type Do<out O extends Operation, T, E> = {
82
165
  readonly command: O[0];
83
166
  readonly payload: Pr<O, O[0]>[0];
84
- readonly continuation: Cont<O, T>;
167
+ readonly continuation: Cont<O, T, E>;
85
168
  };
169
+ export type Param<O extends Operation> = F<O>[0];
170
+ export type Return<O extends Operation> = F<O>[1];
86
171
  /**
87
- * An effect whose result is a **history tuple**: the values a chain has bound so
88
- * far, newest first. `History<O, readonly[C, B, A]>` is three links deep, with
89
- * `A` bound earliest.
172
+ * The success half of a {@link Result} type, and {@link ErrOf} the error half.
90
173
  *
91
- * This is a transparent alias for `Effect`. It adds the tuple bound and
92
- * nothing else, so any tuple-valued effect satisfies it whether or not
93
- * `history` produced it it names the convention at the signatures that
94
- * rely on it rather than enforcing it.
95
- *
96
- * Heterogeneous by design: each element has its own type, so this is not a
97
- * `List` and nothing that folds or maps a list applies to it.
174
+ * These read an operation's *declared* return apart so that {@link Func} can
175
+ * state the effect `do_` builds from it. {@link Operation} guarantees the
176
+ * return is a `Result`, so neither is ever the `never` its fallback branch
177
+ * names; and both distribute over the union, which is what makes
178
+ * `Result<T, E>` decompose back into exactly `T` and `E`.
98
179
  */
99
- export type History<O extends Operation, H extends readonly unknown[]> = Effect<O, H>;
100
- export type Param<O extends Operation> = F<O>[0];
101
- export type Return<O extends Operation> = F<O>[1];
180
+ export type OkOf<R> = R extends Ok<infer T> ? T : never;
181
+ /** The error half of a {@link Result} type see {@link OkOf}. */
182
+ export type ErrOf<R> = R extends Error<infer E> ? E : never;
102
183
  /**
103
184
  * An operation map whose entries take a command's payload and return some
104
185
  * output `R`. Generalizes `ToAsyncOperationMap` (`R = Promise<…>`) and the
@@ -107,9 +188,56 @@ export type Return<O extends Operation> = F<O>[1];
107
188
  export type OperationMap<O extends Operation, R> = {
108
189
  readonly [K in O[0]]: (...payload: Pr<O, K>[0]) => R;
109
190
  };
110
- export type MatchResult<O extends Operation, T, R> = readonly ['done', T] | readonly ['cont', R, Do<O, T>['continuation']];
191
+ /**
192
+ * An {@link OperationMap} a runner may leave holes in: every handler it *does*
193
+ * provide has the same type, and any of them may be absent.
194
+ *
195
+ * Partiality is opt-in, and deliberately not the default. A total map means a
196
+ * runner that forgets a handler is a compile error, which is what should happen
197
+ * to the Node runner; this type is for a runner that is *meant* to lack
198
+ * operations — a virtual filesystem with no subprocesses, a mock that answers
199
+ * the three commands its proof issues. An absent handler here is an answer
200
+ * (`error(notImplemented)`), not an oversight.
201
+ */
202
+ export type PartialOperationMap<O extends Operation, R> = {
203
+ readonly [K in O[0]]?: (...payload: Pr<O, K>[0]) => R;
204
+ };
205
+ /**
206
+ * The runtime witness of `O`'s command set.
207
+ *
208
+ * A {@link PartialOperationMap} cannot say, at runtime, whether a command it
209
+ * has no handler for is one the operation set declares — types are erased, so
210
+ * an omitted `readFile` and a garbled `readFilee` reach the interpreter as the
211
+ * same missing lookup. They are not the same thing: the first is a capability
212
+ * this runner lacks and a program may recover from, the second is a `Do` node
213
+ * whose `command` was never the one its type claimed. Telling them apart needs
214
+ * `O`'s commands as data.
215
+ *
216
+ * Declare it as a record rather than an array — a `Record<O[0], null>` is
217
+ * checked for *completeness*, so a command added to `O` and forgotten here is a
218
+ * compile error, whereas an array literal only has its members checked and
219
+ * drifts silently.
220
+ */
221
+ export type CommandSet<O extends Operation> = Readonly<Record<O[0], null>>;
222
+ /** `O`'s commands, in the form {@link match} tests membership against. */
223
+ export type Commands<O extends Operation> = readonly O[0][];
224
+ /**
225
+ * What one decoding step of an effect yields: the finished `Result`, or the
226
+ * operation's output `R` paired with the continuation to resume with.
227
+ *
228
+ * The `done` payload is the whole `Result`, not its `ok` half. An interpreter
229
+ * is the one reader that must not short-circuit — a runner hands a failed
230
+ * command's `error` back *through* the continuation, so the two channels only
231
+ * separate above this layer.
232
+ */
233
+ export type MatchResult<O extends Operation, T, E, R> = readonly ['done', Result<T, E>] | readonly ['cont', R, Cont<O, T, E>];
111
234
  export type ToAsyncOperationMap<O extends Operation> = {
112
235
  readonly [K in O[0]]: (...payload: Pr<O, K>[0]) => Promise<Pr<O, K>[1]>;
113
236
  };
114
237
  export type F<O extends Operation> = Pr<O, O[0]>;
115
- export type Func<O extends Operation> = (..._: Param<O>) => Effect<O, Return<O>>;
238
+ /**
239
+ * The effect-returning function `do_` builds for a single operation: its
240
+ * payload in, an {@link Effect} whose two channels are the halves of the
241
+ * operation's declared `Result` out.
242
+ */
243
+ export type Func<O extends Operation> = (..._: Param<O>) => Effect<O, OkOf<Return<O>>, ErrOf<Return<O>>>;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * External-runner entry point: importing this module discovers every proof
3
+ * module and registers each test case with the active test runner. In this
4
+ * repository `node --test`, `bun test`, and `deno test` discover it by its
5
+ * `.test.` name; projects consuming the package re-export it from their own
6
+ * entry file with a bare side-effect import — see `README.md`.
7
+ */
8
+ export {};
@@ -0,0 +1,14 @@
1
+ /**
2
+ * External-runner entry point: importing this module discovers every proof
3
+ * module and registers each test case with the active test runner. In this
4
+ * repository `node --test`, `bun test`, and `deno test` discover it by its
5
+ * `.test.` name; projects consuming the package re-export it from their own
6
+ * entry file with a bare side-effect import — see `README.md`.
7
+ */
8
+
9
+ import { runEffect } from '../effects/node/module.mjs'
10
+ import { register } from './module.f.mjs'
11
+
12
+ // Top-level `await`: every proof must be registered before the runner starts
13
+ // collecting tests.
14
+ await runEffect(register)
@@ -9,11 +9,18 @@
9
9
  * scheduling and pass/fail counting.
10
10
  *
11
11
  * @module
12
+ *
13
+ * @import { Operation } from '../effects/types.ts'
14
+ * @import { Effect, NotImplemented } from '../effects/types.ts'
15
+ * @import { LoadModuleOperations, ModuleMap } from '../dev/types.ts'
16
+ * @import { TestFn, TestEntry, TestSet, Path, Reporter, _TestState, _TestAndPath } from './types.ts'
17
+ * @import { All, Await, Env, IoChannel, NodeProgram, NodeProgramOptions, Program, Sandbox, SandboxResult, Test, TestContext, Write, WriteConsoles } from '../effects/node/types.ts'
12
18
  */
13
- import type { All, Await, NodeProgram, NodeProgramOptions, Program, Sandbox, SandboxResult, Test, TestContext, Write } from '../effects/node/types.ts';
14
- import type { Effect, Operation } from '../effects/types.ts';
19
+ import type { Operation } from '../effects/types.ts';
20
+ import type { Effect, NotImplemented } from '../effects/types.ts';
15
21
  import type { LoadModuleOperations, ModuleMap } from '../dev/types.ts';
16
22
  import type { TestEntry, TestSet, Path, Reporter, _TestAndPath } from './types.ts';
23
+ import type { All, Await, IoChannel, NodeProgram, NodeProgramOptions, Program, Sandbox, SandboxResult, Test, TestContext, Write } from '../effects/node/types.ts';
17
24
  /**
18
25
  * Converts an arbitrary JS value into a `TestSet`.
19
26
  *
@@ -49,9 +56,9 @@ export declare const collectTests: (path: Path, throws: boolean, v: unknown) =>
49
56
  * This is the correct model for Node `--test`, Bun, and Deno, where tests must
50
57
  * be declared upfront and the framework drives execution.
51
58
  *
52
- * @type {(ctx: TestContext, k: string, v: unknown, star: string) => Effect<Test | All | Await, void>}
59
+ * @type {(ctx: TestContext, k: string, v: unknown, star: string) => Effect<Test | All | Await, void, NotImplemented>}
53
60
  */
54
- export declare const registerModule: (ctx: TestContext, k: string, v: unknown, star: string) => Effect<Test | All | Await, void>;
61
+ export declare const registerModule: (ctx: TestContext, k: string, v: unknown, star: string) => Effect<Test | All | Await, void, NotImplemented>;
55
62
  /**
56
63
  * Runs all test modules in `moduleMap` whose names pass `isTest`, accumulates
57
64
  * pass/fail/time via `reporter`, and returns an exit code (0 = all passed,
@@ -59,19 +66,24 @@ export declare const registerModule: (ctx: TestContext, k: string, v: unknown, s
59
66
  *
60
67
  * @template {Operation} O
61
68
  * @param {Reporter<O>} reporter
62
- * @returns {(moduleMap: ModuleMap) => Effect<O | All, number>}
69
+ * @returns {(moduleMap: ModuleMap) => Effect<O | All, number, IoChannel>}
63
70
  */
64
- export declare const runModuleMap: <O extends Operation>(reporter: Reporter<O>) => (moduleMap: ModuleMap) => Effect<O | All, number>;
71
+ export declare const runModuleMap: <O extends Operation>(reporter: Reporter<O>) => (moduleMap: ModuleMap) => Effect<O | All, number, IoChannel>;
65
72
  /**
66
73
  * Discovers all test modules via `loadModuleMap`, then runs them through
67
74
  * `runModuleMap`. The composed effect is a `NodeProgram` entry point for the
68
75
  * `fjs t` test runner.
69
76
  *
77
+ * The chain leaves the error channel here, because this is where a `Program` ends
78
+ * and a `Program`'s answer is an exit code rather than a `Result`. A run that
79
+ * could not report its own results is a failed run, so it exits `1` with the
80
+ * reason on `stderr` instead of unwinding as a panic.
81
+ *
70
82
  * @template {Operation} O
71
83
  * @param {Reporter<O>} reporter
72
- * @returns {Program<O | All | LoadModuleOperations>}
84
+ * @returns {Program<O | All | LoadModuleOperations | Write>}
73
85
  */
74
- export declare const testAll: <O extends Operation>(reporter: Reporter<O>) => Program<O | All | LoadModuleOperations>;
86
+ export declare const testAll: <O extends Operation>(reporter: Reporter<O>) => Program<O | All | LoadModuleOperations | Write>;
75
87
  /** Returns `true` if `s` is a non-negative decimal integer without a leading zero.
76
88
  *
77
89
  * @type {(s: string) => boolean}
@@ -120,9 +132,9 @@ export declare const ghEscape: (s: string) => string;
120
132
  * Default `Reporter.test` implementation: sandboxes `fn` once and inverts the
121
133
  * result when `throws` is `true` (caught error → pass, clean return → fail).
122
134
  *
123
- * @type {(file: string, path: Path, entry: TestEntry) => Effect<Sandbox, SandboxResult<unknown>>}
135
+ * @type {(file: string, path: Path, entry: TestEntry) => Effect<Sandbox, SandboxResult<unknown>, NotImplemented>}
124
136
  */
125
- export declare const defaultTest: (file: string, path: Path, entry: TestEntry) => Effect<Sandbox, SandboxResult<unknown>>;
137
+ export declare const defaultTest: (file: string, path: Path, entry: TestEntry) => Effect<Sandbox, SandboxResult<unknown>, NotImplemented>;
126
138
  /**
127
139
  * The terminal/GitHub reporter used by `fjs t`. Output goes through
128
140
  * `csiWrite`, so ANSI styles are stripped on non-TTY streams. When