functionalscript 0.37.0 → 0.38.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 (500) hide show
  1. package/README.md +1 -1
  2. package/{fs → fjs}/asn.1/proof.f.js +32 -94
  3. package/fjs/asserts/module.f.d.ts +36 -0
  4. package/fjs/asserts/module.f.js +39 -0
  5. package/fjs/asserts/proof.f.d.ts +11 -0
  6. package/fjs/asserts/proof.f.js +18 -0
  7. package/{fs → fjs}/base_n/proof.f.js +12 -36
  8. package/{fs → fjs}/basen/base64/proof.f.d.ts +1 -0
  9. package/{fs → fjs}/basen/base64/proof.f.js +15 -1
  10. package/{fs → fjs}/basen/cbase32/proof.f.js +15 -42
  11. package/fjs/bnf/data/module.f.d.ts +52 -0
  12. package/{fs → fjs}/bnf/data/module.f.js +53 -3
  13. package/{fs → fjs}/bnf/data/proof.f.d.ts +1 -0
  14. package/{fs → fjs}/bnf/data/proof.f.js +54 -19
  15. package/{fs → fjs}/bnf/descent/module.f.d.ts +4 -14
  16. package/fjs/bnf/descent/module.f.js +124 -0
  17. package/{fs → fjs}/bnf/descent/proof.f.d.ts +1 -0
  18. package/{fs → fjs}/bnf/descent/proof.f.js +55 -24
  19. package/{fs → fjs}/bnf/ll1/module.f.d.ts +4 -4
  20. package/{fs → fjs}/bnf/ll1/module.f.js +7 -5
  21. package/{fs → fjs}/bnf/ll1/proof.f.d.ts +1 -0
  22. package/{fs → fjs}/bnf/ll1/proof.f.js +27 -10
  23. package/{fs → fjs}/bnf/module.f.d.ts +19 -5
  24. package/{fs → fjs}/bnf/module.f.js +10 -11
  25. package/fjs/bnf/proof.f.js +69 -0
  26. package/{fs → fjs}/bnf/testlib.f.js +2 -2
  27. package/{fs → fjs}/cas/cli/proof.f.d.ts +4 -1
  28. package/{fs → fjs}/cas/cli/proof.f.js +29 -66
  29. package/fjs/cas/evo/mcp/module.f.d.ts +19 -0
  30. package/fjs/cas/evo/mcp/module.f.js +56 -0
  31. package/fjs/cas/evo/mcp/proof.f.d.ts +9 -0
  32. package/fjs/cas/evo/mcp/proof.f.js +95 -0
  33. package/fjs/cas/evo/module.f.d.ts +138 -0
  34. package/fjs/cas/evo/module.f.js +309 -0
  35. package/fjs/cas/evo/proof.f.d.ts +32 -0
  36. package/fjs/cas/evo/proof.f.js +453 -0
  37. package/fjs/cas/mcp/module.f.d.ts +49 -0
  38. package/{fs → fjs}/cas/mcp/module.f.js +54 -76
  39. package/{fs → fjs}/cas/mcp/proof.f.d.ts +4 -1
  40. package/{fs → fjs}/cas/mcp/proof.f.js +41 -13
  41. package/{fs → fjs}/cas/module.f.d.ts +10 -0
  42. package/{fs → fjs}/cas/module.f.js +27 -1
  43. package/{fs → fjs}/cas/proof.f.d.ts +4 -0
  44. package/{fs → fjs}/cas/proof.f.js +77 -86
  45. package/{fs → fjs}/ci/config/module.f.d.ts +5 -5
  46. package/{fs → fjs}/ci/config/module.f.js +5 -5
  47. package/{fs → fjs}/ci/proof.f.js +14 -9
  48. package/{fs → fjs}/ci/rust/module.f.js +9 -1
  49. package/{fs → fjs}/cli/proof.f.js +22 -63
  50. package/{fs → fjs}/common/monoid/proof.f.js +4 -9
  51. package/{fs → fjs}/crypto/hmac/proof.f.js +4 -12
  52. package/fjs/crypto/pow/proof.f.js +111 -0
  53. package/{fs → fjs}/crypto/secp/proof.f.js +12 -33
  54. package/{fs → fjs}/crypto/sha2/proof.f.js +18 -49
  55. package/{fs → fjs}/crypto/sign/module.f.d.ts +0 -5
  56. package/{fs → fjs}/crypto/sign/module.f.js +7 -4
  57. package/{fs → fjs}/crypto/sign/proof.f.js +36 -105
  58. package/{fs → fjs}/crypto/vdf/proof.f.js +22 -63
  59. package/{fs → fjs}/dev/package_json/proof.f.js +7 -7
  60. package/{fs → fjs}/dev/proof.f.js +2 -4
  61. package/{fs → fjs}/djs/ast/proof.f.js +4 -12
  62. package/{fs → fjs}/djs/parser/module.f.d.ts +5 -0
  63. package/{fs → fjs}/djs/parser/module.f.js +20 -0
  64. package/{fs → fjs}/djs/parser/proof.f.js +138 -400
  65. package/{fs → fjs}/djs/proof.f.js +13 -36
  66. package/{fs → fjs}/djs/serializer/proof.f.js +14 -39
  67. package/fjs/djs/tokenizer/module.f.d.ts +24 -0
  68. package/fjs/djs/tokenizer/module.f.js +472 -0
  69. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.d.ts +4 -3
  70. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.js +446 -445
  71. package/{fs → fjs}/djs/transpiler/proof.f.d.ts +3 -0
  72. package/{fs → fjs}/djs/transpiler/proof.f.js +29 -30
  73. package/{fs → fjs}/effects/memory/proof.f.js +8 -21
  74. package/{fs → fjs}/effects/node/memory/proof.js +5 -12
  75. package/{fs → fjs}/effects/node/module.d.ts +1 -1
  76. package/{fs → fjs}/effects/node/module.f.d.ts +1 -1
  77. package/{fs → fjs}/effects/node/module.js +3 -3
  78. package/{fs → fjs}/effects/node/proof.f.d.ts +1 -0
  79. package/{fs → fjs}/effects/node/proof.f.js +106 -292
  80. package/{fs → fjs}/effects/node/virtual/proof.f.d.ts +1 -0
  81. package/{fs → fjs}/effects/node/virtual/proof.f.js +36 -29
  82. package/{fs → fjs}/effects/proof.f.js +16 -45
  83. package/{fs → fjs}/emergent_testing/proof.f.js +7 -7
  84. package/{fs → fjs}/fsc/proof.f.js +12 -34
  85. package/{fs → fjs}/fsm/proof.f.js +5 -12
  86. package/{fs → fjs}/mcp/module.f.d.ts +7 -0
  87. package/{fs → fjs}/mcp/module.f.js +9 -2
  88. package/{fs → fjs}/mcp/proof.f.js +12 -12
  89. package/{fs → fjs}/mcp/stdio/module.f.d.ts +2 -2
  90. package/{fs → fjs}/mcp/stdio/module.f.js +2 -2
  91. package/{fs → fjs}/media/html/proof.f.js +12 -33
  92. package/{fs → fjs}/media/json/parser/module.f.d.ts +5 -0
  93. package/{fs → fjs}/media/json/parser/module.f.js +14 -0
  94. package/{fs → fjs}/media/json/parser/proof.f.js +39 -114
  95. package/{fs → fjs}/media/json/rpc/module.f.js +1 -1
  96. package/{fs → fjs}/media/json/schema/module.f.d.ts +2 -2
  97. package/{fs → fjs}/media/json/schema/module.f.js +23 -39
  98. package/{fs → fjs}/media/json/schema/proof.f.js +3 -6
  99. package/{fs → fjs}/media/json/serializer/proof.f.js +10 -27
  100. package/{fs → fjs}/media/module.f.d.ts +6 -6
  101. package/{fs → fjs}/media/module.f.js +3 -4
  102. package/{fs → fjs}/media/proof.f.js +5 -4
  103. package/{fs → fjs}/media/revision/module.f.d.ts +31 -4
  104. package/{fs → fjs}/media/revision/module.f.js +35 -23
  105. package/{fs → fjs}/media/revision/proof.f.d.ts +10 -8
  106. package/fjs/media/revision/proof.f.js +140 -0
  107. package/{fs → fjs}/media/type/proof.f.js +2 -6
  108. package/{fs → fjs}/module.f.js +1 -1
  109. package/{fs → fjs}/path/proof.f.js +27 -78
  110. package/{fs → fjs}/proof.f.js +2 -0
  111. package/{fs → fjs}/sul/id/proof.f.js +7 -21
  112. package/{fs → fjs}/sul/level/hash/proof.f.js +5 -5
  113. package/{fs → fjs}/sul/level/literal/proof.f.js +12 -26
  114. package/fjs/text/ascii/proof.f.d.ts +6 -0
  115. package/{fs → fjs}/text/ascii/proof.f.js +4 -14
  116. package/{fs → fjs}/text/code_point/module.f.js +10 -10
  117. package/{fs → fjs}/text/proof.f.js +4 -9
  118. package/{fs → fjs}/text/sgr/proof.f.js +6 -15
  119. package/{fs → fjs}/text/utf16/module.f.js +1 -1
  120. package/{fs → fjs}/text/utf16/proof.f.js +23 -66
  121. package/{fs → fjs}/text/utf8/proof.f.js +56 -125
  122. package/{fs → fjs}/types/array/proof.f.js +18 -52
  123. package/fjs/types/bigfloat/proof.f.js +217 -0
  124. package/{fs → fjs}/types/bigint/proof.f.js +49 -145
  125. package/{fs → fjs}/types/bit_vec/proof.f.js +72 -214
  126. package/{fs → fjs}/types/btree/find/proof.f.js +23 -66
  127. package/{fs → fjs}/types/btree/proof.f.js +5 -12
  128. package/{fs → fjs}/types/btree/remove/proof.f.d.ts +2 -0
  129. package/{fs → fjs}/types/btree/remove/proof.f.js +83 -230
  130. package/{fs → fjs}/types/btree/set/module.f.js +5 -2
  131. package/{fs → fjs}/types/btree/set/proof.f.js +35 -24
  132. package/{fs → fjs}/types/byte_set/proof.f.js +22 -63
  133. package/{fs → fjs}/types/function/compare/proof.f.js +13 -36
  134. package/{fs → fjs}/types/function/operator/proof.f.js +17 -48
  135. package/{fs → fjs}/types/function/proof.f.js +2 -3
  136. package/{fs → fjs}/types/list/proof.f.js +55 -163
  137. package/{fs → fjs}/types/map/proof.f.js +4 -12
  138. package/{fs → fjs}/types/nibble_set/proof.f.js +16 -45
  139. package/{fs → fjs}/types/nominal/proof.f.js +5 -10
  140. package/fjs/types/nullable/proof.f.js +29 -0
  141. package/{fs → fjs}/types/number/proof.f.js +9 -24
  142. package/{fs → fjs}/types/object/proof.f.js +3 -6
  143. package/{fs → fjs}/types/patricia_trie/proof.f.js +21 -21
  144. package/{fs → fjs}/types/prime_field/module.f.js +2 -7
  145. package/{fs → fjs}/types/range/module.f.d.ts +1 -1
  146. package/fjs/types/range/module.f.js +2 -0
  147. package/fjs/types/range/proof.f.js +9 -0
  148. package/{fs → fjs}/types/range_map/proof.f.js +28 -81
  149. package/{fs → fjs}/types/result/proof.f.d.ts +3 -2
  150. package/fjs/types/result/proof.f.js +31 -0
  151. package/{fs → fjs}/types/rtti/common/module.f.d.ts +36 -1
  152. package/{fs → fjs}/types/rtti/common/module.f.js +44 -0
  153. package/fjs/types/rtti/common/proof.f.d.ts +8 -0
  154. package/fjs/types/rtti/common/proof.f.js +51 -0
  155. package/{fs → fjs}/types/rtti/parse/module.f.js +13 -22
  156. package/{fs → fjs}/types/rtti/parse/proof.f.js +7 -18
  157. package/{fs → fjs}/types/rtti/ts/module.f.d.ts +10 -4
  158. package/{fs → fjs}/types/rtti/validate/module.f.js +8 -29
  159. package/{fs → fjs}/types/rtti/validate/proof.f.js +4 -9
  160. package/{fs → fjs}/types/sorted_list/proof.f.js +8 -21
  161. package/{fs → fjs}/types/sorted_set/proof.f.js +14 -39
  162. package/fjs/types/string/proof.f.js +77 -0
  163. package/fjs/types/string_set/proof.f.js +43 -0
  164. package/{fs → fjs}/types/ts/proof.f.js +15 -42
  165. package/{fs → fjs}/types/uint8array/module.f.js +7 -7
  166. package/{fs → fjs}/types/uint8array/proof.f.d.ts +4 -1
  167. package/{fs → fjs}/types/uint8array/proof.f.js +7 -7
  168. package/{fs → fjs}/website/proof.f.js +3 -6
  169. package/package.json +6 -6
  170. package/fs/asserts/module.f.d.ts +0 -4
  171. package/fs/asserts/module.f.js +0 -9
  172. package/fs/asserts/proof.f.d.ts +0 -8
  173. package/fs/asserts/proof.f.js +0 -51
  174. package/fs/bnf/data/module.f.d.ts +0 -30
  175. package/fs/bnf/descent/module.f.js +0 -119
  176. package/fs/bnf/proof.f.js +0 -104
  177. package/fs/cas/mcp/module.f.d.ts +0 -36
  178. package/fs/crypto/pow/proof.f.js +0 -161
  179. package/fs/djs/tokenizer/module.f.d.ts +0 -12
  180. package/fs/djs/tokenizer/module.f.js +0 -62
  181. package/fs/djs/tokenizer/proof.f.d.ts +0 -7
  182. package/fs/djs/tokenizer/proof.f.js +0 -543
  183. package/fs/djs/tokenizer-new/module.f.d.ts +0 -3
  184. package/fs/djs/tokenizer-new/module.f.js +0 -155
  185. package/fs/media/revision/proof.f.js +0 -119
  186. package/fs/text/ascii/proof.f.d.ts +0 -4
  187. package/fs/types/bigfloat/proof.f.js +0 -348
  188. package/fs/types/nullable/proof.f.js +0 -50
  189. package/fs/types/range/module.f.js +0 -2
  190. package/fs/types/range/proof.f.js +0 -18
  191. package/fs/types/result/proof.f.js +0 -52
  192. package/fs/types/string/proof.f.js +0 -118
  193. package/fs/types/string_set/proof.f.js +0 -82
  194. /package/{fs → fjs}/asn.1/module.f.d.ts +0 -0
  195. /package/{fs → fjs}/asn.1/module.f.js +0 -0
  196. /package/{fs → fjs}/asn.1/proof.f.d.ts +0 -0
  197. /package/{fs → fjs}/base_n/module.f.d.ts +0 -0
  198. /package/{fs → fjs}/base_n/module.f.js +0 -0
  199. /package/{fs → fjs}/base_n/proof.f.d.ts +0 -0
  200. /package/{fs → fjs}/basen/base128/module.f.d.ts +0 -0
  201. /package/{fs → fjs}/basen/base128/module.f.js +0 -0
  202. /package/{fs → fjs}/basen/base128/proof.f.d.ts +0 -0
  203. /package/{fs → fjs}/basen/base128/proof.f.js +0 -0
  204. /package/{fs → fjs}/basen/base64/module.f.d.ts +0 -0
  205. /package/{fs → fjs}/basen/base64/module.f.js +0 -0
  206. /package/{fs → fjs}/basen/cbase32/module.f.d.ts +0 -0
  207. /package/{fs → fjs}/basen/cbase32/module.f.js +0 -0
  208. /package/{fs → fjs}/basen/cbase32/proof.f.d.ts +0 -0
  209. /package/{fs → fjs}/bnf/proof.f.d.ts +0 -0
  210. /package/{fs → fjs}/bnf/testlib.f.d.ts +0 -0
  211. /package/{fs → fjs}/cas/cli/module.f.d.ts +0 -0
  212. /package/{fs → fjs}/cas/cli/module.f.js +0 -0
  213. /package/{fs → fjs}/ci/bun/module.f.d.ts +0 -0
  214. /package/{fs → fjs}/ci/bun/module.f.js +0 -0
  215. /package/{fs → fjs}/ci/common/module.f.d.ts +0 -0
  216. /package/{fs → fjs}/ci/common/module.f.js +0 -0
  217. /package/{fs → fjs}/ci/deno/module.f.d.ts +0 -0
  218. /package/{fs → fjs}/ci/deno/module.f.js +0 -0
  219. /package/{fs → fjs}/ci/module.f.d.ts +0 -0
  220. /package/{fs → fjs}/ci/module.f.js +0 -0
  221. /package/{fs → fjs}/ci/node/module.f.d.ts +0 -0
  222. /package/{fs → fjs}/ci/node/module.f.js +0 -0
  223. /package/{fs → fjs}/ci/playwright/module.f.d.ts +0 -0
  224. /package/{fs → fjs}/ci/playwright/module.f.js +0 -0
  225. /package/{fs → fjs}/ci/proof.f.d.ts +0 -0
  226. /package/{fs → fjs}/ci/rust/module.f.d.ts +0 -0
  227. /package/{fs → fjs}/cli/module.f.d.ts +0 -0
  228. /package/{fs → fjs}/cli/module.f.js +0 -0
  229. /package/{fs → fjs}/cli/proof.f.d.ts +0 -0
  230. /package/{fs → fjs}/common/monoid/module.f.d.ts +0 -0
  231. /package/{fs → fjs}/common/monoid/module.f.js +0 -0
  232. /package/{fs → fjs}/common/monoid/proof.f.d.ts +0 -0
  233. /package/{fs → fjs}/crypto/hmac/module.f.d.ts +0 -0
  234. /package/{fs → fjs}/crypto/hmac/module.f.js +0 -0
  235. /package/{fs → fjs}/crypto/hmac/proof.f.d.ts +0 -0
  236. /package/{fs → fjs}/crypto/pow/module.f.d.ts +0 -0
  237. /package/{fs → fjs}/crypto/pow/module.f.js +0 -0
  238. /package/{fs → fjs}/crypto/pow/proof.f.d.ts +0 -0
  239. /package/{fs → fjs}/crypto/secp/module.f.d.ts +0 -0
  240. /package/{fs → fjs}/crypto/secp/module.f.js +0 -0
  241. /package/{fs → fjs}/crypto/secp/proof.f.d.ts +0 -0
  242. /package/{fs → fjs}/crypto/sha2/module.f.d.ts +0 -0
  243. /package/{fs → fjs}/crypto/sha2/module.f.js +0 -0
  244. /package/{fs → fjs}/crypto/sha2/proof.f.d.ts +0 -0
  245. /package/{fs → fjs}/crypto/sign/proof.f.d.ts +0 -0
  246. /package/{fs → fjs}/crypto/vdf/module.f.d.ts +0 -0
  247. /package/{fs → fjs}/crypto/vdf/module.f.js +0 -0
  248. /package/{fs → fjs}/crypto/vdf/proof.f.d.ts +0 -0
  249. /package/{fs → fjs}/dev/module.f.d.ts +0 -0
  250. /package/{fs → fjs}/dev/module.f.js +0 -0
  251. /package/{fs → fjs}/dev/package_json/module.f.d.ts +0 -0
  252. /package/{fs → fjs}/dev/package_json/module.f.js +0 -0
  253. /package/{fs → fjs}/dev/package_json/proof.f.d.ts +0 -0
  254. /package/{fs → fjs}/dev/proof.f.d.ts +0 -0
  255. /package/{fs → fjs}/djs/ast/module.f.d.ts +0 -0
  256. /package/{fs → fjs}/djs/ast/module.f.js +0 -0
  257. /package/{fs → fjs}/djs/ast/proof.f.d.ts +0 -0
  258. /package/{fs → fjs}/djs/examples/input.f.d.ts +0 -0
  259. /package/{fs → fjs}/djs/examples/input.f.js +0 -0
  260. /package/{fs → fjs}/djs/examples/m.f.d.ts +0 -0
  261. /package/{fs → fjs}/djs/examples/m.f.js +0 -0
  262. /package/{fs → fjs}/djs/module.f.d.ts +0 -0
  263. /package/{fs → fjs}/djs/module.f.js +0 -0
  264. /package/{fs → fjs}/djs/parser/proof.f.d.ts +0 -0
  265. /package/{fs → fjs}/djs/proof.f.d.ts +0 -0
  266. /package/{fs → fjs}/djs/serializer/module.f.d.ts +0 -0
  267. /package/{fs → fjs}/djs/serializer/module.f.js +0 -0
  268. /package/{fs → fjs}/djs/serializer/proof.f.d.ts +0 -0
  269. /package/{fs → fjs}/djs/transpiler/module.f.d.ts +0 -0
  270. /package/{fs → fjs}/djs/transpiler/module.f.js +0 -0
  271. /package/{fs → fjs}/effects/list/module.f.d.ts +0 -0
  272. /package/{fs → fjs}/effects/list/module.f.js +0 -0
  273. /package/{fs → fjs}/effects/memory/module.f.d.ts +0 -0
  274. /package/{fs → fjs}/effects/memory/module.f.js +0 -0
  275. /package/{fs → fjs}/effects/memory/proof.f.d.ts +0 -0
  276. /package/{fs → fjs}/effects/mock/module.f.d.ts +0 -0
  277. /package/{fs → fjs}/effects/mock/module.f.js +0 -0
  278. /package/{fs → fjs}/effects/module.d.ts +0 -0
  279. /package/{fs → fjs}/effects/module.f.d.ts +0 -0
  280. /package/{fs → fjs}/effects/module.f.js +0 -0
  281. /package/{fs → fjs}/effects/module.js +0 -0
  282. /package/{fs → fjs}/effects/node/memory/module.d.ts +0 -0
  283. /package/{fs → fjs}/effects/node/memory/module.js +0 -0
  284. /package/{fs → fjs}/effects/node/memory/proof.d.ts +0 -0
  285. /package/{fs → fjs}/effects/node/module.f.js +0 -0
  286. /package/{fs → fjs}/effects/node/virtual/module.f.d.ts +0 -0
  287. /package/{fs → fjs}/effects/node/virtual/module.f.js +0 -0
  288. /package/{fs → fjs}/effects/proof.f.d.ts +0 -0
  289. /package/{fs → fjs}/emergent_testing/all.test.d.ts +0 -0
  290. /package/{fs → fjs}/emergent_testing/all.test.js +0 -0
  291. /package/{fs → fjs}/emergent_testing/example.f.d.ts +0 -0
  292. /package/{fs → fjs}/emergent_testing/example.f.js +0 -0
  293. /package/{fs → fjs}/emergent_testing/module.f.d.ts +0 -0
  294. /package/{fs → fjs}/emergent_testing/module.f.js +0 -0
  295. /package/{fs → fjs}/emergent_testing/proof.f.d.ts +0 -0
  296. /package/{fs → fjs}/emergent_testing/scenarios/all.d.ts +0 -0
  297. /package/{fs → fjs}/emergent_testing/scenarios/all.js +0 -0
  298. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -0
  299. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.js +0 -0
  300. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -0
  301. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.js +0 -0
  302. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.d.ts +0 -0
  303. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.js +0 -0
  304. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.d.ts +0 -0
  305. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.js +0 -0
  306. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.d.ts +0 -0
  307. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.js +0 -0
  308. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.d.ts +0 -0
  309. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.js +0 -0
  310. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.d.ts +0 -0
  311. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.js +0 -0
  312. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.d.ts +0 -0
  313. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.js +0 -0
  314. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.d.ts +0 -0
  315. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.js +0 -0
  316. /package/{fs → fjs}/fsc/bnf.f.d.ts +0 -0
  317. /package/{fs → fjs}/fsc/bnf.f.js +0 -0
  318. /package/{fs → fjs}/fsc/json.f.d.ts +0 -0
  319. /package/{fs → fjs}/fsc/json.f.js +0 -0
  320. /package/{fs → fjs}/fsc/module.f.d.ts +0 -0
  321. /package/{fs → fjs}/fsc/module.f.js +0 -0
  322. /package/{fs → fjs}/fsc/proof.f.d.ts +0 -0
  323. /package/{fs → fjs}/fsm/module.f.d.ts +0 -0
  324. /package/{fs → fjs}/fsm/module.f.js +0 -0
  325. /package/{fs → fjs}/fsm/proof.f.d.ts +0 -0
  326. /package/{fs → fjs}/js/tokenizer/module.f.d.ts +0 -0
  327. /package/{fs → fjs}/js/tokenizer/module.f.js +0 -0
  328. /package/{fs → fjs}/js/tokenizer/proof.f.d.ts +0 -0
  329. /package/{fs → fjs}/js/tokenizer/proof.f.js +0 -0
  330. /package/{fs → fjs}/mcp/proof.f.d.ts +0 -0
  331. /package/{fs → fjs}/mcp/stdio/proof.f.d.ts +0 -0
  332. /package/{fs → fjs}/mcp/stdio/proof.f.js +0 -0
  333. /package/{fs → fjs}/media/html/module.f.d.ts +0 -0
  334. /package/{fs → fjs}/media/html/module.f.js +0 -0
  335. /package/{fs → fjs}/media/html/proof.f.d.ts +0 -0
  336. /package/{fs → fjs}/media/json/module.f.d.ts +0 -0
  337. /package/{fs → fjs}/media/json/module.f.js +0 -0
  338. /package/{fs → fjs}/media/json/parser/proof.f.d.ts +0 -0
  339. /package/{fs → fjs}/media/json/proof.f.d.ts +0 -0
  340. /package/{fs → fjs}/media/json/proof.f.js +0 -0
  341. /package/{fs → fjs}/media/json/rpc/module.f.d.ts +0 -0
  342. /package/{fs → fjs}/media/json/rpc/proof.f.d.ts +0 -0
  343. /package/{fs → fjs}/media/json/rpc/proof.f.js +0 -0
  344. /package/{fs → fjs}/media/json/schema/proof.f.d.ts +0 -0
  345. /package/{fs → fjs}/media/json/serializer/module.f.d.ts +0 -0
  346. /package/{fs → fjs}/media/json/serializer/module.f.js +0 -0
  347. /package/{fs → fjs}/media/json/serializer/proof.f.d.ts +0 -0
  348. /package/{fs → fjs}/media/json/tokenizer/module.f.d.ts +0 -0
  349. /package/{fs → fjs}/media/json/tokenizer/module.f.js +0 -0
  350. /package/{fs → fjs}/media/json/tokenizer/proof.f.d.ts +0 -0
  351. /package/{fs → fjs}/media/json/tokenizer/proof.f.js +0 -0
  352. /package/{fs → fjs}/media/proof.f.d.ts +0 -0
  353. /package/{fs → fjs}/media/type/module.f.d.ts +0 -0
  354. /package/{fs → fjs}/media/type/module.f.js +0 -0
  355. /package/{fs → fjs}/media/type/proof.f.d.ts +0 -0
  356. /package/{fs → fjs}/module.d.ts +0 -0
  357. /package/{fs → fjs}/module.f.d.ts +0 -0
  358. /package/{fs → fjs}/module.js +0 -0
  359. /package/{fs → fjs}/path/module.f.d.ts +0 -0
  360. /package/{fs → fjs}/path/module.f.js +0 -0
  361. /package/{fs → fjs}/path/proof.f.d.ts +0 -0
  362. /package/{fs → fjs}/proof.f.d.ts +0 -0
  363. /package/{fs → fjs}/sul/id/module.f.d.ts +0 -0
  364. /package/{fs → fjs}/sul/id/module.f.js +0 -0
  365. /package/{fs → fjs}/sul/id/proof.f.d.ts +0 -0
  366. /package/{fs → fjs}/sul/level/hash/module.f.d.ts +0 -0
  367. /package/{fs → fjs}/sul/level/hash/module.f.js +0 -0
  368. /package/{fs → fjs}/sul/level/hash/proof.f.d.ts +0 -0
  369. /package/{fs → fjs}/sul/level/literal/module.f.d.ts +0 -0
  370. /package/{fs → fjs}/sul/level/literal/module.f.js +0 -0
  371. /package/{fs → fjs}/sul/level/literal/proof.f.d.ts +0 -0
  372. /package/{fs → fjs}/sul/module.f.d.ts +0 -0
  373. /package/{fs → fjs}/sul/module.f.js +0 -0
  374. /package/{fs → fjs}/sul/proof.f.d.ts +0 -0
  375. /package/{fs → fjs}/sul/proof.f.js +0 -0
  376. /package/{fs → fjs}/text/ascii/module.f.d.ts +0 -0
  377. /package/{fs → fjs}/text/ascii/module.f.js +0 -0
  378. /package/{fs → fjs}/text/code_point/module.f.d.ts +0 -0
  379. /package/{fs → fjs}/text/code_point/proof.f.d.ts +0 -0
  380. /package/{fs → fjs}/text/code_point/proof.f.js +0 -0
  381. /package/{fs → fjs}/text/module.f.d.ts +0 -0
  382. /package/{fs → fjs}/text/module.f.js +0 -0
  383. /package/{fs → fjs}/text/proof.f.d.ts +0 -0
  384. /package/{fs → fjs}/text/sgr/module.f.d.ts +0 -0
  385. /package/{fs → fjs}/text/sgr/module.f.js +0 -0
  386. /package/{fs → fjs}/text/sgr/proof.f.d.ts +0 -0
  387. /package/{fs → fjs}/text/utf16/module.f.d.ts +0 -0
  388. /package/{fs → fjs}/text/utf16/proof.f.d.ts +0 -0
  389. /package/{fs → fjs}/text/utf8/module.f.d.ts +0 -0
  390. /package/{fs → fjs}/text/utf8/module.f.js +0 -0
  391. /package/{fs → fjs}/text/utf8/proof.f.d.ts +0 -0
  392. /package/{fs → fjs}/types/array/module.f.d.ts +0 -0
  393. /package/{fs → fjs}/types/array/module.f.js +0 -0
  394. /package/{fs → fjs}/types/array/proof.f.d.ts +0 -0
  395. /package/{fs → fjs}/types/bigfloat/module.f.d.ts +0 -0
  396. /package/{fs → fjs}/types/bigfloat/module.f.js +0 -0
  397. /package/{fs → fjs}/types/bigfloat/proof.f.d.ts +0 -0
  398. /package/{fs → fjs}/types/bigint/module.f.d.ts +0 -0
  399. /package/{fs → fjs}/types/bigint/module.f.js +0 -0
  400. /package/{fs → fjs}/types/bigint/proof.f.d.ts +0 -0
  401. /package/{fs → fjs}/types/bit_vec/module.f.d.ts +0 -0
  402. /package/{fs → fjs}/types/bit_vec/module.f.js +0 -0
  403. /package/{fs → fjs}/types/bit_vec/proof.f.d.ts +0 -0
  404. /package/{fs → fjs}/types/btree/find/module.f.d.ts +0 -0
  405. /package/{fs → fjs}/types/btree/find/module.f.js +0 -0
  406. /package/{fs → fjs}/types/btree/find/proof.f.d.ts +0 -0
  407. /package/{fs → fjs}/types/btree/module.f.d.ts +0 -0
  408. /package/{fs → fjs}/types/btree/module.f.js +0 -0
  409. /package/{fs → fjs}/types/btree/proof.f.d.ts +0 -0
  410. /package/{fs → fjs}/types/btree/remove/module.f.d.ts +0 -0
  411. /package/{fs → fjs}/types/btree/remove/module.f.js +0 -0
  412. /package/{fs → fjs}/types/btree/set/module.f.d.ts +0 -0
  413. /package/{fs → fjs}/types/btree/set/proof.f.d.ts +0 -0
  414. /package/{fs → fjs}/types/btree/types/module.f.d.ts +0 -0
  415. /package/{fs → fjs}/types/btree/types/module.f.js +0 -0
  416. /package/{fs → fjs}/types/byte_set/module.f.d.ts +0 -0
  417. /package/{fs → fjs}/types/byte_set/module.f.js +0 -0
  418. /package/{fs → fjs}/types/byte_set/proof.f.d.ts +0 -0
  419. /package/{fs → fjs}/types/function/compare/module.f.d.ts +0 -0
  420. /package/{fs → fjs}/types/function/compare/module.f.js +0 -0
  421. /package/{fs → fjs}/types/function/compare/proof.f.d.ts +0 -0
  422. /package/{fs → fjs}/types/function/module.f.d.ts +0 -0
  423. /package/{fs → fjs}/types/function/module.f.js +0 -0
  424. /package/{fs → fjs}/types/function/operator/module.f.d.ts +0 -0
  425. /package/{fs → fjs}/types/function/operator/module.f.js +0 -0
  426. /package/{fs → fjs}/types/function/operator/proof.f.d.ts +0 -0
  427. /package/{fs → fjs}/types/function/proof.f.d.ts +0 -0
  428. /package/{fs → fjs}/types/list/module.f.d.ts +0 -0
  429. /package/{fs → fjs}/types/list/module.f.js +0 -0
  430. /package/{fs → fjs}/types/list/proof.f.d.ts +0 -0
  431. /package/{fs → fjs}/types/map/module.f.d.ts +0 -0
  432. /package/{fs → fjs}/types/map/module.f.js +0 -0
  433. /package/{fs → fjs}/types/map/proof.f.d.ts +0 -0
  434. /package/{fs → fjs}/types/nibble_set/module.f.d.ts +0 -0
  435. /package/{fs → fjs}/types/nibble_set/module.f.js +0 -0
  436. /package/{fs → fjs}/types/nibble_set/proof.f.d.ts +0 -0
  437. /package/{fs → fjs}/types/nominal/module.f.d.ts +0 -0
  438. /package/{fs → fjs}/types/nominal/module.f.js +0 -0
  439. /package/{fs → fjs}/types/nominal/proof.f.d.ts +0 -0
  440. /package/{fs → fjs}/types/nullable/module.f.d.ts +0 -0
  441. /package/{fs → fjs}/types/nullable/module.f.js +0 -0
  442. /package/{fs → fjs}/types/nullable/proof.f.d.ts +0 -0
  443. /package/{fs → fjs}/types/number/module.f.d.ts +0 -0
  444. /package/{fs → fjs}/types/number/module.f.js +0 -0
  445. /package/{fs → fjs}/types/number/proof.f.d.ts +0 -0
  446. /package/{fs → fjs}/types/object/module.f.d.ts +0 -0
  447. /package/{fs → fjs}/types/object/module.f.js +0 -0
  448. /package/{fs → fjs}/types/object/proof.f.d.ts +0 -0
  449. /package/{fs → fjs}/types/option/module.f.d.ts +0 -0
  450. /package/{fs → fjs}/types/option/module.f.js +0 -0
  451. /package/{fs → fjs}/types/ordered_map/module.f.d.ts +0 -0
  452. /package/{fs → fjs}/types/ordered_map/module.f.js +0 -0
  453. /package/{fs → fjs}/types/ordered_map/proof.f.d.ts +0 -0
  454. /package/{fs → fjs}/types/ordered_map/proof.f.js +0 -0
  455. /package/{fs → fjs}/types/patricia_trie/module.f.d.ts +0 -0
  456. /package/{fs → fjs}/types/patricia_trie/module.f.js +0 -0
  457. /package/{fs → fjs}/types/patricia_trie/proof.f.d.ts +0 -0
  458. /package/{fs → fjs}/types/phantom/module.f.d.ts +0 -0
  459. /package/{fs → fjs}/types/phantom/module.f.js +0 -0
  460. /package/{fs → fjs}/types/prime_field/module.f.d.ts +0 -0
  461. /package/{fs → fjs}/types/prime_field/proof.f.d.ts +0 -0
  462. /package/{fs → fjs}/types/prime_field/proof.f.js +0 -0
  463. /package/{fs → fjs}/types/range/proof.f.d.ts +0 -0
  464. /package/{fs → fjs}/types/range_map/module.f.d.ts +0 -0
  465. /package/{fs → fjs}/types/range_map/module.f.js +0 -0
  466. /package/{fs → fjs}/types/range_map/proof.f.d.ts +0 -0
  467. /package/{fs → fjs}/types/result/module.d.ts +0 -0
  468. /package/{fs → fjs}/types/result/module.f.d.ts +0 -0
  469. /package/{fs → fjs}/types/result/module.f.js +0 -0
  470. /package/{fs → fjs}/types/result/module.js +0 -0
  471. /package/{fs → fjs}/types/rtti/module.f.d.ts +0 -0
  472. /package/{fs → fjs}/types/rtti/module.f.js +0 -0
  473. /package/{fs → fjs}/types/rtti/parse/module.f.d.ts +0 -0
  474. /package/{fs → fjs}/types/rtti/parse/proof.f.d.ts +0 -0
  475. /package/{fs → fjs}/types/rtti/proof.f.d.ts +0 -0
  476. /package/{fs → fjs}/types/rtti/proof.f.js +0 -0
  477. /package/{fs → fjs}/types/rtti/ts/module.f.js +0 -0
  478. /package/{fs → fjs}/types/rtti/ts/proof.f.d.ts +0 -0
  479. /package/{fs → fjs}/types/rtti/ts/proof.f.js +0 -0
  480. /package/{fs → fjs}/types/rtti/validate/module.f.d.ts +0 -0
  481. /package/{fs → fjs}/types/rtti/validate/proof.f.d.ts +0 -0
  482. /package/{fs → fjs}/types/sorted_list/module.f.d.ts +0 -0
  483. /package/{fs → fjs}/types/sorted_list/module.f.js +0 -0
  484. /package/{fs → fjs}/types/sorted_list/proof.f.d.ts +0 -0
  485. /package/{fs → fjs}/types/sorted_set/module.f.d.ts +0 -0
  486. /package/{fs → fjs}/types/sorted_set/module.f.js +0 -0
  487. /package/{fs → fjs}/types/sorted_set/proof.f.d.ts +0 -0
  488. /package/{fs → fjs}/types/string/module.f.d.ts +0 -0
  489. /package/{fs → fjs}/types/string/module.f.js +0 -0
  490. /package/{fs → fjs}/types/string/proof.f.d.ts +0 -0
  491. /package/{fs → fjs}/types/string_set/module.f.d.ts +0 -0
  492. /package/{fs → fjs}/types/string_set/module.f.js +0 -0
  493. /package/{fs → fjs}/types/string_set/proof.f.d.ts +0 -0
  494. /package/{fs → fjs}/types/ts/module.f.d.ts +0 -0
  495. /package/{fs → fjs}/types/ts/module.f.js +0 -0
  496. /package/{fs → fjs}/types/ts/proof.f.d.ts +0 -0
  497. /package/{fs → fjs}/types/uint8array/module.f.d.ts +0 -0
  498. /package/{fs → fjs}/website/module.f.d.ts +0 -0
  499. /package/{fs → fjs}/website/module.f.js +0 -0
  500. /package/{fs → fjs}/website/proof.f.d.ts +0 -0
@@ -2,10 +2,10 @@
2
2
  * stdio transport for JSON-RPC / MCP servers.
3
3
  *
4
4
  * `stdioTransport` wraps a step function — the `mcpStep`-shaped
5
- * `(value) => Effect<O, Response | null>` from `fs/mcp/module.f.ts` — in the
5
+ * `(value) => Effect<O, Response | null>` from `fjs/mcp/module.f.ts` — in the
6
6
  * canonical read → parse → dispatch → write loop, expressed as a recursive
7
7
  * effect so it stays in the pure effect model and is fully testable against a
8
- * mock stdin / stdout (see `fs/effects/node/virtual`) with no real process.
8
+ * mock stdin / stdout (see `fjs/effects/node/virtual`) with no real process.
9
9
  *
10
10
  * The loop only consumes `Read` (stdin, one byte at a time, via the pure
11
11
  * `readLine` combinator) and emits `Write` (stdout) on top of whatever `O` the
@@ -1,4 +1,5 @@
1
1
  import { htmlToString } from "./module.f.js";
2
+ import { assertEq } from '../../asserts/module.f.js';
2
3
  export const proof = {
3
4
  empty: () => {
4
5
  const r = htmlToString(['html']);
@@ -8,79 +9,57 @@ export const proof = {
8
9
  },
9
10
  empty2: () => {
10
11
  const r = htmlToString(['html']);
11
- if (r !== '<!DOCTYPE html><html></html>') {
12
- throw r;
13
- }
12
+ assertEq(r, '<!DOCTYPE html><html></html>');
14
13
  },
15
14
  void: () => {
16
15
  const r = htmlToString(['area']);
17
- if (r !== '<!DOCTYPE html><area>') {
18
- throw r;
19
- }
16
+ assertEq(r, '<!DOCTYPE html><area>');
20
17
  },
21
18
  some: () => {
22
19
  const x = ['div', {}, '<div>&amp;</div>', ['a', { href: 'hello"' }]];
23
20
  const s = htmlToString(x);
24
- if (s !== '<!DOCTYPE html><div>&lt;div&gt;&amp;amp;&lt;/div&gt;<a href="hello&quot;"></a></div>') {
25
- throw s;
26
- }
21
+ assertEq(s, '<!DOCTYPE html><div>&lt;div&gt;&amp;amp;&lt;/div&gt;<a href="hello&quot;"></a></div>');
27
22
  },
28
23
  some2: () => {
29
24
  const x = ['div', '<div>&amp;</div>', ['a', { href: 'hello"' }]];
30
25
  const s = htmlToString(x);
31
- if (s !== '<!DOCTYPE html><div>&lt;div&gt;&amp;amp;&lt;/div&gt;<a href="hello&quot;"></a></div>') {
32
- throw s;
33
- }
26
+ assertEq(s, '<!DOCTYPE html><div>&lt;div&gt;&amp;amp;&lt;/div&gt;<a href="hello&quot;"></a></div>');
34
27
  },
35
28
  someVoid: () => {
36
29
  const x = ['div', ['br', { id: '5' }], '<div>&amp;</div>', ['a', { href: 'hello"' }]];
37
30
  const s = htmlToString(x);
38
- if (s !== '<!DOCTYPE html><div><br id="5">&lt;div&gt;&amp;amp;&lt;/div&gt;<a href="hello&quot;"></a></div>') {
39
- throw s;
40
- }
31
+ assertEq(s, '<!DOCTYPE html><div><br id="5">&lt;div&gt;&amp;amp;&lt;/div&gt;<a href="hello&quot;"></a></div>');
41
32
  },
42
33
  raw: {
43
34
  script: () => {
44
35
  const x = ['script', { id: 'a<' }, 'const a = ', 'a<b>c'];
45
36
  const s = htmlToString(x);
46
- if (s !== '<!DOCTYPE html><script id="a&lt;">const a = a<b>c</script>') {
47
- throw s;
48
- }
37
+ assertEq(s, '<!DOCTYPE html><script id="a&lt;">const a = a<b>c</script>');
49
38
  },
50
39
  scriptEsc: () => {
51
40
  const x = ['script', { id: 'a<' }, '<', '/script>'];
52
41
  const s = htmlToString(x);
53
- if (s !== '<!DOCTYPE html><script id="a&lt;"><\\/script></script>') {
54
- throw s;
55
- }
42
+ assertEq(s, '<!DOCTYPE html><script id="a&lt;"><\\/script></script>');
56
43
  },
57
44
  style: () => {
58
45
  const x = ['style', { id: 'a<' }, 'const a = ', 'a<b>c'];
59
46
  const s = htmlToString(x);
60
- if (s !== '<!DOCTYPE html><style id="a&lt;">const a = a<b>c</style>') {
61
- throw s;
62
- }
47
+ assertEq(s, '<!DOCTYPE html><style id="a&lt;">const a = a<b>c</style>');
63
48
  },
64
49
  styleEsc: () => {
65
50
  const x = ['style', { id: 'a<' }, '</', 'stYle>'];
66
51
  const s = htmlToString(x);
67
- if (s !== '<!DOCTYPE html><style id="a&lt;"><\\/stYle></style>') {
68
- throw s;
69
- }
52
+ assertEq(s, '<!DOCTYPE html><style id="a&lt;"><\\/stYle></style>');
70
53
  },
71
54
  noRaw: () => {
72
55
  const x = ['div', { id: 'a<' }, 'const a = ', 'a<b>c'];
73
56
  const s = htmlToString(x);
74
- if (s !== '<!DOCTYPE html><div id="a&lt;">const a = a&lt;b&gt;c</div>') {
75
- throw s;
76
- }
57
+ assertEq(s, '<!DOCTYPE html><div id="a&lt;">const a = a&lt;b&gt;c</div>');
77
58
  },
78
59
  elemChild: () => {
79
60
  const x = ['script', ['span', 'ignored'], 'visible'];
80
61
  const s = htmlToString(x);
81
- if (s !== '<!DOCTYPE html><script>visible</script>') {
82
- throw s;
83
- }
62
+ assertEq(s, '<!DOCTYPE html><script>visible</script>');
84
63
  },
85
64
  }
86
65
  };
@@ -14,3 +14,8 @@ import { type Unknown } from '../module.f.ts';
14
14
  * when the token sequence is invalid or incomplete.
15
15
  */
16
16
  export declare const parse: (tokenList: List<JsonToken>) => Result<Unknown, string>;
17
+ export declare const proof: {
18
+ pushKey: {
19
+ nonObjectTop: () => void;
20
+ };
21
+ };
@@ -10,6 +10,7 @@ import {} from '../tokenizer/module.f.js';
10
10
  import { setReplace } from '../../../types/ordered_map/module.f.js';
11
11
  import {} from '../module.f.js';
12
12
  import { fromMap } from '../../../types/object/module.f.js';
13
+ import { assertEq } from '../../../asserts/module.f.js';
13
14
  const addKeyToObject = obj => key => ({ kind: 'object', values: obj.values, key: key });
14
15
  const addValueToObject = obj => value => ({ kind: 'object', values: setReplace(obj.key)(value)(obj.values), key: '' });
15
16
  const addToArray = array => value => ({ kind: 'array', values: concat(array.values)([value]) });
@@ -168,3 +169,16 @@ export const parse = tokenList => {
168
169
  default: return error('unexpected end');
169
170
  }
170
171
  };
172
+ export const proof = {
173
+ pushKey: {
174
+ // `pushKey` is only ever invoked while `state.top` is an object (the
175
+ // state machine's `'{'`/`'{,'` statuses guarantee it), so its
176
+ // non-object guard is a defensive branch unreachable through `parse`.
177
+ // Call it directly to cover that branch.
178
+ nonObjectTop: () => {
179
+ const state = { status: '[', top: { kind: 'array', values: null }, stack: null };
180
+ const result = pushKey(state)('key');
181
+ assertEq(result.status, 'error');
182
+ },
183
+ },
184
+ };
@@ -4,6 +4,7 @@ import { toArray } from '../../../types/list/module.f.js';
4
4
  import { stringify as jsonStringify } from '../module.f.js';
5
5
  import { sort } from '../../../types/object/module.f.js';
6
6
  import { stringToList } from '../../../text/utf16/module.f.js';
7
+ import { assertEq } from '../../../asserts/module.f.js';
7
8
  const tokenizeString = s => toArray(tokenize(stringToList(s)));
8
9
  const stringify = jsonStringify(sort);
9
10
  export const proof = {
@@ -12,81 +13,61 @@ export const proof = {
12
13
  const tokenList = tokenizeString('null');
13
14
  const obj = parse(tokenList);
14
15
  const result = stringify(obj);
15
- if (result !== '["ok",null]') {
16
- throw result;
17
- }
16
+ assertEq(result, '["ok",null]');
18
17
  },
19
18
  () => {
20
19
  const tokenList = tokenizeString('true');
21
20
  const obj = parse(tokenList);
22
21
  const result = stringify(obj);
23
- if (result !== '["ok",true]') {
24
- throw result;
25
- }
22
+ assertEq(result, '["ok",true]');
26
23
  },
27
24
  () => {
28
25
  const tokenList = tokenizeString('false');
29
26
  const obj = parse(tokenList);
30
27
  const result = stringify(obj);
31
- if (result !== '["ok",false]') {
32
- throw result;
33
- }
28
+ assertEq(result, '["ok",false]');
34
29
  },
35
30
  () => {
36
31
  const tokenList = tokenizeString('0.1');
37
32
  const obj = parse(tokenList);
38
33
  const result = stringify(obj);
39
- if (result !== '["ok",0.1]') {
40
- throw result;
41
- }
34
+ assertEq(result, '["ok",0.1]');
42
35
  },
43
36
  () => {
44
37
  const tokenList = tokenizeString('1.1e+2');
45
38
  const obj = parse(tokenList);
46
39
  const result = stringify(obj);
47
- if (result !== '["ok",110]') {
48
- throw result;
49
- }
40
+ assertEq(result, '["ok",110]');
50
41
  },
51
42
  () => {
52
43
  const tokenList = tokenizeString('"abc"');
53
44
  const obj = parse(tokenList);
54
45
  const result = stringify(obj);
55
- if (result !== '["ok","abc"]') {
56
- throw result;
57
- }
46
+ assertEq(result, '["ok","abc"]');
58
47
  },
59
48
  () => {
60
49
  const tokenList = tokenizeString('[]');
61
50
  const obj = parse(tokenList);
62
51
  const result = stringify(obj);
63
- if (result !== '["ok",[]]') {
64
- throw result;
65
- }
52
+ assertEq(result, '["ok",[]]');
66
53
  },
67
54
  () => {
68
55
  const tokenList = tokenizeString('[1]');
69
56
  const obj = parse(tokenList);
70
57
  const result = stringify(obj);
71
- if (result !== '["ok",[1]]') {
72
- throw result;
73
- }
58
+ assertEq(result, '["ok",[1]]');
74
59
  },
75
60
  () => {
76
61
  const tokenList = tokenizeString('[[]]');
77
62
  const obj = parse(tokenList);
78
63
  const result = stringify(obj);
79
- if (result !== '["ok",[[]]]') {
80
- throw result;
81
- }
64
+ assertEq(result, '["ok",[[]]]');
82
65
  },
83
66
  () => {
84
67
  const tokenList = tokenizeString('[0,[1,[2,[]]],3]');
85
68
  const obj = parse(tokenList);
86
69
  const result = stringify(obj);
87
- if (result !== '["ok",[0,[1,[2,[]]],3]]') {
88
- throw result;
89
- }
70
+ assertEq(result, '["ok",[0,[1,[2,[]]],3]]');
90
71
  },
91
72
  () => {
92
73
  const tokenList = tokenizeString('{}');
@@ -126,34 +107,26 @@ export const proof = {
126
107
  const tokenList = tokenizeString('');
127
108
  const obj = parse(tokenList);
128
109
  const result = stringify(obj);
129
- if (result !== '["error","unexpected end"]') {
130
- throw result;
131
- }
110
+ assertEq(result, '["error","unexpected end"]');
132
111
  },
133
112
  // Trailing commas are not valid JSON — strict parser rejects them.
134
113
  () => {
135
114
  const tokenList = tokenizeString('[1,]');
136
115
  const obj = parse(tokenList);
137
116
  const result = stringify(obj);
138
- if (result !== '["error","unexpected token"]') {
139
- throw result;
140
- }
117
+ assertEq(result, '["error","unexpected token"]');
141
118
  },
142
119
  () => {
143
120
  const tokenList = tokenizeString('{"a":1,}');
144
121
  const obj = parse(tokenList);
145
122
  const result = stringify(obj);
146
- if (result !== '["error","unexpected token"]') {
147
- throw result;
148
- }
123
+ assertEq(result, '["error","unexpected token"]');
149
124
  },
150
125
  () => {
151
126
  const tokenList = tokenizeString('"123');
152
127
  const obj = parse(tokenList);
153
128
  const result = stringify(obj);
154
- if (result !== '["error","unexpected token"]') {
155
- throw result;
156
- }
129
+ assertEq(result, '["error","unexpected token"]');
157
130
  },
158
131
  // A literal control character inside a string is not valid JSON (RFC
159
132
  // 8259 §7) even though the shared tokenizer would otherwise accept it.
@@ -161,193 +134,145 @@ export const proof = {
161
134
  const tokenList = tokenizeString('"\t"');
162
135
  const obj = parse(tokenList);
163
136
  const result = stringify(obj);
164
- if (result !== '["error","unexpected token"]') {
165
- throw result;
166
- }
137
+ assertEq(result, '["error","unexpected token"]');
167
138
  },
168
139
  () => {
169
140
  const tokenList = tokenizeString('{"a":"\t"}');
170
141
  const obj = parse(tokenList);
171
142
  const result = stringify(obj);
172
- if (result !== '["error","unexpected token"]') {
173
- throw result;
174
- }
143
+ assertEq(result, '["error","unexpected token"]');
175
144
  },
176
145
  () => {
177
146
  const tokenList = tokenizeString('[,]');
178
147
  const obj = parse(tokenList);
179
148
  const result = stringify(obj);
180
- if (result !== '["error","unexpected token"]') {
181
- throw result;
182
- }
149
+ assertEq(result, '["error","unexpected token"]');
183
150
  },
184
151
  () => {
185
152
  const tokenList = tokenizeString('[1 2]');
186
153
  const obj = parse(tokenList);
187
154
  const result = stringify(obj);
188
- if (result !== '["error","unexpected token"]') {
189
- throw result;
190
- }
155
+ assertEq(result, '["error","unexpected token"]');
191
156
  },
192
157
  () => {
193
158
  const tokenList = tokenizeString('[1,,2]');
194
159
  const obj = parse(tokenList);
195
160
  const result = stringify(obj);
196
- if (result !== '["error","unexpected token"]') {
197
- throw result;
198
- }
161
+ assertEq(result, '["error","unexpected token"]');
199
162
  },
200
163
  () => {
201
164
  const tokenList = tokenizeString('[]]');
202
165
  const obj = parse(tokenList);
203
166
  const result = stringify(obj);
204
- if (result !== '["error","unexpected token"]') {
205
- throw result;
206
- }
167
+ assertEq(result, '["error","unexpected token"]');
207
168
  },
208
169
  () => {
209
170
  const tokenList = tokenizeString('["a"');
210
171
  const obj = parse(tokenList);
211
172
  const result = stringify(obj);
212
- if (result !== '["error","unexpected end"]') {
213
- throw result;
214
- }
173
+ assertEq(result, '["error","unexpected end"]');
215
174
  },
216
175
  () => {
217
176
  const tokenList = tokenizeString('[,1]');
218
177
  const obj = parse(tokenList);
219
178
  const result = stringify(obj);
220
- if (result !== '["error","unexpected token"]') {
221
- throw result;
222
- }
179
+ assertEq(result, '["error","unexpected token"]');
223
180
  },
224
181
  () => {
225
182
  const tokenList = tokenizeString('[:]');
226
183
  const obj = parse(tokenList);
227
184
  const result = stringify(obj);
228
- if (result !== '["error","unexpected token"]') {
229
- throw result;
230
- }
185
+ assertEq(result, '["error","unexpected token"]');
231
186
  },
232
187
  () => {
233
188
  const tokenList = tokenizeString(']');
234
189
  const obj = parse(tokenList);
235
190
  const result = stringify(obj);
236
- if (result !== '["error","unexpected token"]') {
237
- throw result;
238
- }
191
+ assertEq(result, '["error","unexpected token"]');
239
192
  },
240
193
  () => {
241
194
  const tokenList = tokenizeString('{,}');
242
195
  const obj = parse(tokenList);
243
196
  const result = stringify(obj);
244
- if (result !== '["error","unexpected token"]') {
245
- throw result;
246
- }
197
+ assertEq(result, '["error","unexpected token"]');
247
198
  },
248
199
  () => {
249
200
  const tokenList = tokenizeString('{1:2}');
250
201
  const obj = parse(tokenList);
251
202
  const result = stringify(obj);
252
- if (result !== '["error","unexpected token"]') {
253
- throw result;
254
- }
203
+ assertEq(result, '["error","unexpected token"]');
255
204
  },
256
205
  () => {
257
206
  const tokenList = tokenizeString('{"1"2}');
258
207
  const obj = parse(tokenList);
259
208
  const result = stringify(obj);
260
- if (result !== '["error","unexpected token"]') {
261
- throw result;
262
- }
209
+ assertEq(result, '["error","unexpected token"]');
263
210
  },
264
211
  () => {
265
212
  const tokenList = tokenizeString('{"1"::2}');
266
213
  const obj = parse(tokenList);
267
214
  const result = stringify(obj);
268
- if (result !== '["error","unexpected token"]') {
269
- throw result;
270
- }
215
+ assertEq(result, '["error","unexpected token"]');
271
216
  },
272
217
  () => {
273
218
  const tokenList = tokenizeString('{"1":2,,"3":4');
274
219
  const obj = parse(tokenList);
275
220
  const result = stringify(obj);
276
- if (result !== '["error","unexpected token"]') {
277
- throw result;
278
- }
221
+ assertEq(result, '["error","unexpected token"]');
279
222
  },
280
223
  () => {
281
224
  const tokenList = tokenizeString('{}}');
282
225
  const obj = parse(tokenList);
283
226
  const result = stringify(obj);
284
- if (result !== '["error","unexpected token"]') {
285
- throw result;
286
- }
227
+ assertEq(result, '["error","unexpected token"]');
287
228
  },
288
229
  () => {
289
230
  const tokenList = tokenizeString('{"1":2');
290
231
  const obj = parse(tokenList);
291
232
  const result = stringify(obj);
292
- if (result !== '["error","unexpected end"]') {
293
- throw result;
294
- }
233
+ assertEq(result, '["error","unexpected end"]');
295
234
  },
296
235
  () => {
297
236
  const tokenList = tokenizeString('{,"1":2}');
298
237
  const obj = parse(tokenList);
299
238
  const result = stringify(obj);
300
- if (result !== '["error","unexpected token"]') {
301
- throw result;
302
- }
239
+ assertEq(result, '["error","unexpected token"]');
303
240
  },
304
241
  () => {
305
242
  const tokenList = tokenizeString('}');
306
243
  const obj = parse(tokenList);
307
244
  const result = stringify(obj);
308
- if (result !== '["error","unexpected token"]') {
309
- throw result;
310
- }
245
+ assertEq(result, '["error","unexpected token"]');
311
246
  },
312
247
  () => {
313
248
  const tokenList = tokenizeString('{"a":1 "b":2}');
314
249
  const obj = parse(tokenList);
315
250
  const result = stringify(obj);
316
- if (result !== '["error","unexpected token"]') {
317
- throw result;
318
- }
251
+ assertEq(result, '["error","unexpected token"]');
319
252
  },
320
253
  () => {
321
254
  const tokenList = tokenizeString('[{]}');
322
255
  const obj = parse(tokenList);
323
256
  const result = stringify(obj);
324
- if (result !== '["error","unexpected token"]') {
325
- throw result;
326
- }
257
+ assertEq(result, '["error","unexpected token"]');
327
258
  },
328
259
  () => {
329
260
  const tokenList = tokenizeString('{[}]');
330
261
  const obj = parse(tokenList);
331
262
  const result = stringify(obj);
332
- if (result !== '["error","unexpected token"]') {
333
- throw result;
334
- }
263
+ assertEq(result, '["error","unexpected token"]');
335
264
  },
336
265
  () => {
337
266
  const tokenList = tokenizeString('10-5');
338
267
  const obj = parse(tokenList);
339
268
  const result = stringify(obj);
340
- if (result !== '["error","unexpected token"]') {
341
- throw result;
342
- }
269
+ assertEq(result, '["error","unexpected token"]');
343
270
  },
344
271
  () => {
345
272
  const tokenList = tokenizeString('undefined');
346
273
  const obj = parse(tokenList);
347
274
  const result = stringify(obj);
348
- if (result !== '["error","unexpected token"]') {
349
- throw result;
350
- }
275
+ assertEq(result, '["error","unexpected token"]');
351
276
  },
352
277
  ]
353
278
  };
@@ -7,7 +7,7 @@
7
7
  * value to a response value (or `null` for a notification) and performs no I/O.
8
8
  *
9
9
  * Out of scope here (follow-ups): transports — stdio / HTTP framing — over
10
- * `fs/effects/node`, and concrete method sets such as MCP (i665-mcp), which layer
10
+ * `fjs/effects/node`, and concrete method sets such as MCP (i665-mcp), which layer
11
11
  * on top of `dispatch`.
12
12
  *
13
13
  * https://www.jsonrpc.org/specification
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Converts an rtti schema to a JSON Schema (draft 2020-12) object.
3
3
  *
4
- * Mirrors the visitor structure of `fs/types/rtti/ts/module.f.ts` (`printer` / `toTs`),
5
- * but emits a JSON Schema object instead of a TypeScript type string.
4
+ * Driven by `fjs/types/rtti/common/module.f.ts`'s `visit`, the same shared
5
+ * `Type`-ADT walker used by `validate` and `parse`.
6
6
  *
7
7
  * @module
8
8
  */
@@ -1,12 +1,13 @@
1
1
  /**
2
2
  * Converts an rtti schema to a JSON Schema (draft 2020-12) object.
3
3
  *
4
- * Mirrors the visitor structure of `fs/types/rtti/ts/module.f.ts` (`printer` / `toTs`),
5
- * but emits a JSON Schema object instead of a TypeScript type string.
4
+ * Driven by `fjs/types/rtti/common/module.f.ts`'s `visit`, the same shared
5
+ * `Type`-ADT walker used by `validate` and `parse`.
6
6
  *
7
7
  * @module
8
8
  */
9
9
  import { array, option, or, record, string } from '../../../types/rtti/module.f.js';
10
+ import { visit } from '../../../types/rtti/common/module.f.js';
10
11
  import { unknown as jsonUnknown } from '../module.f.js';
11
12
  const unknownThunk = () => ['const', unknownConst];
12
13
  /** rtti schema for a JSON Schema (draft 2020-12) document. */
@@ -45,24 +46,10 @@ const stripUndefined = (rtti) => {
45
46
  const rest = r.flatMap(t => t !== undefined ? [t] : []);
46
47
  return rest.length === 1 ? rest[0] : or(...rest);
47
48
  };
48
- const constToJsonSchema = (rtti) => {
49
- if (typeof rtti === 'undefined') {
50
- return { not: {} };
51
- }
52
- if (typeof rtti !== 'object' || rtti === null) {
53
- // bigint consts are represented as numbers (lossy for |value| > MAX_SAFE_INTEGER)
54
- return { const: typeof rtti === 'bigint' ? Number(rtti) : rtti };
55
- }
56
- if (rtti instanceof Array) {
57
- return {
58
- type: 'array',
59
- prefixItems: rtti.map(toJsonSchema),
60
- items: false,
61
- };
62
- }
63
- // Struct: keys not admitting undefined go into `required`; optional keys have
64
- // undefined stripped from their property schema. additionalProperties is omitted
65
- // (lenient), matching rtti's open-struct validation semantics.
49
+ // Struct: keys not admitting undefined go into `required`; optional keys have
50
+ // undefined stripped from their property schema. additionalProperties is omitted
51
+ // (lenient), matching rtti's open-struct validation semantics.
52
+ const structSchema = (rtti) => {
66
53
  const ents = Object.entries(rtti);
67
54
  const properties = Object.fromEntries(ents.map(([k, v]) => [k, toJsonSchema(stripUndefined(v))]));
68
55
  const required = ents
@@ -74,6 +61,21 @@ const constToJsonSchema = (rtti) => {
74
61
  ...(required.length > 0 ? { required } : {}),
75
62
  };
76
63
  };
64
+ const constPrimitiveSchema = (rtti) => rtti === undefined
65
+ ? { not: {} }
66
+ // bigint consts are represented as numbers (lossy for |value| > MAX_SAFE_INTEGER)
67
+ : { const: typeof rtti === 'bigint' ? Number(rtti) : rtti };
68
+ const visitor = {
69
+ tuple: (t) => ({ type: 'array', prefixItems: t.map(toJsonSchema), items: false }),
70
+ struct: structSchema,
71
+ array: item => ({ type: 'array', items: toJsonSchema(item) }),
72
+ record: item => ({ type: 'object', additionalProperties: toJsonSchema(item) }),
73
+ or: variants => ({ anyOf: variants.map(toJsonSchema) }),
74
+ constPrimitive: constPrimitiveSchema,
75
+ // bigint is not representable in JSON Schema; 'integer' is the closest approximation
76
+ primitive0: tag => ({ type: tag === 'bigint' ? 'integer' : tag }),
77
+ unknown: () => ({}),
78
+ };
77
79
  /**
78
80
  * Converts an rtti `Type` to a JSON Schema (draft 2020-12) object.
79
81
  *
@@ -91,22 +93,4 @@ const constToJsonSchema = (rtti) => {
91
93
  * | `record(T)` | `{ "type": "object", "additionalProperties": …T… }` |
92
94
  * | `or(...types)` | `{ "anyOf": […each…] }` |
93
95
  */
94
- export const toJsonSchema = (rtti) => {
95
- if (typeof rtti !== 'function') {
96
- return constToJsonSchema(rtti);
97
- }
98
- const [tag, ...rest] = rtti();
99
- switch (tag) {
100
- case 'const': return constToJsonSchema(rest[0]);
101
- case 'boolean': return { type: 'boolean' };
102
- case 'number': return { type: 'number' };
103
- case 'string': return { type: 'string' };
104
- // bigint is not representable in JSON Schema; 'integer' is the closest approximation
105
- case 'bigint': return { type: 'integer' };
106
- case 'unknown': return {};
107
- case 'array': return { type: 'array', items: toJsonSchema(rest[0]) };
108
- case 'record': return { type: 'object', additionalProperties: toJsonSchema(rest[0]) };
109
- case 'or': return { anyOf: rest.map(toJsonSchema) };
110
- default: return {};
111
- }
112
- };
96
+ export const toJsonSchema = visit(visitor);
@@ -1,13 +1,12 @@
1
1
  import { boolean, number, string, bigint, unknown, array, record, or, option } from '../../../types/rtti/module.f.js';
2
2
  import { stringify } from '../module.f.js';
3
3
  import { toJsonSchema, unknown as schemaUnknown } from './module.f.js';
4
+ import { assert, assertEq } from '../../../asserts/module.f.js';
4
5
  const serialize = (v) => stringify(e => e)(v);
5
6
  const eq = (rtti, expected) => () => {
6
7
  const result = serialize(toJsonSchema(rtti));
7
8
  const exp = serialize(expected);
8
- if (result !== exp) {
9
- throw [result, exp];
10
- }
9
+ assertEq(result, exp, [result, exp]);
11
10
  };
12
11
  export const proof = {
13
12
  tag0: {
@@ -62,9 +61,7 @@ export const proof = {
62
61
  },
63
62
  schemaUnknownTag: () => {
64
63
  const r = schemaUnknown();
65
- if (r[0] !== 'const') {
66
- throw r[0];
67
- }
64
+ assert(r[0] === 'const');
68
65
  },
69
66
  nested: {
70
67
  arrayOfRecords: eq(array(record(boolean)), {