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
@@ -2,6 +2,7 @@
2
2
  * @import { JsToken, JsTokenWithMetadata } from './types.ts'
3
3
  */
4
4
  export declare const proof: {
5
+ mergeTrivia: (() => void)[];
5
6
  djs: (() => void)[];
6
7
  operators: (() => void)[];
7
8
  ws: (() => void)[];
@@ -2,7 +2,8 @@
2
2
  * @import { JsToken, JsTokenWithMetadata } from './types.ts'
3
3
  */
4
4
 
5
- import { tokenize } from './module.f.mjs'
5
+ import { assertEq } from '../../asserts/module.f.mjs'
6
+ import { mergeTrivia, tokenize } from './module.f.mjs'
6
7
  import { map, toArray } from '../../types/list/module.f.mjs'
7
8
  import { stringifyAsTree } from '../../djs/serializer/module.f.mjs'
8
9
  import { sort } from '../../types/object/module.f.mjs'
@@ -20,6 +21,14 @@ const stringify = stringifyAsTree(sort)
20
21
  const withoutMetada = tokenWithMetada => tokenWithMetada.token
21
22
 
22
23
  export const proof = {
24
+ // The coalescing rule both tokenizers read. All four combinations, since
25
+ // the whole point of exporting it is that neither side re-derives them.
26
+ mergeTrivia: [
27
+ () => assertEq(mergeTrivia('ws', 'ws'), 'ws'),
28
+ () => assertEq(mergeTrivia('ws', 'nl'), 'nl'),
29
+ () => assertEq(mergeTrivia('nl', 'ws'), 'nl'),
30
+ () => assertEq(mergeTrivia('nl', 'nl'), 'nl'),
31
+ ],
23
32
  djs: [
24
33
  () => {
25
34
  const result = stringify(tokenizeString(''))
@@ -164,16 +173,37 @@ export const proof = {
164
173
  },
165
174
  () => {
166
175
  const result = stringify(tokenizeString('0'))
167
- if (result !== '[{"bf":[0n,0],"kind":"number","value":"0"},{"kind":"eof"}]') { throw result }
176
+ if (result !== '[{"kind":"number","value":"0"},{"kind":"eof"}]') { throw result }
168
177
  },
169
178
  () => {
170
179
  const result = stringify(tokenizeString('[0]'))
171
- if (result !== '[{"kind":"["},{"bf":[0n,0],"kind":"number","value":"0"},{"kind":"]"},{"kind":"eof"}]') { throw result }
180
+ if (result !== '[{"kind":"["},{"kind":"number","value":"0"},{"kind":"]"},{"kind":"eof"}]') { throw result }
172
181
  },
173
182
  () => {
174
183
  const result = stringify(tokenizeString('00'))
175
184
  if (result !== '[{"kind":"error","message":"invalid number"},{"kind":"eof"}]') { throw result }
176
185
  },
186
+ () => {
187
+ // A leading zero followed by another digit (not '0' itself, so
188
+ // digit19ToToken's own '0'-state arm, distinct from '00' above).
189
+ const result = stringify(tokenizeString('01'))
190
+ if (result !== '[{"kind":"error","message":"invalid number"},{"kind":"eof"}]') { throw result }
191
+ },
192
+ () => {
193
+ // 'e' right after a bare '.' (no fractional digits yet).
194
+ const result = stringify(tokenizeString('1.e5'))
195
+ if (result !== '[{"kind":"error","message":"invalid number"},{"kind":"eof"}]') { throw result }
196
+ },
197
+ () => {
198
+ // '+' after the exponent's digits have already started. A trailing
199
+ // digit (not just eof) matters here: if this branch were merged
200
+ // into the accepting 'e' arm, the '+' would restart the exponent
201
+ // and the trailing '3' would complete a *valid* number instead —
202
+ // 'invalid number' alone doesn't distinguish that from eof cutting
203
+ // the (still invalid) token short.
204
+ const result = stringify(tokenizeString('1e5+3'))
205
+ if (result !== '[{"kind":"error","message":"invalid number"},{"kind":"eof"}]') { throw result }
206
+ },
177
207
  () => {
178
208
  // terminal char after invalidNumber state (covers invalidNumberStateOp terminal branch)
179
209
  const result = stringify(tokenizeString('00,'))
@@ -185,23 +215,23 @@ export const proof = {
185
215
  },
186
216
  () => {
187
217
  const result = stringify(tokenizeString('123456789012345678901234567890'))
188
- if (result !== '[{"bf":[123456789012345678901234567890n,0],"kind":"number","value":"123456789012345678901234567890"},{"kind":"eof"}]') { throw result }
218
+ if (result !== '[{"kind":"number","value":"123456789012345678901234567890"},{"kind":"eof"}]') { throw result }
189
219
  },
190
220
  () => {
191
221
  const result = stringify(tokenizeString('{90}'))
192
- if (result !== '[{"kind":"{"},{"bf":[90n,0],"kind":"number","value":"90"},{"kind":"}"},{"kind":"eof"}]') { throw result }
222
+ if (result !== '[{"kind":"{"},{"kind":"number","value":"90"},{"kind":"}"},{"kind":"eof"}]') { throw result }
193
223
  },
194
224
  () => {
195
225
  const result = stringify(tokenizeString('1 2'))
196
- if (result !== '[{"bf":[1n,0],"kind":"number","value":"1"},{"kind":"ws"},{"bf":[2n,0],"kind":"number","value":"2"},{"kind":"eof"}]') { throw result }
226
+ if (result !== '[{"kind":"number","value":"1"},{"kind":"ws"},{"kind":"number","value":"2"},{"kind":"eof"}]') { throw result }
197
227
  },
198
228
  () => {
199
229
  const result = stringify(tokenizeString('0. 2'))
200
- if (result !== '[{"kind":"error","message":"invalid number"},{"kind":"ws"},{"bf":[2n,0],"kind":"number","value":"2"},{"kind":"eof"}]') { throw result }
230
+ if (result !== '[{"kind":"error","message":"invalid number"},{"kind":"ws"},{"kind":"number","value":"2"},{"kind":"eof"}]') { throw result }
201
231
  },
202
232
  () => {
203
233
  const result = stringify(tokenizeString('10-0'))
204
- if (result !== '[{"bf":[10n,0],"kind":"number","value":"10"},{"kind":"-"},{"bf":[0n,0],"kind":"number","value":"0"},{"kind":"eof"}]') { throw result }
234
+ if (result !== '[{"kind":"number","value":"10"},{"kind":"-"},{"kind":"number","value":"0"},{"kind":"eof"}]') { throw result }
205
235
  },
206
236
  () => {
207
237
  const result = stringify(tokenizeString('9a:'))
@@ -209,11 +239,11 @@ export const proof = {
209
239
  },
210
240
  () => {
211
241
  const result = stringify(tokenizeString('-10'))
212
- if (result !== '[{"kind":"-"},{"bf":[10n,0],"kind":"number","value":"10"},{"kind":"eof"}]') { throw result }
242
+ if (result !== '[{"kind":"-"},{"kind":"number","value":"10"},{"kind":"eof"}]') { throw result }
213
243
  },
214
244
  () => {
215
245
  const result = stringify(tokenizeString('-0'))
216
- if (result !== '[{"kind":"-"},{"bf":[0n,0],"kind":"number","value":"0"},{"kind":"eof"}]') { throw result }
246
+ if (result !== '[{"kind":"-"},{"kind":"number","value":"0"},{"kind":"eof"}]') { throw result }
217
247
  },
218
248
  () => {
219
249
  const result = stringify(tokenizeString('-00'))
@@ -221,15 +251,15 @@ export const proof = {
221
251
  },
222
252
  () => {
223
253
  const result = stringify(tokenizeString('-.123'))
224
- if (result !== '[{"kind":"-"},{"kind":"."},{"bf":[123n,0],"kind":"number","value":"123"},{"kind":"eof"}]') { throw result }
254
+ if (result !== '[{"kind":"-"},{"kind":"."},{"kind":"number","value":"123"},{"kind":"eof"}]') { throw result }
225
255
  },
226
256
  () => {
227
257
  const result = stringify(tokenizeString('0.01'))
228
- if (result !== '[{"bf":[1n,-2],"kind":"number","value":"0.01"},{"kind":"eof"}]') { throw result }
258
+ if (result !== '[{"kind":"number","value":"0.01"},{"kind":"eof"}]') { throw result }
229
259
  },
230
260
  () => {
231
261
  const result = stringify(tokenizeString('-0.9'))
232
- if (result !== '[{"kind":"-"},{"bf":[9n,-1],"kind":"number","value":"0.9"},{"kind":"eof"}]') { throw result }
262
+ if (result !== '[{"kind":"-"},{"kind":"number","value":"0.9"},{"kind":"eof"}]') { throw result }
233
263
  },
234
264
  () => {
235
265
  const result = stringify(tokenizeString('-0.'))
@@ -241,11 +271,11 @@ export const proof = {
241
271
  },
242
272
  () => {
243
273
  const result = stringify(tokenizeString('12.34'))
244
- if (result !== '[{"bf":[1234n,-2],"kind":"number","value":"12.34"},{"kind":"eof"}]') { throw result }
274
+ if (result !== '[{"kind":"number","value":"12.34"},{"kind":"eof"}]') { throw result }
245
275
  },
246
276
  () => {
247
277
  const result = stringify(tokenizeString('-12.00'))
248
- if (result !== '[{"kind":"-"},{"bf":[1200n,-2],"kind":"number","value":"12.00"},{"kind":"eof"}]') { throw result }
278
+ if (result !== '[{"kind":"-"},{"kind":"number","value":"12.00"},{"kind":"eof"}]') { throw result }
249
279
  },
250
280
  () => {
251
281
  const result = stringify(tokenizeString('-12.'))
@@ -262,27 +292,27 @@ export const proof = {
262
292
  },
263
293
  () => {
264
294
  const result = stringify(tokenizeString('0e1'))
265
- if (result !== '[{"bf":[0n,1],"kind":"number","value":"0e1"},{"kind":"eof"}]') { throw result }
295
+ if (result !== '[{"kind":"number","value":"0e1"},{"kind":"eof"}]') { throw result }
266
296
  },
267
297
  () => {
268
298
  const result = stringify(tokenizeString('0e+2'))
269
- if (result !== '[{"bf":[0n,2],"kind":"number","value":"0e+2"},{"kind":"eof"}]') { throw result }
299
+ if (result !== '[{"kind":"number","value":"0e+2"},{"kind":"eof"}]') { throw result }
270
300
  },
271
301
  () => {
272
302
  const result = stringify(tokenizeString('0e-0'))
273
- if (result !== '[{"bf":[0n,0],"kind":"number","value":"0e-0"},{"kind":"eof"}]') { throw result }
303
+ if (result !== '[{"kind":"number","value":"0e-0"},{"kind":"eof"}]') { throw result }
274
304
  },
275
305
  () => {
276
306
  const result = stringify(tokenizeString('12e0000'))
277
- if (result !== '[{"bf":[12n,0],"kind":"number","value":"12e0000"},{"kind":"eof"}]') { throw result }
307
+ if (result !== '[{"kind":"number","value":"12e0000"},{"kind":"eof"}]') { throw result }
278
308
  },
279
309
  () => {
280
310
  const result = stringify(tokenizeString('-12e-0001'))
281
- if (result !== '[{"kind":"-"},{"bf":[12n,-1],"kind":"number","value":"12e-0001"},{"kind":"eof"}]') { throw result }
311
+ if (result !== '[{"kind":"-"},{"kind":"number","value":"12e-0001"},{"kind":"eof"}]') { throw result }
282
312
  },
283
313
  () => {
284
314
  const result = stringify(tokenizeString('-12.34e1234'))
285
- if (result !== '[{"kind":"-"},{"bf":[1234n,1232],"kind":"number","value":"12.34e1234"},{"kind":"eof"}]') { throw result }
315
+ if (result !== '[{"kind":"-"},{"kind":"number","value":"12.34e1234"},{"kind":"eof"}]') { throw result }
286
316
  },
287
317
  () => {
288
318
  const result = stringify(tokenizeString('0e'))
@@ -302,11 +332,11 @@ export const proof = {
302
332
  },
303
333
  () => {
304
334
  const result = stringify(tokenizeString('123 _123'))
305
- if (result !== '[{"bf":[123n,0],"kind":"number","value":"123"},{"kind":"ws"},{"kind":"id","value":"_123"},{"kind":"eof"}]') { throw result }
335
+ if (result !== '[{"kind":"number","value":"123"},{"kind":"ws"},{"kind":"id","value":"_123"},{"kind":"eof"}]') { throw result }
306
336
  },
307
337
  () => {
308
338
  const result = stringify(tokenizeString('123 $123'))
309
- if (result !== '[{"bf":[123n,0],"kind":"number","value":"123"},{"kind":"ws"},{"kind":"id","value":"$123"},{"kind":"eof"}]') { throw result }
339
+ if (result !== '[{"kind":"number","value":"123"},{"kind":"ws"},{"kind":"id","value":"$123"},{"kind":"eof"}]') { throw result }
310
340
  },
311
341
  () => {
312
342
  const result = stringify(tokenizeString('123_123'))
@@ -361,7 +391,7 @@ export const proof = {
361
391
  },
362
392
  () => {
363
393
  const result = stringify(tokenizeString('1*2'))
364
- if (result !== '[{"bf":[1n,0],"kind":"number","value":"1"},{"kind":"*"},{"bf":[2n,0],"kind":"number","value":"2"},{"kind":"eof"}]') { throw result }
394
+ if (result !== '[{"kind":"number","value":"1"},{"kind":"*"},{"kind":"number","value":"2"},{"kind":"eof"}]') { throw result }
365
395
  },
366
396
  () => {
367
397
  const result = stringify(tokenizeString('( )'))
@@ -5,15 +5,25 @@
5
5
  */
6
6
  import type { RangeMapArray } from '../../types/range_map/types.ts';
7
7
  import type { List } from '../../types/list/types.ts';
8
- import type { BigFloat } from '../../types/bigfloat/types.ts';
8
+ import type { keywords } from '../keywords/module.f.mjs';
9
9
  export type StringToken = {
10
10
  readonly kind: 'string';
11
11
  readonly value: string;
12
12
  };
13
+ /**
14
+ * A numeric literal, kept as the exact source lexeme.
15
+ *
16
+ * `value` is the canonical lossless numeric source: the tokenizer never
17
+ * narrows it to a runtime numeric representation, so a syntactically valid
18
+ * literal reaches its consumer whatever its magnitude — a coefficient beyond
19
+ * the runtime's `bigint` limit and an exponent beyond `number` precision alike.
20
+ * Each consumer applies its own numeric policy to `value`; see
21
+ * [`fjs/media/json/number`](../../media/json/number/module.f.mjs) for the
22
+ * bounded lexical helpers that read it without narrowing.
23
+ */
13
24
  export type NumberToken = {
14
25
  readonly kind: 'number';
15
26
  readonly value: string;
16
- readonly bf: BigFloat;
17
27
  };
18
28
  export type BigIntToken = {
19
29
  readonly kind: 'bigint';
@@ -23,6 +33,12 @@ export type ErrorToken = {
23
33
  readonly kind: 'error';
24
34
  message: _ErrorMessage;
25
35
  };
36
+ /**
37
+ * The two trivia kinds. A maximal run of whitespace and newlines collapses to
38
+ * one token, and the run is `'nl'` if it contains any newline — see
39
+ * `mergeTrivia` in `./module.f.mjs`, which owns that rule.
40
+ */
41
+ export type TriviaKind = 'ws' | 'nl';
26
42
  export type WhitespaceToken = {
27
43
  readonly kind: 'ws';
28
44
  };
@@ -45,19 +61,15 @@ export type _NullToken = {
45
61
  export type _UndefinedToken = {
46
62
  readonly kind: 'undefined';
47
63
  };
48
- /** @internal */
64
+ /**
65
+ * A keyword token, its kind drawn from the one source of truth for
66
+ * JavaScript keywords, `fjs/js/keywords` — minus the literal keywords
67
+ * (`true`/`false`/`null`/`undefined`), which have their own token types.
68
+ *
69
+ * @internal
70
+ */
49
71
  export type _KeywordToken = {
50
- readonly kind: 'arguments' | 'await' | 'break' | 'case' | 'catch' | 'class' | 'const' | 'continue';
51
- } | {
52
- readonly kind: 'debugger' | 'default' | 'delete' | 'do' | 'else' | 'enum' | 'eval' | 'export';
53
- } | {
54
- readonly kind: 'extends' | 'finally' | 'for' | 'function' | 'if' | 'implements' | 'import' | 'in';
55
- } | {
56
- readonly kind: 'instanceof' | 'interface' | 'let' | 'new' | 'package' | 'private' | 'protected' | 'public';
57
- } | {
58
- readonly kind: 'return' | 'static' | 'super' | 'switch' | 'this' | 'throw' | 'try' | 'typeof';
59
- } | {
60
- readonly kind: 'var' | 'void' | 'while' | 'with' | 'yield';
72
+ readonly kind: Exclude<typeof keywords[number], 'true' | 'false' | 'null' | 'undefined'>;
61
73
  };
62
74
  export type IdToken = {
63
75
  readonly kind: 'id';
@@ -158,20 +170,17 @@ export type _ParseUnicodeCharState = {
158
170
  readonly unicode: number;
159
171
  readonly hexIndex: number;
160
172
  };
161
- /** @internal */
173
+ /**
174
+ * Numeric scanning state. It accumulates the lexeme only: no coefficient or
175
+ * exponent is materialized while scanning, so digit counts are bounded by the
176
+ * input rather than by any runtime numeric limit.
177
+ *
178
+ * @internal
179
+ */
162
180
  export type _ParseNumberState = {
163
181
  readonly kind: 'number';
164
182
  readonly numberKind: '0' | 'int' | '.' | 'fractional' | 'e' | 'e+' | 'e-' | 'expDigits' | 'bigint';
165
183
  readonly value: string;
166
- readonly b: _ParseNumberBuffer;
167
- };
168
- /** @internal */
169
- export type _ParseNumberBuffer = {
170
- readonly s: -1n | 1n;
171
- readonly m: bigint;
172
- readonly f: number;
173
- readonly es: -1 | 1;
174
- readonly e: number;
175
184
  };
176
185
  /** @internal */
177
186
  export type _InvalidNumberState = {
@@ -101,17 +101,12 @@
101
101
  *
102
102
  * @module
103
103
  *
104
- * @import { Effect } from '../../effects/types.ts'
105
104
  * @import { MemOp } from '../../effects/memory/types.ts'
106
105
  * @import { Vec } from '../../types/bit_vec/types.ts'
107
- * @import { Ok } from '../../types/result/types.ts'
108
- * @import { ToolEntry, ToolsCallResult } from '../../protocol/mcp/types.ts'
106
+ * @import { ToolEntry } from '../../protocol/mcp/types.ts'
109
107
  * @import { FileCasOperation } from '../../cas/types.ts'
110
108
  * @import { Cache } from '../../cas/evo/types.ts'
111
109
  * @import { Key } from '../../effects/memory/types.ts'
112
- * @import { Ts } from '../../types/rtti/ts/types.ts'
113
- * @import { List } from '../../effects/list/types.ts'
114
- * @import { IoResult } from '../../effects/node/types.ts'
115
110
  */
116
111
  import type { MemOp } from '../../effects/memory/types.ts';
117
112
  import type { ToolEntry } from '../../protocol/mcp/types.ts';
@@ -101,39 +101,38 @@
101
101
  *
102
102
  * @module
103
103
  *
104
- * @import { Effect } from '../../effects/types.ts'
105
104
  * @import { MemOp } from '../../effects/memory/types.ts'
106
105
  * @import { Vec } from '../../types/bit_vec/types.ts'
107
- * @import { Ok } from '../../types/result/types.ts'
108
- * @import { ToolEntry, ToolsCallResult } from '../../protocol/mcp/types.ts'
106
+ * @import { ToolEntry } from '../../protocol/mcp/types.ts'
109
107
  * @import { FileCasOperation } from '../../cas/types.ts'
110
108
  * @import { Cache } from '../../cas/evo/types.ts'
111
109
  * @import { Key } from '../../effects/memory/types.ts'
112
- * @import { Ts } from '../../types/rtti/ts/types.ts'
113
- * @import { List } from '../../effects/list/types.ts'
114
- * @import { IoResult } from '../../effects/node/types.ts'
115
110
  */
116
111
 
117
112
  import { string, option, or, boolean } from '../../types/rtti/module.f.mjs'
118
113
  import { stringify } from '../../media/json/module.f.mjs'
119
- import { pure, step } from '../../effects/module.f.mjs'
114
+ import { pureOk, resultStep } from '../../effects/module.f.mjs'
120
115
  import { cBase32ToVec, vecToCBase32 } from '../../basen/cbase32/module.f.mjs'
121
116
  import { decode as base64Decode, encode as base64Encode } from '../../basen/base64/module.f.mjs'
122
117
  import { tryUtf8 } from '../../text/module.f.mjs'
123
118
  import { detectStream } from '../../media/type/module.f.mjs'
124
119
  import { detect } from '../../media/module.f.mjs'
125
120
  import { revisionDialect } from '../../media/revision/module.f.mjs'
121
+ import { lockDialect } from '../../media/lock/module.f.mjs'
122
+ import { noteDialect } from '../../media/note/module.f.mjs'
126
123
  import { maxLengthBytes } from '../../types/bit_vec/module.f.mjs'
127
124
  import { ok } from '../../types/result/module.f.mjs'
128
125
  import {
129
126
  toolEntry, errorResult, okResult,
130
127
  } from '../../protocol/mcp/module.f.mjs'
131
128
  import { collectRead, fileCas } from '../../cas/module.f.mjs'
129
+ import { errorSummary } from '../../effects/node/module.f.mjs'
132
130
  import { fromVec } from '../../text/utf8/module.f.mjs'
133
131
  import { identity } from '../../types/function/module.f.mjs'
134
132
  import { sha256 } from '../../crypto/sha2/module.f.mjs'
135
133
  import { nonEmpty, empty as elEmpty } from '../../effects/list/module.f.mjs'
136
134
  import { syncRevision } from '../../cas/evo/module.f.mjs'
135
+ import { assertNotNullish } from '../../asserts/module.f.mjs'
137
136
 
138
137
  // ── Argument schemas (declared once, used for both inputSchema and validate) ─────
139
138
 
@@ -156,8 +155,13 @@ export const casListArgs = /** @type {const} */ ({})
156
155
 
157
156
  const toJson = stringify(identity)
158
157
 
159
- /** The dialect-aware classifier, bound to the dialects this server recognizes. */
160
- const detectDialect = detect([revisionDialect])
158
+ /**
159
+ * The dialect-aware classifier, bound to the dialects this server recognizes:
160
+ * the revision format, the shared lock maps revisions reference
161
+ * (`fjs/media/lock`), and notes (`fjs/media/note`), so `cas_get` reports each
162
+ * under its own media type instead of `text/plain`.
163
+ */
164
+ const detectDialect = detect([revisionDialect, lockDialect, noteDialect])
161
165
 
162
166
  /** @typedef {{
163
167
  * readonly length: number
@@ -184,46 +188,43 @@ export const casToolRegistry = home => cacheKey => {
184
188
  'cas_add',
185
189
  'Store content and return its hash (cBase32). Pass type:"base64" for binary; omit or pass type:"text" for UTF-8 text (default). Inline content is capped at 128 KiB (131072 bytes) — larger content is rejected. For larger content, store the file with the `cas` CLI instead: run `npx functionalscript cas add <path>` yourself if you have shell access, or give the user that exact command to run — it prints the resulting hash on stdout.',
186
190
  casAddArgs,
187
- /** @type {(args: Ts<typeof casAddArgs>) => Effect<FileCasOperation | MemOp, ToolsCallResult>} */
188
- (({ type, content }) => {
191
+ ({ type, content }) => {
189
192
  // type:'text' or 'base64' — resolve content to Vec, store via c.write()
190
193
  /** @type {Vec | null} */
191
194
  let x = type === 'base64'
192
195
  ? base64Decode(content)
193
196
  : tryUtf8(content)
194
197
  return x === null
195
- ? pure(errorResult('too large or malformed — for large content, run `npx functionalscript cas add <path>` (or have the user run it) instead'))
198
+ ? pureOk(errorResult('too large or malformed — for large content, run `npx functionalscript cas add <path>` (or have the user run it) instead'))
196
199
  // The resolved content fits in one chunk; feed it as a single-item stream.
197
- : step(
198
- c.write(nonEmpty(ok(x), /** @type {List<never, Ok<Vec>>} */ (elEmpty()))),
199
- /** @type {(writeResult: IoResult<Vec>) => Effect<MemOp, ToolsCallResult>} */
200
- (writeResult => {
201
- if (writeResult[0] === 'error') { return pure(errorResult('write')) }
200
+ : resultStep(
201
+ c.write(nonEmpty(x, elEmpty())),
202
+ writeResult => {
203
+ if (writeResult[0] === 'error') { return pureOk(errorResult('write')) }
202
204
  const hash = writeResult[1]
203
- return step(
204
- syncRevision(cacheKey)(hash)(/** @type {Vec} */ (x)),
205
- () => pure(okResult(vecToCBase32(hash)))
205
+ return resultStep(
206
+ syncRevision(cacheKey)(hash)(x),
207
+ () => pureOk(okResult(vecToCBase32(hash)))
206
208
  )
207
- }),
209
+ },
208
210
  )
209
- }),
211
+ },
210
212
  ),
211
213
  toolEntry(
212
214
  'cas_get',
213
215
  'Inspect a blob by hash. Always returns JSON {length,mimeType,type[,uri]} where type is "text" or "base64". Pass content:true to also include the inline payload as text (type:"text") or blob (type:"base64"), but content is capped at 128 KiB (131072 bytes) — a larger blob is rejected with an error. To download a blob, prefer the uri field returned in the result instead of requesting inline content.',
214
216
  casGetArgs,
215
- /** @type {(args: Ts<typeof casGetArgs>) => Effect<FileCasOperation, ToolsCallResult>} */
216
- (r => {
217
+ r => {
217
218
  const key = cBase32ToVec(r.hash)
218
219
  if (key === null) {
219
- return pure(errorResult(`invalid cBase32 hash: ${r.hash}`))
220
+ return pureOk(errorResult(`invalid cBase32 hash: ${r.hash}`))
220
221
  }
221
222
  const uri = c.url(key)
222
- return step(
223
+ return resultStep(
223
224
  detectStream(c.read(key)),
224
225
  ([tag, detected]) => {
225
226
  if (tag === 'error') {
226
- return pure(errorResult(`no such hash: ${r.hash}`))
227
+ return pureOk(errorResult(`no such hash: ${r.hash}`))
227
228
  }
228
229
  const { length, mime_type: mimeType, type } = detected
229
230
  /** @type {_Meta} */
@@ -233,17 +234,17 @@ export const casToolRegistry = home => cacheKey => {
233
234
  // only attempt the extra bounded read when it stands a chance
234
235
  // (whole-blob text within the same cap `content: true` allows).
235
236
  if (type !== 'text' || length > maxLengthBytes) {
236
- return pure(okResult(toJson(meta)))
237
+ return pureOk(okResult(toJson(meta)))
237
238
  }
238
- return step(
239
+ return resultStep(
239
240
  collectRead(c.read(key)),
240
241
  ([collectTag, value]) => {
241
242
  // Already known to fit from the streaming pass above, so an
242
243
  // error here means the hash vanished between reads; fall back
243
244
  // to the streaming verdict rather than fail the whole request.
244
- if (collectTag === 'error') { return pure(okResult(toJson(meta))) }
245
+ if (collectTag === 'error') { return pureOk(okResult(toJson(meta))) }
245
246
  const refined = detectDialect(value)
246
- return pure(okResult(toJson({ ...meta, mimeType: refined.mime_type })))
247
+ return pureOk(okResult(toJson({ ...meta, mimeType: refined.mime_type })))
247
248
  }
248
249
  )
249
250
  }
@@ -252,14 +253,14 @@ export const casToolRegistry = home => cacheKey => {
252
253
  // size and point at the size-independent alternatives instead of
253
254
  // misreporting an existing blob as `no such hash`.
254
255
  if (length > maxLengthBytes) {
255
- return pure(errorResult(
256
+ return pureOk(errorResult(
256
257
  `blob too large to fetch inline (${length} bytes, limit ${maxLengthBytes} bytes); use the uri field (${uri}) or omit content for metadata`))
257
258
  }
258
- return step(
259
+ return resultStep(
259
260
  collectRead(c.read(key)),
260
261
  ([collectTag, value]) => {
261
262
  if (collectTag === 'error') {
262
- return pure(errorResult(`no such hash: ${r.hash}`))
263
+ return pureOk(errorResult(`no such hash: ${r.hash}`))
263
264
  }
264
265
  // Re-derive the verdict from the now-materialized blob so a
265
266
  // dialect match — only decidable with the whole parsed JSON in
@@ -269,34 +270,37 @@ export const casToolRegistry = home => cacheKey => {
269
270
  /** @type {_Meta} */
270
271
  const refinedMeta = { length: Number(refined.length), mimeType: refined.mime_type, type: refined.type, uri }
271
272
  if (refined.type === 'text') {
272
- // `type: 'text'` means the detector validated `value` as UTF-8,
273
- // so `fromVec` is non-null here; guard defensively regardless.
274
- const str = fromVec(value)
275
- return pure(str === null
276
- ? errorResult(`content is not byte-aligned: ${r.hash}`)
277
- : okResult(toJson({ ...refinedMeta, text: str }))
278
- )
273
+ // `type: 'text'` means the detector validated `value` as
274
+ // whole-blob UTF-8 with a byte-aligned length (see
275
+ // `media/type`'s `finish`) — the same two conditions
276
+ // `fromVec` checks, via the same decoder — so `fromVec`
277
+ // cannot return `null` here (mirrors `media`'s own `detect`).
278
+ const str = assertNotNullish(fromVec(value), 'cas_get: type text implies fromVec succeeds')
279
+ return pureOk(okResult(toJson({ ...refinedMeta, text: str })))
279
280
  }
280
- const blob = base64Encode(value)
281
- return pure(blob === null
282
- ? errorResult(`content is not byte-aligned: ${r.hash}`)
283
- : okResult(toJson({ ...refinedMeta, blob }))
284
- )
281
+ // Every byte ever written through `cas_add`/the CAS store is
282
+ // whole-byte chunks (UTF-8 text or already-decoded base64), so
283
+ // `value` is always byte-aligned regardless of which branch
284
+ // classified it `base64Encode` only rejects a non-byte-aligned
285
+ // input.
286
+ const blob = assertNotNullish(base64Encode(value), 'cas_get: stored content is always byte-aligned')
287
+ return pureOk(okResult(toJson({ ...refinedMeta, blob })))
285
288
  },
286
289
  )
287
290
  },
288
291
  )
289
- }),
292
+ },
290
293
  ),
291
294
  toolEntry(
292
295
  'cas_list',
293
296
  'List all stored content hashes (cBase32), one per line.',
294
297
  casListArgs,
295
- /** @type {() => Effect<FileCasOperation, ToolsCallResult>} */
296
- (() => step(
298
+ () => resultStep(
297
299
  c.list(),
298
- hashes => pure(okResult(hashes.map(vecToCBase32).join('\n')))
299
- )),
300
+ r => pureOk(r[0] === 'error'
301
+ ? errorResult(errorSummary(r[1]))
302
+ : okResult(r[1].map(vecToCBase32).join('\n')))
303
+ ),
300
304
  ),
301
305
  ]
302
306
  }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @import { Effect } from '../../effects/types.ts'
3
+ * @import { Result } from '../../types/result/types.ts'
4
+ * @import { FileCasOperation } from '../../cas/types.ts'
5
+ * @import { MemOp } from '../../effects/memory/types.ts'
6
+ * @import { Cache } from '../../cas/evo/types.ts'
7
+ * @import { Key } from '../../effects/memory/types.ts'
8
+ * @import { ToolsCallResult } from '../../protocol/mcp/types.ts'
9
+ */
10
+ export declare const proof: {
11
+ casListStorageErrorReturnsError: () => void;
12
+ casAddWriteErrorReturnsError: () => void;
13
+ casGetMetadataRefineHashVanishesFallsBackToStreamingVerdict: () => void;
14
+ casGetContentFetchHashVanishesReturnsError: () => void;
15
+ };