functionalscript 0.37.0 → 0.39.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 (517) 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/fjs/bnf/token_symbol/module.f.d.ts +38 -0
  28. package/fjs/bnf/token_symbol/module.f.js +48 -0
  29. package/fjs/bnf/token_symbol/proof.f.d.ts +10 -0
  30. package/fjs/bnf/token_symbol/proof.f.js +37 -0
  31. package/{fs → fjs}/cas/cli/module.f.js +6 -9
  32. package/{fs → fjs}/cas/cli/proof.f.d.ts +4 -1
  33. package/{fs → fjs}/cas/cli/proof.f.js +29 -66
  34. package/fjs/cas/evo/mcp/module.f.d.ts +27 -0
  35. package/fjs/cas/evo/mcp/module.f.js +94 -0
  36. package/fjs/cas/evo/mcp/proof.f.d.ts +11 -0
  37. package/fjs/cas/evo/mcp/proof.f.js +126 -0
  38. package/fjs/cas/evo/module.f.d.ts +202 -0
  39. package/fjs/cas/evo/module.f.js +421 -0
  40. package/fjs/cas/evo/proof.f.d.ts +39 -0
  41. package/fjs/cas/evo/proof.f.js +572 -0
  42. package/fjs/cas/mcp/module.f.d.ts +49 -0
  43. package/{fs → fjs}/cas/mcp/module.f.js +61 -81
  44. package/{fs → fjs}/cas/mcp/proof.f.d.ts +4 -1
  45. package/{fs → fjs}/cas/mcp/proof.f.js +45 -17
  46. package/{fs → fjs}/cas/module.f.d.ts +10 -0
  47. package/{fs → fjs}/cas/module.f.js +89 -36
  48. package/fjs/cas/proof.f.d.ts +18 -0
  49. package/fjs/cas/proof.f.js +305 -0
  50. package/{fs → fjs}/ci/bun/module.f.js +3 -3
  51. package/{fs → fjs}/ci/common/module.f.d.ts +1 -2
  52. package/{fs → fjs}/ci/common/module.f.js +1 -5
  53. package/{fs → fjs}/ci/config/module.f.d.ts +8 -8
  54. package/{fs → fjs}/ci/config/module.f.js +8 -8
  55. package/{fs → fjs}/ci/deno/module.f.js +3 -3
  56. package/{fs → fjs}/ci/module.f.js +3 -4
  57. package/{fs → fjs}/ci/node/module.f.js +11 -9
  58. package/{fs → fjs}/ci/proof.f.js +16 -9
  59. package/{fs → fjs}/ci/rust/module.f.js +9 -1
  60. package/{fs → fjs}/cli/module.f.js +2 -2
  61. package/{fs → fjs}/cli/proof.f.js +22 -63
  62. package/{fs → fjs}/common/monoid/module.f.d.ts +46 -2
  63. package/fjs/common/monoid/module.f.js +88 -0
  64. package/fjs/common/monoid/proof.f.d.ts +9 -0
  65. package/fjs/common/monoid/proof.f.js +48 -0
  66. package/{fs → fjs}/crypto/hmac/proof.f.js +4 -12
  67. package/fjs/crypto/pow/proof.f.js +111 -0
  68. package/{fs → fjs}/crypto/secp/proof.f.js +12 -33
  69. package/{fs → fjs}/crypto/sha2/proof.f.js +18 -49
  70. package/{fs → fjs}/crypto/sign/module.f.d.ts +0 -5
  71. package/{fs → fjs}/crypto/sign/module.f.js +7 -4
  72. package/{fs → fjs}/crypto/sign/proof.f.js +36 -105
  73. package/{fs → fjs}/crypto/vdf/proof.f.js +22 -63
  74. package/{fs → fjs}/dev/module.f.js +25 -25
  75. package/{fs → fjs}/dev/package_json/proof.f.js +7 -7
  76. package/{fs → fjs}/dev/proof.f.js +2 -4
  77. package/{fs → fjs}/djs/ast/proof.f.js +4 -12
  78. package/{fs → fjs}/djs/module.f.js +5 -8
  79. package/{fs → fjs}/djs/parser/module.f.d.ts +8 -0
  80. package/{fs → fjs}/djs/parser/module.f.js +37 -0
  81. package/{fs → fjs}/djs/parser/proof.f.js +138 -400
  82. package/{fs → fjs}/djs/proof.f.js +13 -36
  83. package/{fs → fjs}/djs/serializer/proof.f.js +14 -39
  84. package/fjs/djs/tokenizer/module.f.d.ts +24 -0
  85. package/fjs/djs/tokenizer/module.f.js +472 -0
  86. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.d.ts +4 -3
  87. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.js +446 -445
  88. package/{fs → fjs}/djs/transpiler/module.f.js +6 -6
  89. package/{fs → fjs}/djs/transpiler/proof.f.d.ts +3 -0
  90. package/{fs → fjs}/djs/transpiler/proof.f.js +29 -30
  91. package/fjs/effects/eff/module.f.d.ts +72 -0
  92. package/fjs/effects/eff/module.f.js +46 -0
  93. package/fjs/effects/eff/proof.f.d.ts +11 -0
  94. package/fjs/effects/eff/proof.f.js +58 -0
  95. package/{fs → fjs}/effects/list/module.f.d.ts +11 -5
  96. package/{fs → fjs}/effects/list/module.f.js +2 -1
  97. package/{fs → fjs}/effects/memory/proof.f.js +15 -29
  98. package/fjs/effects/module.f.d.ts +388 -0
  99. package/fjs/effects/module.f.js +288 -0
  100. package/{fs → fjs}/effects/node/memory/proof.js +7 -13
  101. package/{fs → fjs}/effects/node/module.d.ts +1 -1
  102. package/{fs → fjs}/effects/node/module.f.d.ts +2 -2
  103. package/{fs → fjs}/effects/node/module.f.js +9 -11
  104. package/{fs → fjs}/effects/node/module.js +3 -3
  105. package/{fs → fjs}/effects/node/proof.f.d.ts +1 -0
  106. package/{fs → fjs}/effects/node/proof.f.js +121 -299
  107. package/{fs → fjs}/effects/node/virtual/proof.f.d.ts +1 -0
  108. package/{fs → fjs}/effects/node/virtual/proof.f.js +36 -29
  109. package/fjs/effects/proof.f.d.ts +51 -0
  110. package/fjs/effects/proof.f.js +178 -0
  111. package/{fs → fjs}/emergent_testing/module.f.js +55 -39
  112. package/{fs → fjs}/emergent_testing/proof.f.d.ts +4 -0
  113. package/{fs → fjs}/emergent_testing/proof.f.js +60 -27
  114. package/{fs → fjs}/fsc/proof.f.js +12 -34
  115. package/{fs → fjs}/fsm/proof.f.js +5 -12
  116. package/{fs → fjs}/mcp/module.f.d.ts +7 -0
  117. package/{fs → fjs}/mcp/module.f.js +17 -10
  118. package/{fs → fjs}/mcp/proof.f.js +17 -16
  119. package/{fs → fjs}/mcp/stdio/module.f.d.ts +4 -4
  120. package/{fs → fjs}/mcp/stdio/module.f.js +14 -14
  121. package/{fs → fjs}/media/html/proof.f.js +12 -33
  122. package/{fs → fjs}/media/json/parser/module.f.d.ts +5 -0
  123. package/{fs → fjs}/media/json/parser/module.f.js +14 -0
  124. package/{fs → fjs}/media/json/parser/proof.f.js +39 -114
  125. package/{fs → fjs}/media/json/rpc/module.f.js +1 -1
  126. package/{fs → fjs}/media/json/schema/module.f.d.ts +2 -2
  127. package/{fs → fjs}/media/json/schema/module.f.js +23 -39
  128. package/{fs → fjs}/media/json/schema/proof.f.js +3 -6
  129. package/{fs → fjs}/media/json/serializer/proof.f.js +10 -27
  130. package/{fs → fjs}/media/module.f.d.ts +6 -6
  131. package/{fs → fjs}/media/module.f.js +3 -4
  132. package/{fs → fjs}/media/proof.f.js +5 -4
  133. package/{fs → fjs}/media/revision/module.f.d.ts +31 -4
  134. package/{fs → fjs}/media/revision/module.f.js +35 -23
  135. package/{fs → fjs}/media/revision/proof.f.d.ts +10 -8
  136. package/fjs/media/revision/proof.f.js +140 -0
  137. package/{fs → fjs}/media/type/module.f.js +2 -2
  138. package/{fs → fjs}/media/type/proof.f.js +8 -15
  139. package/{fs → fjs}/module.f.js +5 -9
  140. package/{fs → fjs}/path/proof.f.js +27 -78
  141. package/{fs → fjs}/proof.f.js +2 -0
  142. package/{fs → fjs}/sul/id/proof.f.js +7 -21
  143. package/{fs → fjs}/sul/level/hash/proof.f.js +5 -5
  144. package/{fs → fjs}/sul/level/literal/proof.f.js +12 -26
  145. package/fjs/text/ascii/proof.f.d.ts +6 -0
  146. package/{fs → fjs}/text/ascii/proof.f.js +4 -14
  147. package/{fs → fjs}/text/code_point/module.f.js +10 -10
  148. package/{fs → fjs}/text/proof.f.js +4 -9
  149. package/{fs → fjs}/text/sgr/proof.f.js +6 -15
  150. package/{fs → fjs}/text/utf16/module.f.js +1 -1
  151. package/{fs → fjs}/text/utf16/proof.f.js +23 -66
  152. package/{fs → fjs}/text/utf8/proof.f.js +56 -125
  153. package/{fs → fjs}/types/array/proof.f.js +18 -52
  154. package/fjs/types/bigfloat/proof.f.js +217 -0
  155. package/{fs → fjs}/types/bigint/module.f.js +4 -3
  156. package/{fs → fjs}/types/bigint/proof.f.js +49 -145
  157. package/{fs → fjs}/types/bit_vec/module.f.js +5 -15
  158. package/{fs → fjs}/types/bit_vec/proof.f.js +72 -214
  159. package/{fs → fjs}/types/btree/find/proof.f.js +23 -66
  160. package/{fs → fjs}/types/btree/proof.f.js +5 -12
  161. package/{fs → fjs}/types/btree/remove/module.f.d.ts +5 -0
  162. package/{fs → fjs}/types/btree/remove/module.f.js +12 -0
  163. package/{fs → fjs}/types/btree/remove/proof.f.d.ts +2 -0
  164. package/{fs → fjs}/types/btree/remove/proof.f.js +83 -230
  165. package/{fs → fjs}/types/btree/set/module.f.js +5 -2
  166. package/{fs → fjs}/types/btree/set/proof.f.js +35 -24
  167. package/{fs → fjs}/types/byte_set/proof.f.js +22 -63
  168. package/{fs → fjs}/types/function/compare/proof.f.js +13 -36
  169. package/{fs → fjs}/types/function/operator/proof.f.js +17 -48
  170. package/{fs → fjs}/types/function/proof.f.js +2 -3
  171. package/{fs → fjs}/types/list/module.f.d.ts +21 -0
  172. package/{fs → fjs}/types/list/module.f.js +17 -0
  173. package/{fs → fjs}/types/list/proof.f.d.ts +1 -0
  174. package/{fs → fjs}/types/list/proof.f.js +79 -164
  175. package/{fs → fjs}/types/map/proof.f.js +4 -12
  176. package/{fs → fjs}/types/nibble_set/proof.f.js +16 -45
  177. package/{fs → fjs}/types/nominal/proof.f.js +5 -10
  178. package/fjs/types/nullable/proof.f.js +29 -0
  179. package/{fs → fjs}/types/number/module.f.js +2 -1
  180. package/{fs → fjs}/types/number/proof.f.js +9 -24
  181. package/{fs → fjs}/types/object/proof.f.js +3 -6
  182. package/{fs → fjs}/types/patricia_trie/proof.f.js +21 -21
  183. package/{fs → fjs}/types/prime_field/module.f.js +2 -7
  184. package/{fs → fjs}/types/range/module.f.d.ts +1 -1
  185. package/fjs/types/range/module.f.js +2 -0
  186. package/fjs/types/range/proof.f.js +9 -0
  187. package/{fs → fjs}/types/range_map/proof.f.js +28 -81
  188. package/{fs → fjs}/types/result/proof.f.d.ts +3 -2
  189. package/fjs/types/result/proof.f.js +31 -0
  190. package/{fs → fjs}/types/rtti/common/module.f.d.ts +36 -1
  191. package/{fs → fjs}/types/rtti/common/module.f.js +44 -0
  192. package/fjs/types/rtti/common/proof.f.d.ts +8 -0
  193. package/fjs/types/rtti/common/proof.f.js +51 -0
  194. package/{fs → fjs}/types/rtti/parse/module.f.js +13 -22
  195. package/{fs → fjs}/types/rtti/parse/proof.f.js +7 -18
  196. package/{fs → fjs}/types/rtti/ts/module.f.d.ts +10 -4
  197. package/{fs → fjs}/types/rtti/validate/module.f.js +8 -29
  198. package/{fs → fjs}/types/rtti/validate/proof.f.js +4 -9
  199. package/{fs → fjs}/types/sorted_list/proof.f.js +8 -21
  200. package/{fs → fjs}/types/sorted_set/proof.f.js +14 -39
  201. package/{fs → fjs}/types/string/module.f.js +10 -2
  202. package/fjs/types/string/proof.f.js +77 -0
  203. package/fjs/types/string_set/proof.f.js +43 -0
  204. package/{fs → fjs}/types/ts/proof.f.js +15 -42
  205. package/{fs → fjs}/types/uint8array/module.f.js +7 -7
  206. package/{fs → fjs}/types/uint8array/proof.f.d.ts +4 -1
  207. package/{fs → fjs}/types/uint8array/proof.f.js +7 -7
  208. package/{fs → fjs}/website/module.f.js +2 -3
  209. package/{fs → fjs}/website/proof.f.js +3 -6
  210. package/package.json +8 -8
  211. package/fs/asserts/module.f.d.ts +0 -4
  212. package/fs/asserts/module.f.js +0 -9
  213. package/fs/asserts/proof.f.d.ts +0 -8
  214. package/fs/asserts/proof.f.js +0 -51
  215. package/fs/bnf/data/module.f.d.ts +0 -30
  216. package/fs/bnf/descent/module.f.js +0 -119
  217. package/fs/bnf/proof.f.js +0 -104
  218. package/fs/cas/mcp/module.f.d.ts +0 -36
  219. package/fs/cas/proof.f.d.ts +0 -20
  220. package/fs/cas/proof.f.js +0 -294
  221. package/fs/common/monoid/module.f.js +0 -44
  222. package/fs/common/monoid/proof.f.d.ts +0 -4
  223. package/fs/common/monoid/proof.f.js +0 -27
  224. package/fs/crypto/pow/proof.f.js +0 -161
  225. package/fs/djs/tokenizer/module.f.d.ts +0 -12
  226. package/fs/djs/tokenizer/module.f.js +0 -62
  227. package/fs/djs/tokenizer/proof.f.d.ts +0 -7
  228. package/fs/djs/tokenizer/proof.f.js +0 -543
  229. package/fs/djs/tokenizer-new/module.f.d.ts +0 -3
  230. package/fs/djs/tokenizer-new/module.f.js +0 -155
  231. package/fs/effects/module.f.d.ts +0 -106
  232. package/fs/effects/module.f.js +0 -80
  233. package/fs/effects/proof.f.d.ts +0 -25
  234. package/fs/effects/proof.f.js +0 -115
  235. package/fs/media/revision/proof.f.js +0 -119
  236. package/fs/text/ascii/proof.f.d.ts +0 -4
  237. package/fs/types/bigfloat/proof.f.js +0 -348
  238. package/fs/types/nullable/proof.f.js +0 -50
  239. package/fs/types/range/module.f.js +0 -2
  240. package/fs/types/range/proof.f.js +0 -18
  241. package/fs/types/result/proof.f.js +0 -52
  242. package/fs/types/string/proof.f.js +0 -118
  243. package/fs/types/string_set/proof.f.js +0 -82
  244. /package/{fs → fjs}/asn.1/module.f.d.ts +0 -0
  245. /package/{fs → fjs}/asn.1/module.f.js +0 -0
  246. /package/{fs → fjs}/asn.1/proof.f.d.ts +0 -0
  247. /package/{fs → fjs}/base_n/module.f.d.ts +0 -0
  248. /package/{fs → fjs}/base_n/module.f.js +0 -0
  249. /package/{fs → fjs}/base_n/proof.f.d.ts +0 -0
  250. /package/{fs → fjs}/basen/base128/module.f.d.ts +0 -0
  251. /package/{fs → fjs}/basen/base128/module.f.js +0 -0
  252. /package/{fs → fjs}/basen/base128/proof.f.d.ts +0 -0
  253. /package/{fs → fjs}/basen/base128/proof.f.js +0 -0
  254. /package/{fs → fjs}/basen/base64/module.f.d.ts +0 -0
  255. /package/{fs → fjs}/basen/base64/module.f.js +0 -0
  256. /package/{fs → fjs}/basen/cbase32/module.f.d.ts +0 -0
  257. /package/{fs → fjs}/basen/cbase32/module.f.js +0 -0
  258. /package/{fs → fjs}/basen/cbase32/proof.f.d.ts +0 -0
  259. /package/{fs → fjs}/bnf/proof.f.d.ts +0 -0
  260. /package/{fs → fjs}/bnf/testlib.f.d.ts +0 -0
  261. /package/{fs → fjs}/cas/cli/module.f.d.ts +0 -0
  262. /package/{fs → fjs}/ci/bun/module.f.d.ts +0 -0
  263. /package/{fs → fjs}/ci/deno/module.f.d.ts +0 -0
  264. /package/{fs → fjs}/ci/module.f.d.ts +0 -0
  265. /package/{fs → fjs}/ci/node/module.f.d.ts +0 -0
  266. /package/{fs → fjs}/ci/playwright/module.f.d.ts +0 -0
  267. /package/{fs → fjs}/ci/playwright/module.f.js +0 -0
  268. /package/{fs → fjs}/ci/proof.f.d.ts +0 -0
  269. /package/{fs → fjs}/ci/rust/module.f.d.ts +0 -0
  270. /package/{fs → fjs}/cli/module.f.d.ts +0 -0
  271. /package/{fs → fjs}/cli/proof.f.d.ts +0 -0
  272. /package/{fs → fjs}/crypto/hmac/module.f.d.ts +0 -0
  273. /package/{fs → fjs}/crypto/hmac/module.f.js +0 -0
  274. /package/{fs → fjs}/crypto/hmac/proof.f.d.ts +0 -0
  275. /package/{fs → fjs}/crypto/pow/module.f.d.ts +0 -0
  276. /package/{fs → fjs}/crypto/pow/module.f.js +0 -0
  277. /package/{fs → fjs}/crypto/pow/proof.f.d.ts +0 -0
  278. /package/{fs → fjs}/crypto/secp/module.f.d.ts +0 -0
  279. /package/{fs → fjs}/crypto/secp/module.f.js +0 -0
  280. /package/{fs → fjs}/crypto/secp/proof.f.d.ts +0 -0
  281. /package/{fs → fjs}/crypto/sha2/module.f.d.ts +0 -0
  282. /package/{fs → fjs}/crypto/sha2/module.f.js +0 -0
  283. /package/{fs → fjs}/crypto/sha2/proof.f.d.ts +0 -0
  284. /package/{fs → fjs}/crypto/sign/proof.f.d.ts +0 -0
  285. /package/{fs → fjs}/crypto/vdf/module.f.d.ts +0 -0
  286. /package/{fs → fjs}/crypto/vdf/module.f.js +0 -0
  287. /package/{fs → fjs}/crypto/vdf/proof.f.d.ts +0 -0
  288. /package/{fs → fjs}/dev/module.f.d.ts +0 -0
  289. /package/{fs → fjs}/dev/package_json/module.f.d.ts +0 -0
  290. /package/{fs → fjs}/dev/package_json/module.f.js +0 -0
  291. /package/{fs → fjs}/dev/package_json/proof.f.d.ts +0 -0
  292. /package/{fs → fjs}/dev/proof.f.d.ts +0 -0
  293. /package/{fs → fjs}/djs/ast/module.f.d.ts +0 -0
  294. /package/{fs → fjs}/djs/ast/module.f.js +0 -0
  295. /package/{fs → fjs}/djs/ast/proof.f.d.ts +0 -0
  296. /package/{fs → fjs}/djs/examples/input.f.d.ts +0 -0
  297. /package/{fs → fjs}/djs/examples/input.f.js +0 -0
  298. /package/{fs → fjs}/djs/examples/m.f.d.ts +0 -0
  299. /package/{fs → fjs}/djs/examples/m.f.js +0 -0
  300. /package/{fs → fjs}/djs/module.f.d.ts +0 -0
  301. /package/{fs → fjs}/djs/parser/proof.f.d.ts +0 -0
  302. /package/{fs → fjs}/djs/proof.f.d.ts +0 -0
  303. /package/{fs → fjs}/djs/serializer/module.f.d.ts +0 -0
  304. /package/{fs → fjs}/djs/serializer/module.f.js +0 -0
  305. /package/{fs → fjs}/djs/serializer/proof.f.d.ts +0 -0
  306. /package/{fs → fjs}/djs/transpiler/module.f.d.ts +0 -0
  307. /package/{fs → fjs}/effects/memory/module.f.d.ts +0 -0
  308. /package/{fs → fjs}/effects/memory/module.f.js +0 -0
  309. /package/{fs → fjs}/effects/memory/proof.f.d.ts +0 -0
  310. /package/{fs → fjs}/effects/mock/module.f.d.ts +0 -0
  311. /package/{fs → fjs}/effects/mock/module.f.js +0 -0
  312. /package/{fs → fjs}/effects/module.d.ts +0 -0
  313. /package/{fs → fjs}/effects/module.js +0 -0
  314. /package/{fs → fjs}/effects/node/memory/module.d.ts +0 -0
  315. /package/{fs → fjs}/effects/node/memory/module.js +0 -0
  316. /package/{fs → fjs}/effects/node/memory/proof.d.ts +0 -0
  317. /package/{fs → fjs}/effects/node/virtual/module.f.d.ts +0 -0
  318. /package/{fs → fjs}/effects/node/virtual/module.f.js +0 -0
  319. /package/{fs → fjs}/emergent_testing/all.test.d.ts +0 -0
  320. /package/{fs → fjs}/emergent_testing/all.test.js +0 -0
  321. /package/{fs → fjs}/emergent_testing/example.f.d.ts +0 -0
  322. /package/{fs → fjs}/emergent_testing/example.f.js +0 -0
  323. /package/{fs → fjs}/emergent_testing/module.f.d.ts +0 -0
  324. /package/{fs → fjs}/emergent_testing/scenarios/all.d.ts +0 -0
  325. /package/{fs → fjs}/emergent_testing/scenarios/all.js +0 -0
  326. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -0
  327. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.js +0 -0
  328. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -0
  329. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.js +0 -0
  330. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.d.ts +0 -0
  331. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.js +0 -0
  332. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.d.ts +0 -0
  333. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.js +0 -0
  334. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.d.ts +0 -0
  335. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.js +0 -0
  336. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.d.ts +0 -0
  337. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.js +0 -0
  338. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.d.ts +0 -0
  339. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.js +0 -0
  340. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.d.ts +0 -0
  341. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.js +0 -0
  342. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.d.ts +0 -0
  343. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.js +0 -0
  344. /package/{fs → fjs}/fsc/bnf.f.d.ts +0 -0
  345. /package/{fs → fjs}/fsc/bnf.f.js +0 -0
  346. /package/{fs → fjs}/fsc/json.f.d.ts +0 -0
  347. /package/{fs → fjs}/fsc/json.f.js +0 -0
  348. /package/{fs → fjs}/fsc/module.f.d.ts +0 -0
  349. /package/{fs → fjs}/fsc/module.f.js +0 -0
  350. /package/{fs → fjs}/fsc/proof.f.d.ts +0 -0
  351. /package/{fs → fjs}/fsm/module.f.d.ts +0 -0
  352. /package/{fs → fjs}/fsm/module.f.js +0 -0
  353. /package/{fs → fjs}/fsm/proof.f.d.ts +0 -0
  354. /package/{fs → fjs}/js/tokenizer/module.f.d.ts +0 -0
  355. /package/{fs → fjs}/js/tokenizer/module.f.js +0 -0
  356. /package/{fs → fjs}/js/tokenizer/proof.f.d.ts +0 -0
  357. /package/{fs → fjs}/js/tokenizer/proof.f.js +0 -0
  358. /package/{fs → fjs}/mcp/proof.f.d.ts +0 -0
  359. /package/{fs → fjs}/mcp/stdio/proof.f.d.ts +0 -0
  360. /package/{fs → fjs}/mcp/stdio/proof.f.js +0 -0
  361. /package/{fs → fjs}/media/html/module.f.d.ts +0 -0
  362. /package/{fs → fjs}/media/html/module.f.js +0 -0
  363. /package/{fs → fjs}/media/html/proof.f.d.ts +0 -0
  364. /package/{fs → fjs}/media/json/module.f.d.ts +0 -0
  365. /package/{fs → fjs}/media/json/module.f.js +0 -0
  366. /package/{fs → fjs}/media/json/parser/proof.f.d.ts +0 -0
  367. /package/{fs → fjs}/media/json/proof.f.d.ts +0 -0
  368. /package/{fs → fjs}/media/json/proof.f.js +0 -0
  369. /package/{fs → fjs}/media/json/rpc/module.f.d.ts +0 -0
  370. /package/{fs → fjs}/media/json/rpc/proof.f.d.ts +0 -0
  371. /package/{fs → fjs}/media/json/rpc/proof.f.js +0 -0
  372. /package/{fs → fjs}/media/json/schema/proof.f.d.ts +0 -0
  373. /package/{fs → fjs}/media/json/serializer/module.f.d.ts +0 -0
  374. /package/{fs → fjs}/media/json/serializer/module.f.js +0 -0
  375. /package/{fs → fjs}/media/json/serializer/proof.f.d.ts +0 -0
  376. /package/{fs → fjs}/media/json/tokenizer/module.f.d.ts +0 -0
  377. /package/{fs → fjs}/media/json/tokenizer/module.f.js +0 -0
  378. /package/{fs → fjs}/media/json/tokenizer/proof.f.d.ts +0 -0
  379. /package/{fs → fjs}/media/json/tokenizer/proof.f.js +0 -0
  380. /package/{fs → fjs}/media/proof.f.d.ts +0 -0
  381. /package/{fs → fjs}/media/type/module.f.d.ts +0 -0
  382. /package/{fs → fjs}/media/type/proof.f.d.ts +0 -0
  383. /package/{fs → fjs}/module.d.ts +0 -0
  384. /package/{fs → fjs}/module.f.d.ts +0 -0
  385. /package/{fs → fjs}/module.js +0 -0
  386. /package/{fs → fjs}/path/module.f.d.ts +0 -0
  387. /package/{fs → fjs}/path/module.f.js +0 -0
  388. /package/{fs → fjs}/path/proof.f.d.ts +0 -0
  389. /package/{fs → fjs}/proof.f.d.ts +0 -0
  390. /package/{fs → fjs}/sul/id/module.f.d.ts +0 -0
  391. /package/{fs → fjs}/sul/id/module.f.js +0 -0
  392. /package/{fs → fjs}/sul/id/proof.f.d.ts +0 -0
  393. /package/{fs → fjs}/sul/level/hash/module.f.d.ts +0 -0
  394. /package/{fs → fjs}/sul/level/hash/module.f.js +0 -0
  395. /package/{fs → fjs}/sul/level/hash/proof.f.d.ts +0 -0
  396. /package/{fs → fjs}/sul/level/literal/module.f.d.ts +0 -0
  397. /package/{fs → fjs}/sul/level/literal/module.f.js +0 -0
  398. /package/{fs → fjs}/sul/level/literal/proof.f.d.ts +0 -0
  399. /package/{fs → fjs}/sul/module.f.d.ts +0 -0
  400. /package/{fs → fjs}/sul/module.f.js +0 -0
  401. /package/{fs → fjs}/sul/proof.f.d.ts +0 -0
  402. /package/{fs → fjs}/sul/proof.f.js +0 -0
  403. /package/{fs → fjs}/text/ascii/module.f.d.ts +0 -0
  404. /package/{fs → fjs}/text/ascii/module.f.js +0 -0
  405. /package/{fs → fjs}/text/code_point/module.f.d.ts +0 -0
  406. /package/{fs → fjs}/text/code_point/proof.f.d.ts +0 -0
  407. /package/{fs → fjs}/text/code_point/proof.f.js +0 -0
  408. /package/{fs → fjs}/text/module.f.d.ts +0 -0
  409. /package/{fs → fjs}/text/module.f.js +0 -0
  410. /package/{fs → fjs}/text/proof.f.d.ts +0 -0
  411. /package/{fs → fjs}/text/sgr/module.f.d.ts +0 -0
  412. /package/{fs → fjs}/text/sgr/module.f.js +0 -0
  413. /package/{fs → fjs}/text/sgr/proof.f.d.ts +0 -0
  414. /package/{fs → fjs}/text/utf16/module.f.d.ts +0 -0
  415. /package/{fs → fjs}/text/utf16/proof.f.d.ts +0 -0
  416. /package/{fs → fjs}/text/utf8/module.f.d.ts +0 -0
  417. /package/{fs → fjs}/text/utf8/module.f.js +0 -0
  418. /package/{fs → fjs}/text/utf8/proof.f.d.ts +0 -0
  419. /package/{fs → fjs}/types/array/module.f.d.ts +0 -0
  420. /package/{fs → fjs}/types/array/module.f.js +0 -0
  421. /package/{fs → fjs}/types/array/proof.f.d.ts +0 -0
  422. /package/{fs → fjs}/types/bigfloat/module.f.d.ts +0 -0
  423. /package/{fs → fjs}/types/bigfloat/module.f.js +0 -0
  424. /package/{fs → fjs}/types/bigfloat/proof.f.d.ts +0 -0
  425. /package/{fs → fjs}/types/bigint/module.f.d.ts +0 -0
  426. /package/{fs → fjs}/types/bigint/proof.f.d.ts +0 -0
  427. /package/{fs → fjs}/types/bit_vec/module.f.d.ts +0 -0
  428. /package/{fs → fjs}/types/bit_vec/proof.f.d.ts +0 -0
  429. /package/{fs → fjs}/types/btree/find/module.f.d.ts +0 -0
  430. /package/{fs → fjs}/types/btree/find/module.f.js +0 -0
  431. /package/{fs → fjs}/types/btree/find/proof.f.d.ts +0 -0
  432. /package/{fs → fjs}/types/btree/module.f.d.ts +0 -0
  433. /package/{fs → fjs}/types/btree/module.f.js +0 -0
  434. /package/{fs → fjs}/types/btree/proof.f.d.ts +0 -0
  435. /package/{fs → fjs}/types/btree/set/module.f.d.ts +0 -0
  436. /package/{fs → fjs}/types/btree/set/proof.f.d.ts +0 -0
  437. /package/{fs → fjs}/types/btree/types/module.f.d.ts +0 -0
  438. /package/{fs → fjs}/types/btree/types/module.f.js +0 -0
  439. /package/{fs → fjs}/types/byte_set/module.f.d.ts +0 -0
  440. /package/{fs → fjs}/types/byte_set/module.f.js +0 -0
  441. /package/{fs → fjs}/types/byte_set/proof.f.d.ts +0 -0
  442. /package/{fs → fjs}/types/function/compare/module.f.d.ts +0 -0
  443. /package/{fs → fjs}/types/function/compare/module.f.js +0 -0
  444. /package/{fs → fjs}/types/function/compare/proof.f.d.ts +0 -0
  445. /package/{fs → fjs}/types/function/module.f.d.ts +0 -0
  446. /package/{fs → fjs}/types/function/module.f.js +0 -0
  447. /package/{fs → fjs}/types/function/operator/module.f.d.ts +0 -0
  448. /package/{fs → fjs}/types/function/operator/module.f.js +0 -0
  449. /package/{fs → fjs}/types/function/operator/proof.f.d.ts +0 -0
  450. /package/{fs → fjs}/types/function/proof.f.d.ts +0 -0
  451. /package/{fs → fjs}/types/map/module.f.d.ts +0 -0
  452. /package/{fs → fjs}/types/map/module.f.js +0 -0
  453. /package/{fs → fjs}/types/map/proof.f.d.ts +0 -0
  454. /package/{fs → fjs}/types/nibble_set/module.f.d.ts +0 -0
  455. /package/{fs → fjs}/types/nibble_set/module.f.js +0 -0
  456. /package/{fs → fjs}/types/nibble_set/proof.f.d.ts +0 -0
  457. /package/{fs → fjs}/types/nominal/module.f.d.ts +0 -0
  458. /package/{fs → fjs}/types/nominal/module.f.js +0 -0
  459. /package/{fs → fjs}/types/nominal/proof.f.d.ts +0 -0
  460. /package/{fs → fjs}/types/nullable/module.f.d.ts +0 -0
  461. /package/{fs → fjs}/types/nullable/module.f.js +0 -0
  462. /package/{fs → fjs}/types/nullable/proof.f.d.ts +0 -0
  463. /package/{fs → fjs}/types/number/module.f.d.ts +0 -0
  464. /package/{fs → fjs}/types/number/proof.f.d.ts +0 -0
  465. /package/{fs → fjs}/types/object/module.f.d.ts +0 -0
  466. /package/{fs → fjs}/types/object/module.f.js +0 -0
  467. /package/{fs → fjs}/types/object/proof.f.d.ts +0 -0
  468. /package/{fs → fjs}/types/option/module.f.d.ts +0 -0
  469. /package/{fs → fjs}/types/option/module.f.js +0 -0
  470. /package/{fs → fjs}/types/ordered_map/module.f.d.ts +0 -0
  471. /package/{fs → fjs}/types/ordered_map/module.f.js +0 -0
  472. /package/{fs → fjs}/types/ordered_map/proof.f.d.ts +0 -0
  473. /package/{fs → fjs}/types/ordered_map/proof.f.js +0 -0
  474. /package/{fs → fjs}/types/patricia_trie/module.f.d.ts +0 -0
  475. /package/{fs → fjs}/types/patricia_trie/module.f.js +0 -0
  476. /package/{fs → fjs}/types/patricia_trie/proof.f.d.ts +0 -0
  477. /package/{fs → fjs}/types/phantom/module.f.d.ts +0 -0
  478. /package/{fs → fjs}/types/phantom/module.f.js +0 -0
  479. /package/{fs → fjs}/types/prime_field/module.f.d.ts +0 -0
  480. /package/{fs → fjs}/types/prime_field/proof.f.d.ts +0 -0
  481. /package/{fs → fjs}/types/prime_field/proof.f.js +0 -0
  482. /package/{fs → fjs}/types/range/proof.f.d.ts +0 -0
  483. /package/{fs → fjs}/types/range_map/module.f.d.ts +0 -0
  484. /package/{fs → fjs}/types/range_map/module.f.js +0 -0
  485. /package/{fs → fjs}/types/range_map/proof.f.d.ts +0 -0
  486. /package/{fs → fjs}/types/result/module.d.ts +0 -0
  487. /package/{fs → fjs}/types/result/module.f.d.ts +0 -0
  488. /package/{fs → fjs}/types/result/module.f.js +0 -0
  489. /package/{fs → fjs}/types/result/module.js +0 -0
  490. /package/{fs → fjs}/types/rtti/module.f.d.ts +0 -0
  491. /package/{fs → fjs}/types/rtti/module.f.js +0 -0
  492. /package/{fs → fjs}/types/rtti/parse/module.f.d.ts +0 -0
  493. /package/{fs → fjs}/types/rtti/parse/proof.f.d.ts +0 -0
  494. /package/{fs → fjs}/types/rtti/proof.f.d.ts +0 -0
  495. /package/{fs → fjs}/types/rtti/proof.f.js +0 -0
  496. /package/{fs → fjs}/types/rtti/ts/module.f.js +0 -0
  497. /package/{fs → fjs}/types/rtti/ts/proof.f.d.ts +0 -0
  498. /package/{fs → fjs}/types/rtti/ts/proof.f.js +0 -0
  499. /package/{fs → fjs}/types/rtti/validate/module.f.d.ts +0 -0
  500. /package/{fs → fjs}/types/rtti/validate/proof.f.d.ts +0 -0
  501. /package/{fs → fjs}/types/sorted_list/module.f.d.ts +0 -0
  502. /package/{fs → fjs}/types/sorted_list/module.f.js +0 -0
  503. /package/{fs → fjs}/types/sorted_list/proof.f.d.ts +0 -0
  504. /package/{fs → fjs}/types/sorted_set/module.f.d.ts +0 -0
  505. /package/{fs → fjs}/types/sorted_set/module.f.js +0 -0
  506. /package/{fs → fjs}/types/sorted_set/proof.f.d.ts +0 -0
  507. /package/{fs → fjs}/types/string/module.f.d.ts +0 -0
  508. /package/{fs → fjs}/types/string/proof.f.d.ts +0 -0
  509. /package/{fs → fjs}/types/string_set/module.f.d.ts +0 -0
  510. /package/{fs → fjs}/types/string_set/module.f.js +0 -0
  511. /package/{fs → fjs}/types/string_set/proof.f.d.ts +0 -0
  512. /package/{fs → fjs}/types/ts/module.f.d.ts +0 -0
  513. /package/{fs → fjs}/types/ts/module.f.js +0 -0
  514. /package/{fs → fjs}/types/ts/proof.f.d.ts +0 -0
  515. /package/{fs → fjs}/types/uint8array/module.f.d.ts +0 -0
  516. /package/{fs → fjs}/website/module.f.d.ts +0 -0
  517. /package/{fs → fjs}/website/proof.f.d.ts +0 -0
package/fs/cas/proof.f.js DELETED
@@ -1,294 +0,0 @@
1
- import { length, maxLength, msb, vec, vec8 } from '../types/bit_vec/module.f.js';
2
- import { cBase32ToVec, vecToCBase32 } from '../basen/cbase32/module.f.js';
3
- import { computeSync, sha256 } from '../crypto/sha2/module.f.js';
4
- import { fileCas, casAddFile, casUpload } from './module.f.js';
5
- import { pure } from '../effects/module.f.js';
6
- import { mkdir, writeFile, rm, readFile, access } from '../effects/node/module.f.js';
7
- import { error, ok } from '../types/result/module.f.js';
8
- import { emptyState, virtual } from '../effects/node/virtual/module.f.js';
9
- import { join } from '../path/module.f.js';
10
- import { nonEmpty, empty } from '../effects/list/module.f.js';
11
- const testDir = './test-cas-cli';
12
- // Create a 128 KiB big file content (at the max Vec size limit)
13
- // This tests the boundary where files are at the chunk size limit
14
- const createBigFileContent = () => {
15
- const byteCount = 128n * 1024n; // 128 KiB
16
- // Create a repeating pattern: 0x42 repeated across the file
17
- return vec(byteCount * 8n)(0x42424242n);
18
- };
19
- // Test adding a big file and verifying the hash
20
- const testAddBigFile = () => mkdir(testDir, { recursive: true }).step(() => {
21
- const bigContent = createBigFileContent();
22
- const bigFilePath = `${testDir}/big-file.bin`;
23
- return writeFile(bigFilePath, bigContent).step(writeRes => {
24
- if (writeRes[0] === 'error') {
25
- throw new Error(`Failed to write test file: ${writeRes[1]}`);
26
- }
27
- const cas = fileCas(sha256)(testDir);
28
- return casAddFile(cas)(bigFilePath).step(addRes => {
29
- if (addRes[0] === 'error') {
30
- throw new Error(`Failed to add file to CAS: ${addRes[1]}`);
31
- }
32
- const hash = addRes[1];
33
- // Verify hash is 256 bits (SHA-256)
34
- if (length(hash) !== 256n) {
35
- throw new Error(`Expected hash length 256 bits, got ${length(hash)}`);
36
- }
37
- // Verify hash can be encoded/decoded
38
- const hashCBase32 = vecToCBase32(hash);
39
- const decodedHash = cBase32ToVec(hashCBase32);
40
- if (decodedHash === null) {
41
- throw new Error('Failed to decode hash from base32');
42
- }
43
- return rm(testDir).step(() => pure(undefined));
44
- });
45
- });
46
- });
47
- // Test adding and retrieving a big file
48
- const testAddAndGetBigFile = () => mkdir(testDir, { recursive: true })
49
- .step(() => {
50
- const bigContent = createBigFileContent();
51
- const bigFilePath = `${testDir}/big-file.bin`;
52
- return writeFile(bigFilePath, bigContent)
53
- .step(writeRes => {
54
- if (writeRes[0] === 'error') {
55
- throw new Error(`Failed to write test file: ${writeRes[1]}`);
56
- }
57
- const cas = fileCas(sha256)(testDir);
58
- return casAddFile(cas)(bigFilePath)
59
- .step(addRes => {
60
- if (addRes[0] === 'error') {
61
- throw new Error(`Failed to add file to CAS: ${addRes[1]}`);
62
- }
63
- const hash = addRes[1];
64
- const storedPath = cas.url(hash);
65
- // Verify file is stored at the expected location
66
- return readFile(storedPath).step(readRes => {
67
- if (readRes[0] === 'error') {
68
- throw new Error(`Failed to read stored file: ${readRes[1]}`);
69
- }
70
- const storedContent = readRes[1];
71
- // Verify content is the same size as original
72
- const storedLen = length(storedContent);
73
- const originalLen = length(bigContent);
74
- if (storedLen !== originalLen) {
75
- throw new Error(`Content size mismatch: stored ${storedLen} bits, expected ${originalLen} bits`);
76
- }
77
- return rm(testDir).step(() => pure(undefined));
78
- });
79
- });
80
- });
81
- });
82
- export const proof = {
83
- addBigFile: testAddBigFile,
84
- addAndGetBigFile: testAddAndGetBigFile,
85
- //
86
- casWriteRead: () => {
87
- // Round-trip a single-chunk payload through the real streaming CAS: `write` returns
88
- // the content hash, and `read` streams the same bytes back as `ok` chunk items.
89
- const content = vec8(0x2an);
90
- const c = fileCas(sha256)('.');
91
- const payload = nonEmpty(ok(content), empty());
92
- const [state1, writeResult] = virtual(emptyState)(c.write(payload));
93
- if (writeResult[0] !== 'ok') {
94
- throw ['expected write ok', writeResult];
95
- }
96
- const hash = writeResult[1];
97
- if (length(hash) !== 256n) {
98
- throw ['expected 256-bit hash', length(hash)];
99
- }
100
- if (msb.cmp(hash)(computeSync(sha256)([content])) !== 0) {
101
- throw 'write hash mismatch';
102
- }
103
- const drain = (acc) => (stream) => stream.step((node) => {
104
- if (node === undefined) {
105
- return pure(ok(acc));
106
- }
107
- const { first, tail } = node;
108
- if (first[0] === 'error') {
109
- return pure(first);
110
- }
111
- return drain([...acc, first[1]])(tail);
112
- });
113
- const [, readResult] = virtual(state1)(drain([])(c.read(hash)));
114
- if (readResult[0] !== 'ok') {
115
- throw ['expected read ok', readResult];
116
- }
117
- if (msb.cmp(msb.listToVec(readResult[1]))(content) !== 0) {
118
- throw 'read content mismatch';
119
- }
120
- },
121
- casReadMissingShard: () => {
122
- // A missing shard surfaces as an explicit error *item*, never as end-of-stream.
123
- const c = fileCas(sha256)('.');
124
- const hash = computeSync(sha256)([vec8(0x2an)]);
125
- const node = virtual(emptyState)(c.read(hash))[1];
126
- if (node === undefined) {
127
- throw 'missing shard must not be EOF';
128
- }
129
- if (node.first[0] !== 'error') {
130
- throw ['expected error item', node.tail];
131
- }
132
- },
133
- casWriteMultiChunk: () => {
134
- // A multi-chunk payload streams through `writeBytes` chunk-by-chunk (the lease is
135
- // renewed between chunks); the hash equals the SHA-256 of the concatenated bytes,
136
- // and read streams the same content back.
137
- const chunks = [vec8(0x11n), vec8(0x22n), vec8(0x33n)];
138
- const c = fileCas(sha256)('.');
139
- const payload = chunks.reduceRight((tail, chunk) => nonEmpty(ok(chunk), tail), empty());
140
- const [state1, writeResult] = virtual(emptyState)(c.write(payload));
141
- if (writeResult[0] !== 'ok') {
142
- throw ['expected write ok', writeResult];
143
- }
144
- const hash = writeResult[1];
145
- if (msb.cmp(hash)(computeSync(sha256)(chunks)) !== 0) {
146
- throw 'multi-chunk write hash mismatch';
147
- }
148
- const drain = (acc) => (stream) => stream.step((node) => {
149
- if (node === undefined) {
150
- return pure(ok(acc));
151
- }
152
- const { first, tail } = node;
153
- if (first[0] === 'error') {
154
- return pure(first);
155
- }
156
- return drain([...acc, first[1]])(tail);
157
- });
158
- const [, readResult] = virtual(state1)(drain([])(c.read(hash)));
159
- if (readResult[0] !== 'ok') {
160
- throw ['expected read ok', readResult];
161
- }
162
- const expected = msb.concat(msb.concat(chunks[0])(chunks[1]))(chunks[2]);
163
- if (msb.cmp(msb.listToVec(readResult[1]))(expected) !== 0) {
164
- throw 'multi-chunk read content mismatch';
165
- }
166
- },
167
- casWriteDedup: () => {
168
- // Same content ⇒ same hash; the second upload's replace-`rename` publishes over the
169
- // first, leaving exactly one shard in the store.
170
- const content = vec8(0x2an);
171
- const c = fileCas(sha256)('.');
172
- const payload = () => nonEmpty(ok(content), empty());
173
- const [state1, w1] = virtual(emptyState)(c.write(payload()));
174
- const [state2, w2] = virtual(state1)(c.write(payload()));
175
- if (w1[0] !== 'ok' || w2[0] !== 'ok') {
176
- throw ['expected both writes ok', w1, w2];
177
- }
178
- if (msb.cmp(w1[1])(w2[1]) !== 0) {
179
- throw 'dedup hash mismatch';
180
- }
181
- const [, hashes] = virtual(state2)(c.list());
182
- if (hashes.length !== 1) {
183
- throw ['expected one shard after dedup', hashes.length];
184
- }
185
- },
186
- casWriteErrorItemAborts: () => {
187
- // An error item mid-stream deletes the partial staging file and fails; nothing is
188
- // published, so the store stays empty.
189
- const c = fileCas(sha256)('.');
190
- const okItem = ok(vec8(0x11n));
191
- const errItem = error({ code: 'BOOM' });
192
- const payload = nonEmpty(okItem, nonEmpty(errItem, empty()));
193
- const [state1, result] = virtual(emptyState)(c.write(payload));
194
- if (result[0] !== 'error') {
195
- throw ['expected write error', result];
196
- }
197
- const [, hashes] = virtual(state1)(c.list());
198
- if (hashes.length !== 0) {
199
- throw ['expected nothing published on abort', hashes];
200
- }
201
- },
202
- casWriteReadExceedsMaxLength: () => {
203
- // The point of streaming: a payload larger than a single `Vec`'s `maxLength`
204
- // (128 KiB) must round-trip. `write` lands the chunks on disk without ever
205
- // holding them as one `Vec`, and `read` streams them back the same way — so the
206
- // round-trip is verified by hashing the read stream incrementally rather than
207
- // concatenating it (which would itself overflow `maxLength`).
208
- const big = vec(maxLength)(0xabn); // one full-size chunk: exactly maxLength bits
209
- const tail = vec8(0x2an); // one more byte ⇒ total > maxLength
210
- const chunks = [big, tail];
211
- const c = fileCas(sha256)('.');
212
- const payload = chunks.reduceRight((tl, chunk) => nonEmpty(ok(chunk), tl), empty());
213
- const [state1, w] = virtual(emptyState)(c.write(payload));
214
- if (w[0] !== 'ok') {
215
- throw ['expected write ok', w];
216
- }
217
- const hash = w[1];
218
- if (msb.cmp(hash)(computeSync(sha256)(chunks)) !== 0) {
219
- throw 'oversized write hash mismatch';
220
- }
221
- // Fold the read stream straight into a fresh SHA-2 state — never one `Vec`.
222
- const rehash = (state) => (stream) => stream.step((node) => {
223
- if (node === undefined) {
224
- return pure(ok(sha256.end(state)));
225
- }
226
- const { first, tail } = node;
227
- if (first[0] === 'error') {
228
- return pure(first);
229
- }
230
- return rehash(sha256.append(first[1])(state))(tail);
231
- });
232
- const [, readBack] = virtual(state1)(rehash(sha256.init)(c.read(hash)));
233
- if (readBack[0] !== 'ok') {
234
- throw ['expected read ok', readBack];
235
- }
236
- if (msb.cmp(readBack[1])(hash) !== 0) {
237
- throw 'oversized read-back hash mismatch';
238
- }
239
- },
240
- casWriteGcReclaimsExpired: () => {
241
- // A staging file whose deadline is in the past is reclaimed by the GC that `write`
242
- // runs before staging its own file.
243
- const stalePath = join('.', '.cas', '_stage', '0000000000000000000-stale');
244
- const state0 = {
245
- ...emptyState,
246
- epochNs: 1_000_000,
247
- root: { '.cas': { '_stage': { '0000000000000000000-stale': [vec8(0x99n)] } } },
248
- };
249
- const content = vec8(0x2an);
250
- const c = fileCas(sha256)('.');
251
- const x = c.write(nonEmpty(ok(content), empty()));
252
- const [state1, w] = virtual(state0)(x);
253
- if (w[0] !== 'ok') {
254
- throw ['expected write ok', w];
255
- }
256
- const [, present] = virtual(state1)(access(stalePath));
257
- if (present[0] !== 'error') {
258
- throw 'expected GC to reclaim the expired staging file';
259
- }
260
- },
261
- casUploadSuccess: () => {
262
- // A successful upload returns the hash and deletes the source file from cas_upload/.
263
- const content = vec8(0x2an);
264
- const state0 = { ...emptyState, root: { 'cas_upload': { 'myfile': [content] } } };
265
- const [state1, result] = virtual(state0)(casUpload('.')('myfile'));
266
- if (result[0] !== 'ok') {
267
- throw ['expected casUpload ok', result];
268
- }
269
- if (length(result[1]) !== 256n) {
270
- throw ['expected 256-bit hash', length(result[1])];
271
- }
272
- // Source must be deleted after successful publish.
273
- const srcPath = join('.', 'cas_upload', 'myfile');
274
- const [, srcAccess] = virtual(state1)(access(srcPath));
275
- if (srcAccess[0] !== 'error') {
276
- throw 'expected source to be deleted after successful upload';
277
- }
278
- },
279
- casUploadFailureKeepsSource: () => {
280
- // A missing source file causes write to fail; casUpload returns error and the
281
- // source is left in place (trivially: it was never there, but the upload is not published).
282
- const state0 = { ...emptyState, root: {} };
283
- const [state1, result] = virtual(state0)(casUpload('.')('nonexistent'));
284
- if (result[0] !== 'error') {
285
- throw ['expected casUpload to fail on missing source', result];
286
- }
287
- // Nothing published to the store.
288
- const c = fileCas(sha256)('.');
289
- const [, hashes] = virtual(state1)(c.list());
290
- if (hashes.length !== 0) {
291
- throw ['expected nothing published on failed upload', hashes];
292
- }
293
- },
294
- };
@@ -1,44 +0,0 @@
1
- /**
2
- * Repeats a monoid operation `n` times on the given element `a`.
3
- * This function efficiently performs the operation using exponentiation by squaring.
4
- *
5
- * @template T The type of the elements in the monoid.
6
- * @param monoid The monoid structure, including the identity and binary operation.
7
- * @returns A function that takes an element `a` and a repetition count `n`,
8
- * and returns the result of applying the operation `n` times.
9
- *
10
- * See also {@link https://en.wikipedia.org/wiki/Exponentiation_by_squaring}.
11
- *
12
- * @example
13
- *
14
- * ```ts
15
- * const add: Monoid<number> = {
16
- * identity: 0,
17
- * operation: a => b => a + b,
18
- * };
19
- *
20
- * const resultAdd = repeat(add)(10n)(2) // 20
21
- *
22
- * const concat: Monoid<string> = {
23
- * identity: '',
24
- * operation: a => b => a + b,
25
- * };
26
- *
27
- * const resultConcat = repeat(concat)(3n)('ha') // 'hahaha'
28
- * ```
29
- */
30
- export const repeat = ({ identity, operation }) => n => a => {
31
- let ai = a;
32
- let ni = n;
33
- let result = identity;
34
- while (true) {
35
- if ((ni & 1n) !== 0n) {
36
- result = operation(result)(ai);
37
- }
38
- ni >>= 1n;
39
- if (ni === 0n) {
40
- return result;
41
- }
42
- ai = operation(ai)(ai);
43
- }
44
- };
@@ -1,4 +0,0 @@
1
- export declare const proof: {
2
- numberAdd: () => void;
3
- stringConcat: () => void;
4
- };
@@ -1,27 +0,0 @@
1
- import { repeat } from "./module.f.js";
2
- export const proof = {
3
- numberAdd: () => {
4
- const add = {
5
- identity: 0,
6
- operation: a => b => a + b,
7
- };
8
- const resultAdd = repeat(add)(10n)(2); // 20
9
- if (resultAdd !== 20) {
10
- throw resultAdd;
11
- }
12
- const id = repeat(add)(0n)(42);
13
- if (id !== 0) {
14
- throw id;
15
- }
16
- },
17
- stringConcat: () => {
18
- const concat = {
19
- identity: '',
20
- operation: a => b => a + b,
21
- };
22
- const resultConcat = repeat(concat)(3n)('ha'); // 'hahaha'
23
- if (resultConcat !== 'hahaha') {
24
- throw resultConcat;
25
- }
26
- }
27
- };
@@ -1,161 +0,0 @@
1
- import { utf8 } from '../../text/module.f.js';
2
- import { empty, uint } from '../../types/bit_vec/module.f.js';
3
- import { computeSync, sha224, sha256 } from '../sha2/module.f.js';
4
- import { bitcoinPow, genesisNBits, genesisTarget, pow, sha256Pow, targetFromNBits } from './module.f.js';
5
- const p256 = sha256Pow;
6
- const p224 = pow(sha224);
7
- const sample = utf8('functionalscript pow proof');
8
- const emptyData = empty;
9
- /** Target large enough for {@link sample} under SHA-256 (`0x207fffff`). */
10
- const easyNBits = 0x207fffffn;
11
- /** Compact encoding for target `1` (`0x03000001`). */
12
- const hardNBits = 0x03000001n;
13
- /** SHA-256 of the empty message (NIST / Bitcoin block merkle uses this primitive). */
14
- const sha256EmptyHash = 0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855n;
15
- /** Bitcoin block #0 header hash as big-endian uint256. */
16
- const block0Hash = 0x000000000019d6689c085ae165831e934ff763ae46a2a6cffb388491c27dc990n;
17
- const expectNull = (nBits) => {
18
- if (targetFromNBits(nBits) !== null) {
19
- throw nBits;
20
- }
21
- };
22
- export const proof = {
23
- targetFromNBits: {
24
- genesis: () => {
25
- if (targetFromNBits(genesisNBits) !== genesisTarget) {
26
- throw 'genesis target';
27
- }
28
- },
29
- block0HashWithinGenesisTarget: () => {
30
- if (block0Hash > genesisTarget) {
31
- throw 'block0 hash exceeds genesis target';
32
- }
33
- },
34
- exponent3: () => {
35
- if (targetFromNBits(0x030000ffn) !== 0xffn) {
36
- throw 'exponent 3';
37
- }
38
- },
39
- exponent2: () => {
40
- if (targetFromNBits(0x02008000n) !== 0x80n) {
41
- throw 'exponent 2';
42
- }
43
- },
44
- hardTargetOne: () => {
45
- if (targetFromNBits(hardNBits) !== 1n) {
46
- throw 'hard target';
47
- }
48
- },
49
- zero: () => {
50
- if (targetFromNBits(0n) !== 0n) {
51
- throw 'zero nBits';
52
- }
53
- },
54
- negative: () => {
55
- expectNull(0x01800001n);
56
- },
57
- negativeHighMantissa: () => {
58
- expectNull(0x22ffffffn);
59
- },
60
- overflowExponent: () => {
61
- expectNull(0x23000001n);
62
- },
63
- exceeds256: () => {
64
- expectNull(0x227fffffn);
65
- },
66
- },
67
- meets: {
68
- easy: () => {
69
- if (!p256.meets(easyNBits)(sample)) {
70
- throw 'easy nBits should pass';
71
- }
72
- },
73
- hard: () => {
74
- if (p256.meets(hardNBits)(sample)) {
75
- throw 'target 1 should fail';
76
- }
77
- },
78
- genesisFailsSample: () => {
79
- if (p256.meets(genesisNBits)(sample)) {
80
- throw 'genesis target too hard for sample';
81
- }
82
- },
83
- zeroTargetRejectsSample: () => {
84
- if (p256.meets(0n)(sample)) {
85
- throw 'non-zero hash vs zero target';
86
- }
87
- },
88
- invalidNBits: () => {
89
- if (p256.meets(0x01800001n)(sample)) {
90
- throw 'invalid nBits should not pass';
91
- }
92
- },
93
- hashLeqTarget: () => {
94
- const h = p256.hashInt(sample);
95
- const target = targetFromNBits(easyNBits);
96
- if (target === null) {
97
- throw 'easy nBits decode';
98
- }
99
- if (h > target) {
100
- throw 'hash above easy target';
101
- }
102
- if (!(h <= target)) {
103
- throw 'hash <= target';
104
- }
105
- },
106
- },
107
- hashInt: {
108
- sha256Sample: () => {
109
- const digest = computeSync(sha256)([sample]);
110
- if (p256.hashInt(sample) !== uint(digest)) {
111
- throw 'sha256 sample';
112
- }
113
- },
114
- sha256Empty: () => {
115
- if (p256.hashInt(emptyData) !== sha256EmptyHash) {
116
- throw 'sha256 empty constant';
117
- }
118
- const digest = computeSync(sha256)([emptyData]);
119
- if (p256.hashInt(emptyData) !== uint(digest)) {
120
- throw 'sha256 empty';
121
- }
122
- },
123
- sha224: () => {
124
- const digest = computeSync(sha224)([sample]);
125
- if (p224.hashInt(sample) !== uint(digest)) {
126
- throw 'sha224';
127
- }
128
- },
129
- stable: () => {
130
- if (p256.hashInt(sample) !== p256.hashInt(sample)) {
131
- throw 'stable';
132
- }
133
- },
134
- },
135
- pow: {
136
- sha256Pow: () => {
137
- const built = pow(sha256);
138
- if (sha256Pow.hashInt(sample) !== built.hashInt(sample)) {
139
- throw 'hashInt';
140
- }
141
- if (sha256Pow.meets(easyNBits)(sample) !== built.meets(easyNBits)(sample)) {
142
- throw 'meets';
143
- }
144
- },
145
- bitcoinPow: () => {
146
- if (bitcoinPow.hashInt(sample) !== sha256Pow.hashInt(sample)) {
147
- throw 'bitcoinPow';
148
- }
149
- },
150
- independentInstances: () => {
151
- const a = pow(sha256);
152
- const b = pow(sha256);
153
- if (a.hashInt(sample) !== b.hashInt(sample)) {
154
- throw 'hashInt';
155
- }
156
- if (a.meets(easyNBits)(sample) !== b.meets(easyNBits)(sample)) {
157
- throw 'meets';
158
- }
159
- },
160
- },
161
- };
@@ -1,12 +0,0 @@
1
- import { type List } from '../../types/list/module.f.ts';
2
- import * as jsTokenizer from '../../js/tokenizer/module.f.ts';
3
- export type DjsToken = {
4
- readonly kind: 'true' | 'false' | 'null' | 'undefined';
5
- } | {
6
- readonly kind: '{' | '}' | ':' | ',' | '[' | ']' | '.' | '=';
7
- } | jsTokenizer.StringToken | jsTokenizer.NumberToken | jsTokenizer.ErrorToken | jsTokenizer.IdToken | jsTokenizer.BigIntToken | jsTokenizer.WhitespaceToken | jsTokenizer.NewLineToken | jsTokenizer.CommentToken | jsTokenizer.EofToken;
8
- export type DjsTokenWithMetadata = {
9
- readonly token: DjsToken;
10
- readonly metadata: jsTokenizer.TokenMetadata;
11
- };
12
- export declare const tokenize: (input: List<number>) => (path: string) => List<DjsTokenWithMetadata>;
@@ -1,62 +0,0 @@
1
- import { empty, flat, map, stateScan } from '../../types/list/module.f.js';
2
- import { multiply } from '../../types/bigfloat/module.f.js';
3
- import * as jsTokenizer from '../../js/tokenizer/module.f.js';
4
- const mapToken = input => {
5
- switch (input.kind) {
6
- case 'id':
7
- case 'bigint':
8
- case '{':
9
- case '}':
10
- case ':':
11
- case ',':
12
- case '[':
13
- case ']':
14
- case '.':
15
- case '=':
16
- case 'true':
17
- case 'false':
18
- case 'null':
19
- case 'string':
20
- case 'number':
21
- case 'ws':
22
- case 'nl':
23
- case 'undefined':
24
- case '//':
25
- case '/*':
26
- case 'eof':
27
- case 'error': return [input];
28
- default: return jsTokenizer.isKeywordToken(input) ? [{ kind: 'id', value: input.kind }] : [{ kind: 'error', message: 'invalid token' }];
29
- }
30
- };
31
- const parseDefaultState = input => {
32
- switch (input.kind) {
33
- case 'eof': return [[{ kind: 'eof' }], { kind: 'def' }];
34
- case '-': return [empty, { kind: '-' }];
35
- default: return [mapToken(input), { kind: 'def' }];
36
- }
37
- };
38
- const parseMinusState = input => {
39
- switch (input.kind) {
40
- case 'eof': return [[{ kind: 'error', message: 'invalid token' }, { kind: 'eof' }], { kind: 'def' }];
41
- case '-': return [[{ kind: 'error', message: 'invalid token' }], { kind: '-' }];
42
- case 'bigint': return [[{ kind: 'bigint', value: -1n * input.value }], { kind: 'def' }];
43
- case 'number': return [[{ kind: 'number', bf: multiply(input.bf)(-1n), value: `-${input.value}` }], { kind: 'def' }];
44
- default: return [{ first: { kind: 'error', message: 'invalid token' }, tail: mapToken(input) }, { kind: 'def' }];
45
- }
46
- };
47
- const scanToken = (input, state) => {
48
- switch (state.kind) {
49
- case '-': return parseMinusState(input);
50
- default: return parseDefaultState(input);
51
- }
52
- };
53
- const mapTokenWithMetadata = metadata => token => { return { token, metadata }; };
54
- const scanTokenWithMetadata = (input, state) => {
55
- const [djsTokens, newState] = scanToken(input.token, state);
56
- const djsTokensWithMetadata = map(mapTokenWithMetadata(input.metadata))(djsTokens);
57
- return [djsTokensWithMetadata, newState];
58
- };
59
- export const tokenize = input => path => {
60
- const jsTokens = jsTokenizer.tokenize(input)(path);
61
- return flat(stateScan(scanTokenWithMetadata)({ kind: 'def' })(jsTokens));
62
- };
@@ -1,7 +0,0 @@
1
- export declare const proof: {
2
- djs: (() => void)[];
3
- id: (() => void)[];
4
- keywords: (() => void)[];
5
- comments: (() => void)[];
6
- metadata: (() => void)[];
7
- };