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
@@ -6,7 +6,7 @@
6
6
  import type { Vec } from '../types/bit_vec/types.ts';
7
7
  import type { Effect, Operation } from '../effects/types.ts';
8
8
  import type { List } from '../effects/list/types.ts';
9
- import type { IoResult, Mkdir, Now, RandomInt, ReadBytes, Readdir, Rename, Rm, CreateExclusive, WriteBytes, Access, Stat } from '../effects/node/types.ts';
9
+ import type { Access, CreateExclusive, IoChannel, Mkdir, Now, RandomInt, ReadBytes, Readdir, Rename, Rm, Stat, WriteBytes } from '../effects/node/types.ts';
10
10
  /**
11
11
  * The filesystem effects the streaming CAS performs: `read` pulls shards
12
12
  * (`ReadBytes`); `list` walks the store (`Access`/`Readdir`); `write` runs the
@@ -17,18 +17,32 @@ import type { IoResult, Mkdir, Now, RandomInt, ReadBytes, Readdir, Rename, Rm, C
17
17
  export type FileCasOperation = ReadBytes | Mkdir | Readdir | Access | Rename | Rm | RandomInt | Now | CreateExclusive | WriteBytes | Stat | Now | Readdir | Rm;
18
18
  export type Cas<O extends Operation> = {
19
19
  /**
20
- * Streams the content for `hash` out in `<=128 KiB` chunks. Every pull yields an
21
- * explicit `ok(chunk)` or `error` item, so a missing shard or I/O error is a distinct
22
- * error *item* in the stream, never collapsed into end-of-stream (`undefined`).
20
+ * Streams the content for `hash` out in `<=128 KiB` chunks.
21
+ *
22
+ * A missing shard or an I/O error **fails the stream** rather than ending
23
+ * it, so it can never be mistaken for end-of-stream. That distinction used
24
+ * to be a rule this comment had to state, with an `ok(chunk)`/`error` item
25
+ * union that every consumer kept apart by hand; it is now the difference
26
+ * between an `error` cell and an `ok(undefined)` one, which nothing can
27
+ * confuse.
23
28
  */
24
- readonly read: (hash: Vec) => List<O, IoResult<Vec>>;
29
+ readonly read: (hash: Vec) => List<O, Vec, IoChannel>;
25
30
  /**
26
- * Consumes a chunk stream each item `ok(chunk)` or `error` — hashing incrementally,
27
- * and returns the content address. An error item aborts the upload.
31
+ * Consumes a chunk stream, hashing incrementally, and returns the content
32
+ * address. A stream that fails aborts the upload with that failure.
28
33
  */
29
- readonly write: <O1 extends Operation>(payload: List<O1, IoResult<Vec>>) => Effect<O | O1, IoResult<Vec>>;
30
- /** Lists all stored content hashes. */
31
- readonly list: () => Effect<O, readonly Vec[]>;
34
+ readonly write: <O1 extends Operation>(payload: List<O1, Vec, IoChannel>) => Effect<O | O1, Vec, IoChannel>;
35
+ /**
36
+ * Lists all stored content hashes.
37
+ *
38
+ * Fallible like its siblings: walking the store is IO, and a store that
39
+ * cannot be walked must be distinguishable from one that is empty. An
40
+ * absent store *is* empty and answers `ok([])` — that is the fresh-store
41
+ * case, not a failure — but a directory that exists and cannot be read is
42
+ * an error, and returning it is what lets a caller say so instead of
43
+ * reporting no content.
44
+ */
45
+ readonly list: () => Effect<O, readonly Vec[], IoChannel>;
32
46
  };
33
47
  export type FileCas = Cas<FileCasOperation> & {
34
48
  url: (v: Vec) => string;
@@ -1,4 +1,3 @@
1
- import type { Step, Job, MetaStep } from './types.ts';
2
1
  /**
3
2
  * Shared CI types and helpers: GitHub Actions step/job RTTI schemas, the
4
3
  * `MetaStep` representation used by tool-specific modules, and assemblers like
@@ -10,6 +9,7 @@ import type { Step, Job, MetaStep } from './types.ts';
10
9
  *
11
10
  * @import { Step, Job, MetaStep, StepType } from './types.ts'
12
11
  */
12
+ import type { Step, Job, MetaStep } from './types.ts';
13
13
  import { actions } from '../config/module.f.mjs';
14
14
  export declare const os: readonly ['ubuntu', 'macos', 'windows'];
15
15
  export declare const architecture: readonly ['intel', 'arm'];
@@ -9,6 +9,7 @@
9
9
  *
10
10
  * @import { Step, Job, MetaStep, StepType } from './types.ts'
11
11
  */
12
+
12
13
  import { actions, images } from '../config/module.f.mjs'
13
14
  import { option, array, record, string } from '../../types/rtti/module.f.mjs'
14
15
  import { parse as rttiParse } from '../../types/rtti/parse/module.f.mjs'
@@ -18,7 +18,7 @@ export declare const images: {
18
18
  readonly arm: 'windows-11-arm';
19
19
  };
20
20
  };
21
- export declare const functionalscript = /** @type {const} */ "0.43.1";
21
+ export declare const functionalscript = /** @type {const} */ "0.45.0";
22
22
  export declare const bun = "1.3.14";
23
23
  export declare const deno = "2.9.5";
24
24
  export declare const node: {
@@ -28,7 +28,7 @@ export declare const node: {
28
28
  };
29
29
  export declare const nixpkgs: {
30
30
  readonly ref: 'nixos-26.05';
31
- readonly commit: '9f78f44a87948854445dae0b6bf82b2e87e4efb5';
31
+ readonly commit: '02e08985a27c65ffd33d434eeb2e660a2e4dc84d';
32
32
  };
33
33
  export declare const wasmtime = "47.0.3";
34
34
  export declare const wasmer = "7.2.1";
@@ -40,6 +40,6 @@ export declare const actions: {
40
40
  readonly 'oven-sh/setup-bun': 'v2.2.0';
41
41
  readonly 'bytecodealliance/actions/wasmtime/setup': 'v1.1.3';
42
42
  readonly 'wasmerio/setup-wasmer': 'v3.1';
43
- readonly 'cachix/install-nix-action': 'v31.11.0';
43
+ readonly 'cachix/install-nix-action': 'v31.11.1';
44
44
  readonly 'dtolnay/rust-toolchain': '1.97.1';
45
45
  };
@@ -25,7 +25,7 @@ export const images = /** @type {const} */({
25
25
  // published FunctionalScript release; do not tie it to package.json's current
26
26
  // in-repo version.
27
27
  // https://www.npmjs.com/package/functionalscript
28
- export const functionalscript = /** @type {const} */ '0.43.1'
28
+ export const functionalscript = /** @type {const} */ '0.45.0'
29
29
 
30
30
  // https://bun.sh/
31
31
  export const bun = '1.3.14'
@@ -53,7 +53,7 @@ export const node = /** @type {const} */({
53
53
  // https://channels.nixos.org/nixos-26.05/git-revision
54
54
  export const nixpkgs = /** @type {const} */({
55
55
  ref: 'nixos-26.05',
56
- commit: '9f78f44a87948854445dae0b6bf82b2e87e4efb5',
56
+ commit: '02e08985a27c65ffd33d434eeb2e660a2e4dc84d',
57
57
  })
58
58
 
59
59
  // https://github.com/bytecodealliance/wasmtime/releases
@@ -83,7 +83,7 @@ export const actions = /** @type {const} */({
83
83
  'wasmerio/setup-wasmer': 'v3.1',
84
84
  // https://github.com/marketplace/actions/install-nix
85
85
  // Enables the `nix-command` and `flakes` experimental features by default.
86
- 'cachix/install-nix-action': 'v31.11.0',
86
+ 'cachix/install-nix-action': 'v31.11.1',
87
87
  // https://rust-lang.org/ - value is Rust version, not action version
88
88
  'dtolnay/rust-toolchain': '1.97.1',
89
89
  })
@@ -5,15 +5,15 @@
5
5
  *
6
6
  * @module
7
7
  *
8
- * @import { Effect } from '../effects/types.ts'
9
8
  * @import { NodeOp } from '../effects/node/types.ts'
10
9
  * @import { Architecture, GitHubAction, Job, Jobs, MetaStep, Os } from './common/types.ts'
11
10
  * @import { NixJob } from './nix/types.ts'
12
11
  * @import { Setup } from './types.ts'
12
+ * @import { Effect } from '../effects/types.ts'
13
13
  */
14
- import type { Effect } from '../effects/types.ts';
15
14
  import type { NodeOp } from '../effects/node/types.ts';
16
15
  import type { Setup } from './types.ts';
17
- /** @type {(setup: Setup) => Effect<NodeOp, number>} */
18
- export declare const ci: (setup: Setup) => Effect<NodeOp, number>;
19
- export declare const main: () => Effect<NodeOp, number>;
16
+ import type { Effect } from '../effects/types.ts';
17
+ /** @type {(setup: Setup) => Effect<NodeOp, 0, number>} */
18
+ export declare const ci: (setup: Setup) => Effect<NodeOp, 0, number>;
19
+ export declare const main: () => Effect<NodeOp, 0, number>;
@@ -5,15 +5,16 @@
5
5
  *
6
6
  * @module
7
7
  *
8
- * @import { Effect } from '../effects/types.ts'
9
8
  * @import { NodeOp } from '../effects/node/types.ts'
10
9
  * @import { Architecture, GitHubAction, Job, Jobs, MetaStep, Os } from './common/types.ts'
11
10
  * @import { NixJob } from './nix/types.ts'
12
11
  * @import { Setup } from './types.ts'
12
+ * @import { Effect } from '../effects/types.ts'
13
13
  */
14
14
 
15
- import { mapStep, step } from '../effects/module.f.mjs'
16
- import { access, writeUtf8File } from '../effects/node/module.f.mjs'
15
+ import { resultStep } from '../effects/module.f.mjs'
16
+ import { access, exitStep, writeUtf8File } from '../effects/node/module.f.mjs'
17
+ import { step as ioStep } from '../effects/module.f.mjs'
17
18
  import { functionalscript, images } from './config/module.f.mjs'
18
19
  import {
19
20
  architecture,
@@ -57,8 +58,8 @@ const canonicalJobs = rust => ({
57
58
  'nix-flakes': nixFlakeJob,
58
59
  })
59
60
 
60
- /** @type {(setup: Setup) => Effect<NodeOp, number>} */
61
- export const ci = ({ nodeExtra }) => step(
61
+ /** @type {(setup: Setup) => Effect<NodeOp, 0, number>} */
62
+ export const ci = ({ nodeExtra }) => resultStep(
62
63
  access('Cargo.toml'),
63
64
  result => {
64
65
  const rust = result[0] === 'ok'
@@ -82,8 +83,8 @@ export const ci = ({ nodeExtra }) => step(
82
83
  const workflowWritten = writeUtf8File(
83
84
  '.github/workflows/ci.yml',
84
85
  JSON.stringify(gha, null, ' '))
85
- const flakesWritten = step(workflowWritten, () => nixFlakes(nixJobs))
86
- return mapStep(flakesWritten, () => 0)
86
+ const flakesWritten = ioStep(workflowWritten, () => nixFlakes(nixJobs))
87
+ return exitStep(flakesWritten)
87
88
  })
88
89
 
89
90
  export const main = () => ci({ nodeExtra: () => [] })
@@ -11,14 +11,14 @@
11
11
  *
12
12
  * @module
13
13
  *
14
+ * @import { IoChannel, Mkdir, WriteFile } from '../../effects/node/types.ts'
14
15
  * @import { Effect } from '../../effects/types.ts'
15
- * @import { Mkdir, WriteFile } from '../../effects/node/types.ts'
16
16
  * @import { Expression } from '../../media/nix/types.ts'
17
17
  * @import { MetaStep } from '../common/types.ts'
18
18
  * @import { NixJob } from './types.ts'
19
19
  */
20
+ import type { IoChannel, Mkdir, WriteFile } from '../../effects/node/types.ts';
20
21
  import type { Effect } from '../../effects/types.ts';
21
- import type { Mkdir, WriteFile } from '../../effects/node/types.ts';
22
22
  import type { MetaStep } from '../common/types.ts';
23
23
  import type { NixJob } from './types.ts';
24
24
  /** Directory owned by this generator. */
@@ -35,16 +35,18 @@ export declare const generatedDirectory: 'nix/generated';
35
35
  */
36
36
  export declare const flakeText: (job: NixJob) => string;
37
37
  /**
38
- * Writes one generated flake per job.
38
+ * Writes one generated flake per job, stopping at the first failure.
39
39
  *
40
- * @type {(jobs: readonly NixJob[]) => Effect<Mkdir | WriteFile, void>}
40
+ * @type {(jobs: readonly NixJob[]) => Effect<Mkdir | WriteFile, void, IoChannel>}
41
41
  */
42
- export declare const nixFlakes: (jobs: readonly NixJob[]) => Effect<Mkdir | WriteFile, void>;
42
+ export declare const nixFlakes: (jobs: readonly NixJob[]) => Effect<Mkdir | WriteFile, void, IoChannel>;
43
43
  /** Path a workflow passes to `nix develop`, for the job of the given id. */
44
+ /** @type {(id: string) => string} */
44
45
  export declare const flakePath: (id: string) => string;
45
46
  /** Installs Nix, with `nix-command` and `flakes` enabled by the action's defaults. */
46
47
  export declare const nixInstall: MetaStep;
47
48
  /** Runs one command inside a job's generated development shell. */
49
+ /** @type {(id: string, command: string) => string} */
48
50
  export declare const nixDevelop: (id: string, command: string) => string;
49
51
  /**
50
52
  * Runs a migrated job's whole command sequence in one development shell, so the
@@ -11,15 +11,16 @@
11
11
  *
12
12
  * @module
13
13
  *
14
+ * @import { IoChannel, Mkdir, WriteFile } from '../../effects/node/types.ts'
14
15
  * @import { Effect } from '../../effects/types.ts'
15
- * @import { Mkdir, WriteFile } from '../../effects/node/types.ts'
16
16
  * @import { Expression } from '../../media/nix/types.ts'
17
17
  * @import { MetaStep } from '../common/types.ts'
18
18
  * @import { NixJob } from './types.ts'
19
19
  */
20
20
 
21
- import { forEachStep, mapStep, pure, step } from '../../effects/module.f.mjs'
21
+ import { pureOk } from '../../effects/module.f.mjs'
22
22
  import { mkdir, writeUtf8File } from '../../effects/node/module.f.mjs'
23
+ import { forEachStep, step } from '../../effects/module.f.mjs'
23
24
  import { nixToString } from '../../media/nix/module.f.mjs'
24
25
  import { fromUndefined, unwrap as unwrapNullable } from '../../types/nullable/module.f.mjs'
25
26
  import { unwrap } from '../../types/result/module.f.mjs'
@@ -72,33 +73,33 @@ const flake = ({ system, packages, shellHook }) => ['set',
72
73
  export const flakeText = job =>
73
74
  unwrapNullable(fromUndefined(nixToString(flake(job))))
74
75
 
75
- /** @type {(job: NixJob) => Effect<Mkdir | WriteFile, void>} */
76
+ /** @type {(job: NixJob) => Effect<Mkdir | WriteFile, void, IoChannel>} */
76
77
  const writeFlake = job => {
77
78
  const directory = `${generatedDirectory}/${job.id}`
78
- const created = mapStep(mkdir(directory, { recursive: true }), unwrap)
79
- const written = step(
79
+ const created = mkdir(directory, { recursive: true })
80
+ return step(
80
81
  created,
81
82
  () => writeUtf8File(`${directory}/flake.nix`, flakeText(job)))
82
- return mapStep(written, unwrap)
83
83
  }
84
84
 
85
85
  /**
86
- * Writes one generated flake per job.
86
+ * Writes one generated flake per job, stopping at the first failure.
87
87
  *
88
- * @type {(jobs: readonly NixJob[]) => Effect<Mkdir | WriteFile, void>}
88
+ * @type {(jobs: readonly NixJob[]) => Effect<Mkdir | WriteFile, void, IoChannel>}
89
89
  */
90
90
  export const nixFlakes = jobs =>
91
- forEachStep(pure(jobs), writeFlake)
91
+ forEachStep(pureOk(jobs), writeFlake)
92
92
 
93
93
  /** Path a workflow passes to `nix develop`, for the job of the given id. */
94
- export const flakePath = /** @type {(id: string) => string} */ (id => `./${generatedDirectory}/${id}`)
94
+ /** @type {(id: string) => string} */
95
+ export const flakePath = id => `./${generatedDirectory}/${id}`
95
96
 
96
97
  /** Installs Nix, with `nix-command` and `flakes` enabled by the action's defaults. */
97
98
  export const nixInstall = install(uses('cachix/install-nix-action'))
98
99
 
99
100
  /** Runs one command inside a job's generated development shell. */
100
- export const nixDevelop = /** @type {(id: string, command: string) => string} */
101
- ((id, command) => `nix develop ${flakePath(id)} --command ${command}`)
101
+ /** @type {(id: string, command: string) => string} */
102
+ export const nixDevelop = (id, command) => `nix develop ${flakePath(id)} --command ${command}`
102
103
 
103
104
  /**
104
105
  * Wraps a string so a POSIX shell reproduces it exactly. Single quotes protect
@@ -2,6 +2,8 @@
2
2
  * Proofs for generated CI flakes.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { NixJob } from './types.ts'
5
7
  */
6
8
  export declare const proof: {
7
9
  flakeText: {
@@ -2,12 +2,12 @@
2
2
  * Proofs for generated CI flakes.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { NixJob } from './types.ts'
5
7
  */
6
8
 
7
- /** @import { NixJob } from './types.ts' */
8
-
9
9
  import { assert, assertEq } from '../../asserts/module.f.mjs'
10
- import { step } from '../../effects/module.f.mjs'
10
+ import { step as ioStep } from '../../effects/module.f.mjs'
11
11
  import { readUtf8File } from '../../effects/node/module.f.mjs'
12
12
  import { emptyState, virtual } from '../../effects/node/virtual/module.f.mjs'
13
13
  import { nixpkgs } from '../config/module.f.mjs'
@@ -74,7 +74,7 @@ const shellHookFlake = `{
74
74
 
75
75
  /** @type {(jobs: readonly NixJob[], id: string) => string} */
76
76
  const generated = (jobs, id) => {
77
- const written = step(
77
+ const written = ioStep(
78
78
  nixFlakes(jobs),
79
79
  () => readUtf8File(`${generatedDirectory}/${id}/flake.nix`))
80
80
  const [, [tag, result]] = virtual(emptyState)(written)
@@ -1,5 +1,7 @@
1
- /** @import { MetaStep, Os, GitHubAction } from './common/types.ts' */
2
- /** @import { Dir, State } from '../effects/node/virtual/types.ts' */
1
+ /**
2
+ * @import { MetaStep, Os, GitHubAction } from './common/types.ts'
3
+ * @import { Dir, State } from '../effects/node/virtual/types.ts'
4
+ */
3
5
  export declare const proof: {
4
6
  matrixShape: () => void;
5
7
  rust: () => void;
@@ -1,6 +1,9 @@
1
- /** @import { MetaStep, Os, GitHubAction } from './common/types.ts' */
2
- /** @import { Dir, State } from '../effects/node/virtual/types.ts' */
1
+ /**
2
+ * @import { MetaStep, Os, GitHubAction } from './common/types.ts'
3
+ * @import { Dir, State } from '../effects/node/virtual/types.ts'
4
+ */
3
5
 
6
+ import { exitCode } from '../effects/node/module.f.mjs'
4
7
  import { ci, main } from './module.f.mjs'
5
8
  import { functionalscript, node } from './config/module.f.mjs'
6
9
  import { nodeNixJobs } from './node/module.f.mjs'
@@ -11,7 +14,6 @@ import { assert, assertEq } from '../asserts/module.f.mjs'
11
14
  import { emptyState, virtual } from '../effects/node/virtual/module.f.mjs'
12
15
  import { unwrap } from '../types/result/module.f.mjs'
13
16
  import { definedValues } from '../types/object/module.f.mjs'
14
-
15
17
  import { parse as jsonParse } from '../media/json/module.f.mjs'
16
18
 
17
19
  /** @type {(cmd: string) => (gha: GitHubAction) => boolean} */
@@ -38,8 +40,11 @@ const makeState = (/** @type {boolean} */ rust, /** @type {string | undefined} *
38
40
  /** @type {(dir: Dir, name: string) => Dir} */
39
41
  const subDir = (dir, name) => {
40
42
  const entity = dir[name]
41
- assert(typeof entity === 'object' && !Array.isArray(entity), entity)
42
- return /** @type {Dir} */ (entity)
43
+ // `Array.isArray` narrows to `any[]`, which `readonly Vec[]` is not assignable
44
+ // to, so its negative branch never removes a `readonly` array from a union.
45
+ // `instanceof Array` does, so this `assert` narrows `entity` to `Dir`.
46
+ assert(typeof entity === 'object' && !(entity instanceof Array), entity)
47
+ return entity
43
48
  }
44
49
 
45
50
  /** @type {(dir: Dir, name: string) => string} */
@@ -65,14 +70,14 @@ const flake = (state, id) =>
65
70
  /** @type {(rust: boolean, nodeExtra?: (o: Os) => readonly MetaStep[]) => GitHubAction} */
66
71
  const run = (rust, nodeExtra = () => []) => {
67
72
  const [state, result] = virtual(makeState(rust, undefined))(ci({ nodeExtra }))
68
- assertEq(result, 0)
73
+ assertEq(exitCode(result), 0)
69
74
  return workflow(state)
70
75
  }
71
76
 
72
77
  /** @type {(packageJson?: string) => GitHubAction} */
73
78
  const runDefault = packageJson => {
74
79
  const [state, result] = virtual(makeState(false, packageJson))(main())
75
- assertEq(result, 0)
80
+ assertEq(exitCode(result), 0)
76
81
  return workflow(state)
77
82
  }
78
83
 
@@ -174,7 +179,7 @@ export const proof = {
174
179
  },
175
180
  nixFlakes: () => {
176
181
  const [state, result] = virtual(makeState(false, undefined))(main())
177
- assertEq(result, 0)
182
+ assertEq(exitCode(result), 0)
178
183
  for (const { id, packages } of nodeNixJobs) {
179
184
  const [nodePackage] = packages
180
185
  assert(
@@ -5,12 +5,10 @@
5
5
  *
6
6
  * @module
7
7
  *
8
- * @import { NodeOp, NodeProgramOptions, Write } from '../effects/node/types.ts'
9
- * @import { Effect } from '../effects/types.ts'
8
+ * @import { NodeOp, Program, Write } from '../effects/node/types.ts'
10
9
  * @import { Commands } from './types.ts'
11
10
  */
12
- import type { NodeOp, NodeProgramOptions, Write } from '../effects/node/types.ts';
13
- import type { Effect } from '../effects/types.ts';
11
+ import type { NodeOp, Program, Write } from '../effects/node/types.ts';
14
12
  import type { Commands } from './types.ts';
15
- /** @type {<O extends NodeOp>(commands: Commands<O>) => (options: NodeProgramOptions) => Effect<O | Write, number>} */
16
- export declare const dispatch: <O extends NodeOp>(commands: Commands<O>) => (options: NodeProgramOptions) => Effect<O | Write, number>;
13
+ /** @type {<O extends NodeOp>(commands: Commands<O>) => Program<O | Write>} */
14
+ export declare const dispatch: <O extends NodeOp>(commands: Commands<O>) => Program<O | Write>;
@@ -5,18 +5,16 @@
5
5
  *
6
6
  * @module
7
7
  *
8
- * @import { NodeOp, NodeProgramOptions, Write } from '../effects/node/types.ts'
9
- * @import { Effect } from '../effects/types.ts'
8
+ * @import { NodeOp, Program, Write } from '../effects/node/types.ts'
10
9
  * @import { Commands } from './types.ts'
11
10
  */
12
11
 
13
- import { errorExit, log } from '../effects/node/module.f.mjs'
14
- import { pure, step } from '../effects/module.f.mjs'
12
+ import { errorExit, exitStep, log } from '../effects/node/module.f.mjs'
15
13
  import { at, fromEntries } from '../types/object/module.f.mjs'
16
14
 
17
15
  const helpMeta = { names: ['help', 'h', '?'], description: 'Print this help message' }
18
16
 
19
- /** @type {<O extends NodeOp>(commands: Commands<O>) => (options: NodeProgramOptions) => Effect<O | Write, number>} */
17
+ /** @type {<O extends NodeOp>(commands: Commands<O>) => Program<O | Write>} */
20
18
  export const dispatch = commands => options => {
21
19
  const [cmd, ...rest] = options.args
22
20
  const rows = [...commands, helpMeta]
@@ -38,9 +36,7 @@ export const dispatch = commands => options => {
38
36
  return dispatch(targetCmd.handler)({ ...options, args: ['help'] })
39
37
  }
40
38
  }
41
- return step(
42
- log(helpText),
43
- () => pure(0))
39
+ return exitStep(log(helpText))
44
40
  }
45
41
  const found = at(cmd)(map)
46
42
  if (found === null) {
@@ -1,5 +1,7 @@
1
- /** @import { NodeOp, NodeProgramOptions } from '../effects/node/types.ts' */
2
- /** @import { Commands } from './types.ts' */
1
+ /**
2
+ * @import { NodeOp, NodeProgramOptions } from '../effects/node/types.ts'
3
+ * @import { Commands } from './types.ts'
4
+ */
3
5
  export declare const proof: {
4
6
  knownCommand: () => void;
5
7
  alias: () => void;
@@ -1,7 +1,10 @@
1
- /** @import { NodeOp, NodeProgramOptions } from '../effects/node/types.ts' */
2
- /** @import { Commands } from './types.ts' */
1
+ /**
2
+ * @import { NodeOp, NodeProgramOptions } from '../effects/node/types.ts'
3
+ * @import { Commands } from './types.ts'
4
+ */
3
5
 
4
- import { pure } from '../effects/module.f.mjs'
6
+ import { exitCode } from '../effects/node/module.f.mjs'
7
+ import { pureError, pureOk } from '../effects/module.f.mjs'
5
8
  import { defaultNodeProgramOptions, emptyState, virtual } from '../effects/node/virtual/module.f.mjs'
6
9
  import { dispatch } from './module.f.mjs'
7
10
  import { assert, assertEq } from '../asserts/module.f.mjs'
@@ -15,7 +18,7 @@ const echoCommands = [
15
18
  {
16
19
  names: ['echo', 'e'],
17
20
  description: 'Print the first argument',
18
- handler: ({ args: [arg = ''] }) => pure(arg.length),
21
+ handler: ({ args: [arg = ''] }) => arg.length === 0 ? pureOk(0) : pureError(arg.length),
19
22
  },
20
23
  ]
21
24
 
@@ -25,25 +28,25 @@ const run = (/** @type {Commands<NodeOp>} */ commands) => (/** @type {readonly s
25
28
  export const proof = {
26
29
  knownCommand: () => {
27
30
  const [, code] = run(echoCommands)(['echo', 'hello'])
28
- assertEq(code, 5, ['expected length 5', code])
31
+ assertEq(exitCode(code), 5, ['expected length 5', code])
29
32
  },
30
33
  alias: () => {
31
34
  const [, code] = run(echoCommands)(['e', 'hi'])
32
- assertEq(code, 2, ['expected length 2', code])
35
+ assertEq(exitCode(code), 2, ['expected length 2', code])
33
36
  },
34
37
  noArgs: () => {
35
38
  const [state, code] = run(echoCommands)([])
36
- assertEq(code, 1, ['expected exit 1', code])
39
+ assertEq(exitCode(code), 1, ['expected exit 1', code])
37
40
  assert(state.stderr.length !== 0, 'expected error in stderr')
38
41
  },
39
42
  unknownCommand: () => {
40
43
  const [state, code] = run(echoCommands)(['bogus'])
41
- assertEq(code, 1, ['expected exit 1', code])
44
+ assertEq(exitCode(code), 1, ['expected exit 1', code])
42
45
  assert(state.stderr.length !== 0, 'expected error in stderr')
43
46
  },
44
47
  help: () => {
45
48
  const [state, code] = run(echoCommands)(['help'])
46
- assertEq(code, 0, ['expected exit 0', code])
49
+ assertEq(exitCode(code), 0, ['expected exit 0', code])
47
50
  assert(state.stdout.includes('echo'), 'expected command name in stdout')
48
51
  assert(state.stdout.includes('help'), 'expected help entry in stdout')
49
52
  },
@@ -60,7 +63,7 @@ export const proof = {
60
63
  description: 'Capture args',
61
64
  handler: (/** @type {{ args: readonly string[] }} */ { args }) => {
62
65
  captured.push(...args)
63
- return pure(0)
66
+ return pureOk(0)
64
67
  },
65
68
  }]
66
69
  run(commands)(['grab', 'a', 'b', 'c'])
@@ -71,7 +74,7 @@ export const proof = {
71
74
  const inner = [{
72
75
  names: ['ping'],
73
76
  description: 'Inner ping',
74
- handler: () => pure(42),
77
+ handler: () => pureError(42),
75
78
  }]
76
79
  /** @type {Commands<NodeOp>} */
77
80
  const outer = [{
@@ -80,14 +83,14 @@ export const proof = {
80
83
  handler: inner,
81
84
  }]
82
85
  const [, code] = run(outer)(['sub', 'ping'])
83
- assertEq(code, 42, ['expected 42', code])
86
+ assertEq(exitCode(code), 42, ['expected 42', code])
84
87
  },
85
88
  nestedHelp: () => {
86
89
  /** @type {Commands<NodeOp>} */
87
90
  const inner = [{
88
91
  names: ['ping'],
89
92
  description: 'Inner ping',
90
- handler: () => pure(0),
93
+ handler: () => pureOk(0),
91
94
  }]
92
95
  /** @type {Commands<NodeOp>} */
93
96
  const outer = [{
@@ -96,17 +99,17 @@ export const proof = {
96
99
  handler: inner,
97
100
  }]
98
101
  const [state, code] = run(outer)(['sub', 'help'])
99
- assertEq(code, 0, ['expected exit 0', code])
102
+ assertEq(exitCode(code), 0, ['expected exit 0', code])
100
103
  assert(state.stdout.includes('ping'), 'expected inner command in help')
101
104
  },
102
105
  prototypeNameIsUnknownCommand: () => {
103
106
  const [state, code] = run(echoCommands)(['toString'])
104
- assertEq(code, 1, ['expected exit 1 for prototype-name command', code])
107
+ assertEq(exitCode(code), 1, ['expected exit 1 for prototype-name command', code])
105
108
  assert(state.stderr.includes('unknown command'), 'expected unknown-command error in stderr')
106
109
  },
107
110
  helpPrototypeSafe: () => {
108
111
  const [state, code] = run(echoCommands)(['help', 'toString'])
109
- assertEq(code, 0, ['expected exit 0, not a throw', code])
112
+ assertEq(exitCode(code), 0, ['expected exit 0, not a throw', code])
110
113
  assert(state.stdout.includes('echo'), 'expected top-level help for unknown target')
111
114
  },
112
115
  helpWithTarget: () => {
@@ -114,7 +117,7 @@ export const proof = {
114
117
  const inner = [{
115
118
  names: ['ping'],
116
119
  description: 'Inner ping',
117
- handler: () => pure(0),
120
+ handler: () => pureOk(0),
118
121
  }]
119
122
  /** @type {Commands<NodeOp>} */
120
123
  const outer = [{
@@ -123,7 +126,7 @@ export const proof = {
123
126
  handler: inner,
124
127
  }]
125
128
  const [state, code] = run(outer)(['help', 'sub'])
126
- assertEq(code, 0, ['expected exit 0', code])
129
+ assertEq(exitCode(code), 0, ['expected exit 0', code])
127
130
  assert(state.stdout.includes('ping'), 'expected inner command in help')
128
131
  assert(!(state.stdout.includes('Subcommand group')), 'expected inner help, not outer')
129
132
  },
@@ -3,9 +3,8 @@
3
3
  *
4
4
  * @module
5
5
  */
6
- import type { NodeOp, NodeProgramOptions } from '../effects/node/types.ts';
7
- import type { Effect } from '../effects/types.ts';
8
- type Handler<O extends NodeOp> = (options: NodeProgramOptions) => Effect<O, number>;
6
+ import type { NodeOp, Program } from '../effects/node/types.ts';
7
+ type Handler<O extends NodeOp> = Program<O>;
9
8
  export type Command<O extends NodeOp> = {
10
9
  readonly names: readonly string[];
11
10
  readonly description: string;