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
@@ -15,12 +15,14 @@
15
15
  * const y = sloth.eval(steps)(x)
16
16
  * if (y === null || !sloth.verify(steps)(x)(y)) { throw y }
17
17
  * ```
18
+ *
19
+ * @import { PrimeField } from '../../types/prime_field/types.ts'
20
+ * @import { Nullable } from '../../types/nullable/types.ts'
21
+ * @import { Unary } from '../../types/bigint/types.ts'
22
+ * @import { Sloth } from './types.ts'
18
23
  */
24
+
19
25
  import { modSqrt, prime_field } from '../../types/prime_field/module.f.mjs'
20
- /** @import { PrimeField } from '../../types/prime_field/types.ts' */
21
- /** @import { Nullable } from '../../types/nullable/types.ts' */
22
- /** @import { Unary } from '../../types/bigint/types.ts' */
23
- /** @import { Sloth } from './types.ts' */
24
26
 
25
27
  /** Sloth VDF modulus (3072-bit safe prime, same as reference implementations). */
26
28
  export const p =
@@ -2,12 +2,15 @@
2
2
  * Development utilities for indexing modules and loading FunctionalScript files.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Access, All, Env, Import, IoChannel, Readdir } from '../effects/node/types.ts'
7
+ * @import { Effect } from '../effects/types.ts'
8
+ * @import { Dir } from '../effects/node/virtual/types.ts'
9
+ * @import { Module, ModuleMap, LoadModuleOperations } from './types.ts'
5
10
  */
6
- import type { Env } from '../effects/node/types.ts';
11
+ import type { Env, IoChannel } from '../effects/node/types.ts';
7
12
  import type { Effect } from '../effects/types.ts';
8
13
  import type { ModuleMap, LoadModuleOperations } from './types.ts';
9
- /** @import { Dir } from '../effects/node/virtual/types.ts' */
10
- /** @import { Module, ModuleMap, LoadModuleOperations } from './types.ts' */
11
14
  /**
12
15
  * Returns `true` if the file should be loaded for proof discovery.
13
16
  *
@@ -45,12 +48,21 @@ export declare const shouldLoad: (s: string) => boolean;
45
48
  * The result is sorted by path key using `string.cmp` so the order is
46
49
  * deterministic regardless of filesystem traversal order.
47
50
  *
48
- * @type {(env: Env) => Effect<LoadModuleOperations, ModuleMap>}
51
+ * A failure a directory that cannot be listed, a module that will not import
52
+ * — propagates instead of panicking, so the program that asked for the map
53
+ * decides what a partial view of the source tree means for it. Discovery reads
54
+ * the whole tree, and a map missing the file it was asked about is worse than
55
+ * no map at all.
56
+ *
57
+ * @type {(env: Env) => Effect<LoadModuleOperations, ModuleMap, IoChannel>}
49
58
  */
50
- export declare const loadModuleMap: (env: Env) => Effect<LoadModuleOperations, ModuleMap>;
59
+ export declare const loadModuleMap: (env: Env) => Effect<LoadModuleOperations, ModuleMap, IoChannel>;
51
60
  export declare const proof: {
52
61
  isSourceFile: () => void;
53
62
  allFilesFindsFunctionalScript: () => void;
54
63
  allFilesSkipsNodeModules: () => void;
55
64
  loadModuleMapDefaultsToCwdWhenInitCwdUnset: () => void;
65
+ loadModuleMapReportsUnreadableRoot: () => void;
66
+ loadModuleMapReportsUnimportableModule: () => void;
67
+ loadModuleMapStripsInitCwdPrefix: () => void;
56
68
  };
@@ -2,19 +2,20 @@
2
2
  * Development utilities for indexing modules and loading FunctionalScript files.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Access, All, Env, Import, IoChannel, Readdir } from '../effects/node/types.ts'
7
+ * @import { Effect } from '../effects/types.ts'
8
+ * @import { Dir } from '../effects/node/virtual/types.ts'
9
+ * @import { Module, ModuleMap, LoadModuleOperations } from './types.ts'
5
10
  */
6
11
 
7
- import { all, import_, readdir } from '../effects/node/module.f.mjs'
8
- /** @import { Access, All, Env, Import, Readdir } from '../effects/node/types.ts' */
12
+ import { allOk, import_, readdir } from '../effects/node/module.f.mjs'
9
13
  import { cmp as strCmp } from '../types/string/module.f.mjs'
10
14
  import { unwrap } from '../types/result/module.f.mjs'
11
- import { pure, step } from '../effects/module.f.mjs'
12
- /** @import { Effect } from '../effects/types.ts' */
15
+ import { mapStep, pureOk, step } from '../effects/module.f.mjs'
13
16
  import { join, relativize, toPosix } from '../path/module.f.mjs'
14
17
  import { assert, assertEq } from '../asserts/module.f.mjs'
15
18
  import { emptyState, virtual } from '../effects/node/virtual/module.f.mjs'
16
- /** @import { Dir } from '../effects/node/virtual/types.ts' */
17
- /** @import { Module, ModuleMap, LoadModuleOperations } from './types.ts' */
18
19
 
19
20
  /**
20
21
  * Returns `true` if the file should be loaded for proof discovery.
@@ -48,16 +49,16 @@ export const shouldLoad = s =>
48
49
  const isSourceFile = path =>
49
50
  path.endsWith('.js') || path.endsWith('.ts') || path.endsWith('.mts') || path.endsWith('.mjs')
50
51
 
51
- /** @type {(s: string, predicate: (path: string) => boolean) => Effect<Readdir | All, readonly string[]>} */
52
+ /** @type {(s: string, predicate: (path: string) => boolean) => Effect<Readdir | All, readonly string[], IoChannel>} */
52
53
  const allFiles = (s, predicate) => {
53
- /** @type {(p: string) => Effect<Readdir | All, readonly string[]>} */
54
+ /** @type {(p: string) => Effect<Readdir | All, readonly string[], IoChannel>} */
54
55
  const load = p => {
55
- const x0 = step(
56
+ const listed = step(
56
57
  readdir(p, {}),
57
58
  d => {
58
- /** @type {readonly Effect<Readdir | All, readonly string[]>[]} */
59
+ /** @type {readonly Effect<Readdir | All, readonly string[], IoChannel>[]} */
59
60
  let result = []
60
- for (const i of unwrap(d)) {
61
+ for (const i of d) {
61
62
  const { name } = i
62
63
  if (name.startsWith('.')) { continue }
63
64
  const file = join(p, name)
@@ -67,23 +68,19 @@ const allFiles = (s, predicate) => {
67
68
  continue
68
69
  }
69
70
  if (predicate(file)) {
70
- result = [...result, pure([file])]
71
+ result = [...result, pureOk([file])]
71
72
  }
72
73
  }
73
- return all(...result)
74
+ return allOk(...result)
74
75
  })
75
- return step(
76
- x0,
77
- v => pure(v.flat()))
76
+ return mapStep(listed, v => v.flat())
78
77
  }
79
78
  return load(s)
80
79
  }
81
80
 
82
- /** @type {(f: string) => Effect<Access | Import, readonly (readonly [string, Module])[]>} */
81
+ /** @type {(f: string) => Effect<Access | Import, readonly (readonly [string, Module])[], IoChannel>} */
83
82
  const loadFile = f =>
84
- step(
85
- import_(f),
86
- r => pure([/** @type {const} */ ([f, unwrap(r)])]))
83
+ mapStep(import_(f), m => [/** @type {const} */ ([f, m])])
87
84
 
88
85
  const { fromEntries } = Object
89
86
 
@@ -101,7 +98,13 @@ const { fromEntries } = Object
101
98
  * The result is sorted by path key using `string.cmp` so the order is
102
99
  * deterministic regardless of filesystem traversal order.
103
100
  *
104
- * @type {(env: Env) => Effect<LoadModuleOperations, ModuleMap>}
101
+ * A failure a directory that cannot be listed, a module that will not import
102
+ * — propagates instead of panicking, so the program that asked for the map
103
+ * decides what a partial view of the source tree means for it. Discovery reads
104
+ * the whole tree, and a map missing the file it was asked about is worse than
105
+ * no map at all.
106
+ *
107
+ * @type {(env: Env) => Effect<LoadModuleOperations, ModuleMap, IoChannel>}
105
108
  */
106
109
  export const loadModuleMap = env => {
107
110
  const initCwd = env['INIT_CWD']
@@ -111,17 +114,17 @@ export const loadModuleMap = env => {
111
114
  // we should consider optimizing them by ALIQ technique or something similar.
112
115
  // For example, we should be able to write it like `allFiles(s).flatMap(loadFile)`,
113
116
  // then an effect runner can batch all file loading operations together.
114
- const x0 = step(
117
+ const loaded = step(
115
118
  allFiles(s, shouldLoad),
116
- files => all(...files.map(loadFile)))
117
- return step(
118
- x0,
119
- entries => pure(fromEntries(
119
+ files => allOk(...files.map(loadFile)))
120
+ return mapStep(
121
+ loaded,
122
+ entries => fromEntries(
120
123
  entries
121
124
  .flat()
122
125
  .map(([k, v]) => /** @type {const} */ ([relativize(prefix, k), v]))
123
126
  .toSorted(([a], [b]) => strCmp(a)(b))
124
- )))
127
+ ))
125
128
  }
126
129
 
127
130
  export const proof = {
@@ -145,7 +148,7 @@ export const proof = {
145
148
  'd.mjs': [],
146
149
  }
147
150
  const [, result] = virtual({ ...emptyState, root })(allFiles('.', shouldLoad))
148
- assertEq(result.join(','), './a.f.ts,./b.f.mjs,./c.f.mts')
151
+ assertEq(unwrap(result).join(','), './a.f.ts,./b.f.mjs,./c.f.mts')
149
152
  },
150
153
  allFilesSkipsNodeModules: () => {
151
154
  // `node_modules` is skipped without descending into it, even though
@@ -156,7 +159,7 @@ export const proof = {
156
159
  'a.f.ts': [],
157
160
  }
158
161
  const [, result] = virtual({ ...emptyState, root })(allFiles('.', shouldLoad))
159
- assertEq(result.join(','), './a.f.ts')
162
+ assertEq(unwrap(result).join(','), './a.f.ts')
160
163
  },
161
164
  loadModuleMapDefaultsToCwdWhenInitCwdUnset: () => {
162
165
  // With no `INIT_CWD` (e.g. `fjs t` invoked outside `npm run`), `env`
@@ -165,6 +168,33 @@ export const proof = {
165
168
  /** @type {Dir} */
166
169
  const root = { 'a.f.ts': () => ({}) }
167
170
  const [, result] = virtual({ ...emptyState, root })(loadModuleMap({}))
168
- assertEq(Object.keys(result).join(','), './a.f.ts')
171
+ assertEq(Object.keys(unwrap(result)).join(','), './a.f.ts')
172
+ },
173
+ loadModuleMapReportsUnreadableRoot: () => {
174
+ // A directory that cannot be listed is no longer a panic. Discovery
175
+ // hands the failure back, and the program that asked for the map is
176
+ // the one that decides what a source tree it cannot read means — for
177
+ // `fjs t` that is a message on `stderr` and exit `1`.
178
+ const [, result] = virtual({ ...emptyState, root: {} })(loadModuleMap({ INIT_CWD: 'missing' }))
179
+ assert(result[0] === 'error', result)
180
+ },
181
+ loadModuleMapReportsUnimportableModule: () => {
182
+ // The other half of the same breaking change, and the half `readdir`
183
+ // does not cover: discovery lists the file, then the import of it
184
+ // fails. `'a.f.ts': []` is content rather than a module, so the
185
+ // virtual runner's `import` refuses it. Without this, a `loadFile`
186
+ // that turned every import failure into a success would still pass
187
+ // every other proof here.
188
+ const [, result] = virtual({ ...emptyState, root: { 'a.f.ts': [] } })(loadModuleMap({}))
189
+ assert(result[0] === 'error', result)
190
+ },
191
+ loadModuleMapStripsInitCwdPrefix: () => {
192
+ // With `INIT_CWD` set (the normal `npm run` case), discovery starts
193
+ // from that subdirectory and each key is relativized against it, so
194
+ // keys are still `./`-relative to `INIT_CWD` rather than carrying it.
195
+ /** @type {Dir} */
196
+ const root = { 'sub': { 'a.f.ts': () => ({}) } }
197
+ const [, result] = virtual({ ...emptyState, root })(loadModuleMap({ INIT_CWD: 'sub' }))
198
+ assertEq(Object.keys(unwrap(result)).join(','), './a.f.ts')
169
199
  },
170
200
  }
@@ -2,15 +2,23 @@
2
2
  * Synchronizes local development configuration generated from canonical repository files.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { IoChannel, Mkdir, NodeProgram, ReadFile, WriteFile } from '../../effects/node/types.ts'
7
+ * @import { Effect } from '../../effects/types.ts'
5
8
  */
9
+ import type { IoChannel, Mkdir, NodeProgram, ReadFile, WriteFile } from '../../effects/node/types.ts';
6
10
  import type { Effect } from '../../effects/types.ts';
7
- import type { Mkdir, NodeProgram, ReadFile, WriteFile } from '../../effects/node/types.ts';
8
11
  /**
9
12
  * Regenerates VS Code's local MCP configuration from the canonical Copilot configuration.
10
13
  *
11
- * @type {() => Effect<Mkdir | ReadFile | WriteFile, void>}
14
+ * The source text is still needed after the directory has been created, so it
15
+ * is carried forward in a history rather than closed over by a nested
16
+ * continuation — and the history holds the text itself, not the `Result` the
17
+ * read returned.
18
+ *
19
+ * @type {() => Effect<Mkdir | ReadFile | WriteFile, void, IoChannel>}
12
20
  */
13
- export declare const syncMcp: () => Effect<Mkdir | ReadFile | WriteFile, void>;
21
+ export declare const syncMcp: () => Effect<Mkdir | ReadFile | WriteFile, void, IoChannel>;
14
22
  /**
15
23
  * Runs all local development configuration generators.
16
24
  *
@@ -2,13 +2,14 @@
2
2
  * Synchronizes local development configuration generated from canonical repository files.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { IoChannel, Mkdir, NodeProgram, ReadFile, WriteFile } from '../../effects/node/types.ts'
7
+ * @import { Effect } from '../../effects/types.ts'
5
8
  */
6
9
 
7
- import { history, historyStep, mapStep, step } from '../../effects/module.f.mjs'
8
- /** @import { Effect } from '../../effects/types.ts' */
9
- import { mkdir, readUtf8File, writeUtf8File } from '../../effects/node/module.f.mjs'
10
- /** @import { Mkdir, NodeProgram, ReadFile, WriteFile } from '../../effects/node/types.ts' */
11
- import { unwrap } from '../../types/result/module.f.mjs'
10
+
11
+ import { exitStep, mkdir, readUtf8File, writeUtf8File } from '../../effects/node/module.f.mjs'
12
+ import { history, historyStep, step } from '../../effects/module.f.mjs'
12
13
 
13
14
  const source = /** @type {const} */ ('.copilot/mcp.json')
14
15
  const targetDirectory = /** @type {const} */ ('.vscode')
@@ -17,15 +18,19 @@ const target = /** @type {const} */ ('.vscode/mcp.json')
17
18
  /**
18
19
  * Regenerates VS Code's local MCP configuration from the canonical Copilot configuration.
19
20
  *
20
- * @type {() => Effect<Mkdir | ReadFile | WriteFile, void>}
21
+ * The source text is still needed after the directory has been created, so it
22
+ * is carried forward in a history rather than closed over by a nested
23
+ * continuation — and the history holds the text itself, not the `Result` the
24
+ * read returned.
25
+ *
26
+ * @type {() => Effect<Mkdir | ReadFile | WriteFile, void, IoChannel>}
21
27
  */
22
28
  export const syncMcp = () => {
23
- const sourceText = history(mapStep(readUtf8File(source), unwrap))
29
+ const sourceText = history(readUtf8File(source))
24
30
  const targetDirectoryReady = historyStep(
25
31
  sourceText,
26
- () => mapStep(mkdir(targetDirectory, { recursive: true }), unwrap))
27
- const targetWritten = step(targetDirectoryReady, ([, text]) => writeUtf8File(target, text))
28
- return mapStep(targetWritten, unwrap)
32
+ () => mkdir(targetDirectory, { recursive: true }))
33
+ return step(targetDirectoryReady, ([, text]) => writeUtf8File(target, text))
29
34
  }
30
35
 
31
36
  /**
@@ -33,4 +38,4 @@ export const syncMcp = () => {
33
38
  *
34
39
  * @type {NodeProgram}
35
40
  */
36
- export const main = () => mapStep(syncMcp(), () => 0)
41
+ export const main = () => exitStep(syncMcp())
@@ -1,7 +1,8 @@
1
+ /**
2
+ * Proofs for local development configuration generation.
3
+ */
1
4
  export declare const proof: {
2
5
  syncMcp: () => void;
3
6
  main: () => void;
4
- throw: {
5
- missingSource: () => readonly [import("../../effects/node/virtual/types.ts").State, void];
6
- };
7
+ missingSource: () => void;
7
8
  };
@@ -1,14 +1,14 @@
1
1
  /**
2
2
  * Proofs for local development configuration generation.
3
- *
4
- * @module
5
3
  */
4
+
5
+ import { exitCode } from '../../effects/node/module.f.mjs'
6
6
  import { assert, assertEq } from '../../asserts/module.f.mjs'
7
7
  import { utf8 } from '../../text/module.f.mjs'
8
8
  import { readUtf8File } from '../../effects/node/module.f.mjs'
9
9
  import { defaultNodeProgramOptions, emptyState, virtual } from '../../effects/node/virtual/module.f.mjs'
10
10
  import { main, syncMcp } from './module.f.mjs'
11
- import { step } from '../../effects/module.f.mjs'
11
+ import { step as ioStep } from '../../effects/module.f.mjs'
12
12
 
13
13
  const mcp = /** @type {const} */ ('{"servers":{}}')
14
14
  const initial = /** @type {const} */ ({
@@ -21,16 +21,20 @@ const initial = /** @type {const} */ ({
21
21
  })
22
22
  export const proof = {
23
23
  syncMcp: () => {
24
- const generatedMcp = step(syncMcp(), () => readUtf8File('.vscode/mcp.json'))
24
+ const generatedMcp = ioStep(syncMcp(), () => readUtf8File('.vscode/mcp.json'))
25
25
  const [, [tag, result]] = virtual(initial)(generatedMcp)
26
26
  assert(tag === 'ok', result)
27
27
  assertEq(result, mcp)
28
28
  },
29
29
  main: () => {
30
30
  const [, result] = virtual(initial)(main(defaultNodeProgramOptions))
31
- assertEq(result, 0)
31
+ assertEq(exitCode(result), 0)
32
32
  },
33
- throw: {
34
- missingSource: () => virtual(emptyState)(syncMcp()),
33
+ // A missing source is no longer a panic: it propagates through the chain
34
+ // and the program reports it and exits 1.
35
+ missingSource: () => {
36
+ const [state, code] = virtual(emptyState)(main(defaultNodeProgramOptions))
37
+ assertEq(exitCode(code), 1)
38
+ assertEq(state.stderr, 'no such file or directory\n', state.stderr)
35
39
  },
36
40
  }
@@ -3,15 +3,23 @@
3
3
  *
4
4
  * @module
5
5
  *
6
- * @import { Effect } from '../effects/types.ts'
7
6
  * @import { WriteFile, ReadFile, Write } from '../effects/node/types.ts'
8
7
  * @import { Result } from '../types/result/types.ts'
9
8
  * @import { Unknown } from './types.ts'
10
9
  * @import { ParseError } from './parser/types.ts'
10
+ * @import { Effect } from '../effects/types.ts'
11
11
  */
12
- import type { Effect } from '../effects/types.ts';
13
12
  import type { WriteFile, ReadFile, Write } from '../effects/node/types.ts';
13
+ import type { Effect } from '../effects/types.ts';
14
14
  export type _CompileOp = ReadFile | WriteFile | Write;
15
- /** @typedef {ReadFile | WriteFile | Write} _CompileOp */
16
- /** @type {(args: readonly string[]) => Effect<_CompileOp, number>} */
17
- export declare const compile: (args: readonly string[]) => Effect<_CompileOp, number>;
15
+ /**
16
+ * Compiles the DJS module `args[0]` into `args[1]`, serializing as a JSON tree
17
+ * when the output name ends with `.json` and as a module otherwise.
18
+ *
19
+ * Returns the process exit code: `0` once the output file is written, `1` on
20
+ * every failure — too few arguments, a missing input file, or a parse error —
21
+ * so a caller can detect a failed compile from the exit status alone.
22
+ *
23
+ * @type {(args: readonly string[]) => Effect<_CompileOp, 0, number>}
24
+ */
25
+ export declare const compile: (args: readonly string[]) => Effect<_CompileOp, 0, number>;
@@ -3,45 +3,60 @@
3
3
  *
4
4
  * @module
5
5
  *
6
- * @import { Effect } from '../effects/types.ts'
7
6
  * @import { WriteFile, ReadFile, Write } from '../effects/node/types.ts'
8
7
  * @import { Result } from '../types/result/types.ts'
9
8
  * @import { Unknown } from './types.ts'
10
9
  * @import { ParseError } from './parser/types.ts'
10
+ * @import { Effect } from '../effects/types.ts'
11
11
  */
12
12
 
13
13
  import { transpile } from './transpiler/module.f.mjs'
14
14
  import { stringify, stringifyAsTree } from './serializer/module.f.mjs'
15
15
  import { sort } from '../types/object/module.f.mjs'
16
- import { pure, step } from '../effects/module.f.mjs'
17
- import { writeUtf8File, error } from '../effects/node/module.f.mjs'
16
+ import { resultStep } from '../effects/module.f.mjs'
17
+ import { errorExit, exitStep, writeUtf8File } from '../effects/node/module.f.mjs'
18
18
 
19
19
  /** @typedef {ReadFile | WriteFile | Write} _CompileOp */
20
20
 
21
- /** @type {(args: readonly string[]) => Effect<_CompileOp, number>} */
21
+ /**
22
+ * Where an error happened, as much of it as is known: the token's
23
+ * `path:line:column` when the reader tracks positions, and otherwise the name
24
+ * of the file being compiled. A `.json` input is read by `fjs/media/json`,
25
+ * whose errors carry no position, and a missing file or a circular dependency
26
+ * has no token to point at either.
27
+ *
28
+ * @type {(inputFileName: string) => (parseError: ParseError) => string}
29
+ */
30
+ const errorLocation = inputFileName => ({ metadata }) => metadata === null
31
+ ? inputFileName
32
+ : `${metadata.path}:${metadata.line}:${metadata.column}`
33
+
34
+ /**
35
+ * Compiles the DJS module `args[0]` into `args[1]`, serializing as a JSON tree
36
+ * when the output name ends with `.json` and as a module otherwise.
37
+ *
38
+ * Returns the process exit code: `0` once the output file is written, `1` on
39
+ * every failure — too few arguments, a missing input file, or a parse error —
40
+ * so a caller can detect a failed compile from the exit status alone.
41
+ *
42
+ * @type {(args: readonly string[]) => Effect<_CompileOp, 0, number>}
43
+ */
22
44
  export const compile = args => {
23
45
  if (args.length < 2) {
24
- return step(
25
- error('Error: Requires 2 or more arguments'),
26
- () => pure(1))
46
+ return errorExit('Error: Requires 2 or more arguments')
27
47
  }
28
48
  const inputFileName = args[0]
29
49
  const outputFileName = args[1]
30
- return step(
50
+ return resultStep(
31
51
  transpile(inputFileName),
32
- /** @type {(result: Result<Unknown, ParseError>) => Effect<_CompileOp, number>} */
52
+ /** @type {(result: Result<Unknown, ParseError>) => Effect<_CompileOp, 0, number>} */
33
53
  (result) => {
34
54
  if (result[0] === 'error') {
35
- const metadata = result[1].metadata
36
- return step(
37
- error(`${metadata?.path}:${metadata?.line}:${metadata?.column} - error: ${result[1].message}`),
38
- () => pure(0))
55
+ return errorExit(`${errorLocation(inputFileName)(result[1])} - error: ${result[1].message}`)
39
56
  }
40
57
  const content = outputFileName.endsWith('.json')
41
58
  ? stringifyAsTree(sort)(result[1])
42
59
  : stringify(sort)(result[1])
43
- return step(
44
- writeUtf8File(outputFileName, content),
45
- () => pure(0))
60
+ return exitStep(writeUtf8File(outputFileName, content))
46
61
  })
47
62
  }
@@ -10,7 +10,7 @@
10
10
  * @import { OrderedMap } from '../../types/ordered_map/types.ts'
11
11
  * @import { AstArray, AstConst, AstModule, AstModuleRef } from '../ast/types.ts'
12
12
  * @import { TokenMetadata } from '../../js/tokenizer/types.ts'
13
- * @import { ParseError } from './types.ts'
13
+ * @import { ParseError, _ValueToken } from './types.ts'
14
14
  */
15
15
  import type { Result } from '../../types/result/types.ts';
16
16
  import type { List } from '../../types/list/types.ts';
@@ -48,10 +48,11 @@ export type _ExportState = {
48
48
  readonly state: 'export';
49
49
  readonly module: _ModuleState;
50
50
  };
51
+ export type _ValueState = '' | '[' | '[v' | '[,' | '{' | '{[' | '{[k' | '{k' | '{:' | '{v' | '{,';
51
52
  export type _ParseValueState = {
52
53
  readonly state: 'constValue' | 'exportValue';
53
54
  readonly module: _ModuleState;
54
- readonly valueState: '' | '[' | '[v' | '[,' | '{' | '{k' | '{:' | '{v' | '{,';
55
+ readonly valueState: _ValueState;
55
56
  readonly top: _DjsStackElement | null;
56
57
  readonly stack: _DjsStack;
57
58
  };
@@ -63,7 +64,16 @@ export type _ErrorState = {
63
64
  readonly state: 'error';
64
65
  readonly error: ParseError;
65
66
  };
66
- /** @type {(tokenList: List<DjsTokenWithMetadata>) => Result<AstModule, ParseError>} */
67
+ /**
68
+ * Reads the token list as a FunctionalScript module: `import` statements, then
69
+ * `const` statements, then one `export default`.
70
+ *
71
+ * This is the only language the parser reads. A JSON document is data, not a
72
+ * module, and `fjs/media/json` is its reader
73
+ * ([spec: JSON input](../../../spec/README.md#json-input)).
74
+ *
75
+ * @type {(tokenList: List<DjsTokenWithMetadata>) => Result<AstModule, ParseError>}
76
+ */
67
77
  export declare const parseFromTokens: (tokenList: List<DjsTokenWithMetadata>) => Result<AstModule, ParseError>;
68
78
  export declare const proof: {
69
79
  pushKey: {
@@ -72,4 +82,7 @@ export declare const proof: {
72
82
  endArray: {
73
83
  nonArrayTop: () => void;
74
84
  };
85
+ endObject: {
86
+ nonObjectTop: () => void;
87
+ };
75
88
  };