functionalscript 0.43.0 → 0.44.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 (1096) hide show
  1. package/README.md +53 -21
  2. package/fjs/asn.1/module.f.d.mts +123 -0
  3. package/fjs/asn.1/module.f.mjs +459 -0
  4. package/fjs/asn.1/proof.f.mjs +309 -0
  5. package/fjs/asn.1/types.d.ts +37 -0
  6. package/fjs/asn.1/types.js +6 -0
  7. package/fjs/asserts/module.f.d.mts +37 -0
  8. package/fjs/asserts/module.f.mjs +49 -0
  9. package/fjs/asserts/proof.f.mjs +19 -0
  10. package/fjs/asserts/types.d.ts +11 -0
  11. package/fjs/asserts/types.js +6 -0
  12. package/fjs/basen/base128/module.f.d.mts +22 -0
  13. package/fjs/basen/base128/module.f.mjs +51 -0
  14. package/fjs/basen/base128/proof.f.d.mts +2 -0
  15. package/fjs/basen/base128/proof.f.mjs +30 -0
  16. package/fjs/basen/base64/module.f.d.mts +14 -0
  17. package/fjs/basen/base64/module.f.mjs +71 -0
  18. package/fjs/basen/base64/proof.f.d.mts +17 -0
  19. package/fjs/basen/base64/proof.f.mjs +147 -0
  20. package/fjs/basen/cbase32/module.f.d.mts +18 -0
  21. package/fjs/basen/cbase32/module.f.mjs +61 -0
  22. package/fjs/basen/cbase32/proof.f.d.mts +8 -0
  23. package/fjs/basen/cbase32/proof.f.mjs +77 -0
  24. package/fjs/basen/module.f.d.mts +30 -0
  25. package/fjs/basen/module.f.mjs +88 -0
  26. package/fjs/basen/proof.f.mjs +69 -0
  27. package/fjs/basen/types.d.ts +14 -0
  28. package/fjs/basen/types.js +6 -0
  29. package/fjs/bnf/data/module.f.d.mts +47 -0
  30. package/fjs/bnf/data/module.f.mjs +188 -0
  31. package/fjs/bnf/data/proof.f.d.mts +13 -0
  32. package/fjs/bnf/data/proof.f.mjs +160 -0
  33. package/fjs/bnf/data/types.d.ts +35 -0
  34. package/fjs/bnf/data/types.js +6 -0
  35. package/fjs/bnf/descent/module.f.d.mts +33 -0
  36. package/fjs/bnf/descent/module.f.mjs +212 -0
  37. package/fjs/bnf/descent/proof.f.d.mts +13 -0
  38. package/fjs/bnf/descent/proof.f.mjs +351 -0
  39. package/fjs/bnf/descent/types.d.ts +71 -0
  40. package/fjs/bnf/descent/types.js +6 -0
  41. package/fjs/bnf/ll1/module.f.d.mts +41 -0
  42. package/fjs/bnf/ll1/module.f.mjs +199 -0
  43. package/fjs/bnf/ll1/proof.f.d.mts +16 -0
  44. package/fjs/bnf/ll1/proof.f.mjs +352 -0
  45. package/fjs/bnf/ll1/types.d.ts +59 -0
  46. package/fjs/bnf/ll1/types.js +6 -0
  47. package/fjs/bnf/module.f.d.mts +164 -0
  48. package/fjs/bnf/module.f.mjs +298 -0
  49. package/fjs/bnf/proof.f.d.mts +17 -0
  50. package/fjs/bnf/proof.f.mjs +89 -0
  51. package/fjs/bnf/testlib.f.d.mts +10 -0
  52. package/fjs/bnf/testlib.f.mjs +196 -0
  53. package/fjs/bnf/token_symbol/module.f.d.mts +35 -0
  54. package/fjs/bnf/token_symbol/module.f.mjs +62 -0
  55. package/fjs/bnf/token_symbol/proof.f.mjs +43 -0
  56. package/fjs/bnf/token_symbol/types.d.ts +27 -0
  57. package/fjs/bnf/token_symbol/types.js +6 -0
  58. package/fjs/bnf/types.d.ts +67 -0
  59. package/fjs/bnf/types.js +6 -0
  60. package/fjs/cas/cli/module.f.d.mts +17 -0
  61. package/fjs/cas/cli/module.f.mjs +73 -0
  62. package/fjs/cas/cli/proof.f.d.mts +18 -0
  63. package/fjs/cas/cli/proof.f.mjs +118 -0
  64. package/fjs/cas/evo/module.f.d.mts +163 -0
  65. package/fjs/cas/evo/module.f.mjs +556 -0
  66. package/fjs/cas/evo/proof.f.d.mts +55 -0
  67. package/fjs/cas/evo/proof.f.mjs +749 -0
  68. package/fjs/cas/evo/types.d.ts +111 -0
  69. package/fjs/cas/evo/types.js +7 -0
  70. package/fjs/cas/module.f.d.mts +68 -0
  71. package/fjs/cas/module.f.mjs +363 -0
  72. package/fjs/cas/proof.f.d.mts +29 -0
  73. package/fjs/cas/proof.f.mjs +371 -0
  74. package/fjs/cas/types.d.ts +35 -0
  75. package/fjs/cas/types.js +6 -0
  76. package/fjs/ci/bun/module.f.d.mts +11 -0
  77. package/fjs/ci/bun/module.f.mjs +20 -0
  78. package/fjs/ci/common/module.f.d.mts +80 -0
  79. package/fjs/ci/common/module.f.mjs +87 -0
  80. package/fjs/ci/common/types.d.ts +27 -0
  81. package/fjs/ci/config/module.f.d.mts +45 -0
  82. package/fjs/ci/config/module.f.mjs +89 -0
  83. package/fjs/ci/deno/module.f.d.mts +16 -0
  84. package/fjs/ci/deno/module.f.mjs +29 -0
  85. package/fjs/ci/deno/proof.f.d.mts +4 -0
  86. package/fjs/ci/deno/proof.f.mjs +26 -0
  87. package/fjs/ci/module.f.d.mts +19 -0
  88. package/fjs/ci/module.f.mjs +89 -0
  89. package/fjs/ci/nix/module.f.d.mts +69 -0
  90. package/fjs/ci/nix/module.f.mjs +136 -0
  91. package/fjs/ci/nix/proof.f.d.mts +28 -0
  92. package/fjs/ci/nix/proof.f.mjs +146 -0
  93. package/fjs/ci/nix/types.d.ts +16 -0
  94. package/fjs/ci/nix/types.js +6 -0
  95. package/fjs/ci/node/module.f.d.mts +48 -0
  96. package/fjs/ci/node/module.f.mjs +139 -0
  97. package/fjs/ci/node/proof.f.mjs +18 -0
  98. package/fjs/ci/proof.f.d.mts +20 -0
  99. package/fjs/ci/proof.f.mjs +219 -0
  100. package/fjs/ci/rust/module.f.d.mts +15 -0
  101. package/fjs/ci/rust/module.f.mjs +108 -0
  102. package/fjs/ci/types.d.ts +9 -0
  103. package/fjs/ci/types.js +6 -0
  104. package/fjs/cli/module.f.d.mts +16 -0
  105. package/fjs/cli/module.f.mjs +51 -0
  106. package/fjs/cli/proof.f.d.mts +16 -0
  107. package/fjs/cli/proof.f.mjs +130 -0
  108. package/fjs/cli/types.d.ts +15 -0
  109. package/fjs/cli/types.js +6 -0
  110. package/fjs/common/monoid/module.f.d.mts +87 -0
  111. package/fjs/common/monoid/module.f.mjs +104 -0
  112. package/fjs/common/monoid/proof.f.d.mts +10 -0
  113. package/fjs/common/monoid/proof.f.mjs +58 -0
  114. package/fjs/common/monoid/types.d.ts +50 -0
  115. package/fjs/common/monoid/types.js +6 -0
  116. package/fjs/crypto/hmac/module.f.d.mts +32 -0
  117. package/fjs/crypto/hmac/module.f.mjs +65 -0
  118. package/fjs/crypto/hmac/proof.f.mjs +34 -0
  119. package/fjs/crypto/pow/module.f.d.mts +43 -0
  120. package/fjs/crypto/pow/module.f.mjs +93 -0
  121. package/fjs/crypto/pow/proof.f.mjs +121 -0
  122. package/fjs/crypto/pow/types.d.ts +19 -0
  123. package/fjs/crypto/pow/types.js +6 -0
  124. package/fjs/crypto/secp/module.f.d.mts +61 -0
  125. package/fjs/crypto/secp/module.f.mjs +204 -0
  126. package/fjs/crypto/secp/proof.f.d.mts +9 -0
  127. package/fjs/crypto/secp/proof.f.mjs +137 -0
  128. package/fjs/crypto/secp/types.d.ts +36 -0
  129. package/fjs/crypto/secp/types.js +6 -0
  130. package/fjs/crypto/sha2/module.f.d.mts +80 -0
  131. package/fjs/crypto/sha2/module.f.mjs +431 -0
  132. package/fjs/crypto/sha2/proof.f.d.mts +32 -0
  133. package/fjs/crypto/sha2/proof.f.mjs +144 -0
  134. package/fjs/crypto/sha2/types.d.ts +57 -0
  135. package/fjs/crypto/sha2/types.js +6 -0
  136. package/fjs/crypto/sign/module.f.d.mts +46 -0
  137. package/fjs/crypto/sign/module.f.mjs +189 -0
  138. package/fjs/crypto/sign/proof.f.d.mts +17 -0
  139. package/fjs/crypto/sign/proof.f.mjs +604 -0
  140. package/fjs/crypto/sign/types.d.ts +13 -0
  141. package/fjs/crypto/sign/types.js +6 -0
  142. package/fjs/crypto/vdf/module.f.d.mts +15 -0
  143. package/fjs/crypto/vdf/module.f.mjs +84 -0
  144. package/fjs/crypto/vdf/proof.f.mjs +106 -0
  145. package/fjs/crypto/vdf/types.d.ts +18 -0
  146. package/fjs/crypto/vdf/types.js +6 -0
  147. package/fjs/dev/module.f.d.mts +56 -0
  148. package/fjs/dev/module.f.mjs +170 -0
  149. package/fjs/dev/package_json/module.f.d.mts +32 -0
  150. package/fjs/dev/package_json/module.f.mjs +37 -0
  151. package/fjs/dev/package_json/proof.f.mjs +32 -0
  152. package/fjs/dev/proof.f.d.mts +13 -0
  153. package/fjs/dev/proof.f.mjs +78 -0
  154. package/fjs/dev/types.d.ts +14 -0
  155. package/fjs/dev/types.js +6 -0
  156. package/fjs/dev/update/module.f.d.mts +19 -0
  157. package/fjs/dev/update/module.f.mjs +36 -0
  158. package/fjs/dev/update/proof.f.d.mts +7 -0
  159. package/fjs/dev/update/proof.f.mjs +36 -0
  160. package/fjs/djs/ast/module.f.d.mts +35 -0
  161. package/fjs/djs/ast/module.f.mjs +82 -0
  162. package/fjs/djs/ast/proof.f.mjs +48 -0
  163. package/fjs/djs/ast/types.d.ts +54 -0
  164. package/fjs/djs/ast/types.js +8 -0
  165. package/fjs/djs/examples/input.f.mjs +4 -0
  166. package/fjs/djs/examples/m.f.mjs +1 -0
  167. package/fjs/djs/module.f.d.mts +17 -0
  168. package/fjs/djs/module.f.mjs +47 -0
  169. package/fjs/djs/parser/module.f.d.mts +75 -0
  170. package/fjs/djs/parser/module.f.mjs +547 -0
  171. package/fjs/djs/parser/proof.f.mjs +543 -0
  172. package/fjs/djs/parser/types.d.ts +11 -0
  173. package/fjs/djs/parser/types.js +7 -0
  174. package/fjs/djs/proof.f.mjs +52 -0
  175. package/fjs/djs/serializer/module.f.d.mts +30 -0
  176. package/fjs/djs/serializer/module.f.mjs +206 -0
  177. package/fjs/djs/serializer/proof.f.mjs +116 -0
  178. package/fjs/djs/tokenizer/module.f.d.mts +65 -0
  179. package/fjs/djs/tokenizer/module.f.mjs +624 -0
  180. package/fjs/djs/tokenizer/proof.f.mjs +980 -0
  181. package/fjs/djs/tokenizer/types.d.ts +20 -0
  182. package/fjs/djs/tokenizer/types.js +7 -0
  183. package/fjs/djs/transpiler/module.f.d.mts +44 -0
  184. package/fjs/djs/transpiler/module.f.mjs +141 -0
  185. package/fjs/djs/transpiler/proof.f.mjs +76 -0
  186. package/fjs/djs/types.d.ts +13 -0
  187. package/fjs/djs/types.js +7 -0
  188. package/fjs/effects/eff/module.f.d.mts +10 -0
  189. package/fjs/effects/eff/module.f.mjs +68 -0
  190. package/fjs/effects/eff/proof.f.d.mts +12 -0
  191. package/fjs/effects/eff/proof.f.mjs +66 -0
  192. package/fjs/effects/eff/types.d.ts +71 -0
  193. package/fjs/effects/eff/types.js +6 -0
  194. package/fjs/effects/list/module.f.d.mts +24 -0
  195. package/fjs/effects/list/module.f.mjs +34 -0
  196. package/fjs/effects/list/types.d.ts +26 -0
  197. package/fjs/effects/list/types.js +6 -0
  198. package/fjs/effects/memory/module.f.d.mts +32 -0
  199. package/fjs/effects/memory/module.f.mjs +44 -0
  200. package/fjs/effects/memory/proof.f.d.mts +12 -0
  201. package/fjs/effects/memory/proof.f.mjs +83 -0
  202. package/fjs/effects/memory/types.d.ts +18 -0
  203. package/fjs/effects/memory/types.js +6 -0
  204. package/fjs/effects/mock/module.f.d.mts +6 -0
  205. package/fjs/effects/mock/module.f.mjs +26 -0
  206. package/fjs/effects/mock/types.d.ts +15 -0
  207. package/fjs/effects/mock/types.js +6 -0
  208. package/fjs/effects/module.d.mts +7 -0
  209. package/fjs/effects/module.f.d.mts +350 -0
  210. package/fjs/effects/module.f.mjs +382 -0
  211. package/fjs/effects/module.mjs +18 -0
  212. package/fjs/effects/node/memory/module.d.mts +24 -0
  213. package/fjs/effects/node/memory/module.mjs +59 -0
  214. package/fjs/effects/node/memory/proof.mjs +43 -0
  215. package/fjs/effects/node/module.d.mts +54 -0
  216. package/fjs/effects/node/module.f.d.mts +172 -0
  217. package/fjs/effects/node/module.f.mjs +354 -0
  218. package/fjs/effects/node/module.mjs +393 -0
  219. package/fjs/effects/node/proof.f.d.mts +76 -0
  220. package/fjs/effects/node/proof.f.mjs +444 -0
  221. package/fjs/effects/node/types.d.ts +203 -0
  222. package/fjs/effects/node/types.js +6 -0
  223. package/fjs/effects/node/virtual/module.f.d.mts +31 -0
  224. package/fjs/effects/node/virtual/module.f.mjs +434 -0
  225. package/fjs/effects/node/virtual/proof.f.d.mts +35 -0
  226. package/fjs/effects/node/virtual/proof.f.mjs +226 -0
  227. package/fjs/effects/node/virtual/types.d.ts +39 -0
  228. package/fjs/effects/node/virtual/types.js +7 -0
  229. package/fjs/effects/proof.f.d.mts +62 -0
  230. package/fjs/effects/proof.f.mjs +231 -0
  231. package/fjs/effects/types.d.ts +115 -0
  232. package/fjs/effects/types.js +6 -0
  233. package/fjs/emergent_testing/all.test.js +2 -2
  234. package/fjs/emergent_testing/example.f.d.mts +16 -0
  235. package/fjs/emergent_testing/example.f.mjs +34 -0
  236. package/fjs/emergent_testing/module.f.d.mts +150 -0
  237. package/fjs/emergent_testing/module.f.mjs +414 -0
  238. package/fjs/emergent_testing/proof.f.d.mts +97 -0
  239. package/fjs/emergent_testing/proof.f.mjs +518 -0
  240. package/fjs/emergent_testing/types.d.ts +53 -0
  241. package/fjs/emergent_testing/types.js +6 -0
  242. package/fjs/fsc/bnf.f.d.mts +3 -0
  243. package/fjs/fsc/bnf.f.mjs +77 -0
  244. package/fjs/fsc/json.f.d.mts +13 -0
  245. package/fjs/fsc/json.f.mjs +124 -0
  246. package/fjs/fsc/module.f.d.mts +14 -0
  247. package/fjs/fsc/module.f.mjs +138 -0
  248. package/fjs/fsc/proof.f.mjs +119 -0
  249. package/fjs/fsm/module.f.d.mts +27 -0
  250. package/fjs/fsm/module.f.mjs +99 -0
  251. package/fjs/fsm/proof.f.mjs +146 -0
  252. package/fjs/js/tokenizer/module.f.d.mts +19 -0
  253. package/fjs/js/tokenizer/module.f.mjs +795 -0
  254. package/fjs/js/tokenizer/proof.f.d.mts +12 -0
  255. package/fjs/js/tokenizer/proof.f.mjs +681 -0
  256. package/fjs/js/tokenizer/types.d.ts +193 -0
  257. package/fjs/js/tokenizer/types.js +6 -0
  258. package/fjs/mcp/cas/module.f.d.mts +156 -0
  259. package/fjs/mcp/cas/module.f.mjs +302 -0
  260. package/fjs/mcp/evo/module.f.d.mts +88 -0
  261. package/fjs/mcp/evo/module.f.mjs +153 -0
  262. package/fjs/mcp/evo/proof.f.d.mts +17 -0
  263. package/fjs/mcp/evo/proof.f.mjs +166 -0
  264. package/fjs/mcp/module.f.d.mts +32 -0
  265. package/fjs/mcp/module.f.mjs +96 -0
  266. package/fjs/mcp/proof.f.d.mts +46 -0
  267. package/fjs/mcp/proof.f.mjs +725 -0
  268. package/fjs/media/html/module.f.d.mts +43 -0
  269. package/fjs/media/html/module.f.mjs +167 -0
  270. package/fjs/media/html/proof.f.mjs +77 -0
  271. package/fjs/media/html/types.d.ts +19 -0
  272. package/fjs/media/html/types.js +6 -0
  273. package/fjs/media/json/module.f.d.mts +48 -0
  274. package/fjs/media/json/module.f.mjs +104 -0
  275. package/fjs/media/json/parser/module.f.d.mts +30 -0
  276. package/fjs/media/json/parser/module.f.mjs +219 -0
  277. package/fjs/media/json/parser/proof.f.d.mts +8 -0
  278. package/fjs/media/json/parser/proof.f.mjs +314 -0
  279. package/fjs/media/json/parser/types.d.ts +34 -0
  280. package/fjs/media/json/parser/types.js +6 -0
  281. package/fjs/media/json/proof.f.mjs +79 -0
  282. package/fjs/media/json/rtti/module.f.d.mts +38 -0
  283. package/fjs/media/json/rtti/module.f.mjs +51 -0
  284. package/fjs/media/json/rtti/proof.f.d.mts +26 -0
  285. package/fjs/media/json/rtti/proof.f.mjs +86 -0
  286. package/fjs/media/json/schema/module.f.d.mts +79 -0
  287. package/fjs/media/json/schema/module.f.mjs +144 -0
  288. package/fjs/media/json/schema/proof.f.d.mts +40 -0
  289. package/fjs/media/json/schema/proof.f.mjs +93 -0
  290. package/fjs/media/json/serializer/module.f.d.mts +27 -0
  291. package/fjs/media/json/serializer/module.f.mjs +131 -0
  292. package/fjs/media/json/serializer/proof.f.mjs +92 -0
  293. package/fjs/media/json/tokenizer/module.f.d.mts +17 -0
  294. package/fjs/media/json/tokenizer/module.f.mjs +77 -0
  295. package/fjs/media/json/tokenizer/proof.f.d.mts +8 -0
  296. package/fjs/media/json/tokenizer/proof.f.mjs +291 -0
  297. package/fjs/media/json/tokenizer/types.d.ts +17 -0
  298. package/fjs/media/json/tokenizer/types.js +6 -0
  299. package/fjs/media/json/types.d.ts +25 -0
  300. package/fjs/media/json/types.js +13 -0
  301. package/fjs/media/module.f.d.mts +116 -0
  302. package/fjs/media/module.f.mjs +152 -0
  303. package/fjs/media/nix/module.f.d.mts +14 -0
  304. package/fjs/media/nix/module.f.mjs +261 -0
  305. package/fjs/media/nix/proof.f.mjs +181 -0
  306. package/fjs/media/nix/types.d.ts +22 -0
  307. package/fjs/media/nix/types.js +6 -0
  308. package/fjs/media/proof.f.d.mts +19 -0
  309. package/fjs/media/proof.f.mjs +159 -0
  310. package/fjs/media/revision/module.f.d.mts +119 -0
  311. package/fjs/media/revision/module.f.mjs +166 -0
  312. package/fjs/media/revision/proof.f.d.mts +42 -0
  313. package/fjs/media/revision/proof.f.mjs +228 -0
  314. package/fjs/media/revision/types.d.ts +16 -0
  315. package/fjs/media/revision/types.js +8 -0
  316. package/fjs/media/rust/module.f.d.mts +61 -0
  317. package/fjs/media/rust/module.f.mjs +93 -0
  318. package/fjs/media/rust/proof.f.d.mts +17 -0
  319. package/fjs/media/rust/proof.f.mjs +50 -0
  320. package/fjs/media/type/module.f.d.mts +97 -0
  321. package/fjs/media/type/module.f.mjs +281 -0
  322. package/fjs/media/type/proof.f.mjs +285 -0
  323. package/fjs/media/type/types.d.ts +67 -0
  324. package/fjs/media/type/types.js +6 -0
  325. package/fjs/media/types.d.ts +26 -0
  326. package/fjs/media/types.js +7 -0
  327. package/fjs/module.f.d.mts +3 -0
  328. package/fjs/module.f.mjs +60 -0
  329. package/fjs/module.mjs +6 -0
  330. package/fjs/nanvm/module.f.d.mts +54 -0
  331. package/fjs/nanvm/module.f.mjs +240 -0
  332. package/fjs/nanvm/proof.f.d.mts +41 -0
  333. package/fjs/nanvm/proof.f.mjs +173 -0
  334. package/fjs/nanvm/rust/module.f.d.mts +54 -0
  335. package/fjs/nanvm/rust/module.f.mjs +166 -0
  336. package/fjs/nanvm/rust/proof.f.d.mts +21 -0
  337. package/fjs/nanvm/rust/proof.f.mjs +119 -0
  338. package/fjs/nanvm/types.d.ts +105 -0
  339. package/fjs/nanvm/types.js +11 -0
  340. package/fjs/nanvm/update/module.f.d.mts +23 -0
  341. package/fjs/nanvm/update/module.f.mjs +33 -0
  342. package/fjs/nanvm/update/proof.f.d.mts +9 -0
  343. package/fjs/nanvm/update/proof.f.mjs +32 -0
  344. package/fjs/path/module.f.d.mts +55 -0
  345. package/fjs/path/module.f.mjs +96 -0
  346. package/fjs/path/proof.f.mjs +125 -0
  347. package/fjs/proof.f.mjs +48 -0
  348. package/fjs/protocol/json_rpc/module.f.d.mts +127 -0
  349. package/fjs/protocol/json_rpc/module.f.mjs +112 -0
  350. package/fjs/protocol/json_rpc/proof.f.mjs +84 -0
  351. package/fjs/protocol/json_rpc/types.d.ts +30 -0
  352. package/fjs/protocol/json_rpc/types.js +8 -0
  353. package/fjs/protocol/mcp/module.f.d.mts +227 -0
  354. package/fjs/protocol/mcp/module.f.mjs +369 -0
  355. package/fjs/protocol/mcp/proof.f.d.mts +53 -0
  356. package/fjs/protocol/mcp/proof.f.mjs +312 -0
  357. package/fjs/protocol/mcp/stdio/module.f.d.mts +52 -0
  358. package/fjs/protocol/mcp/stdio/module.f.mjs +132 -0
  359. package/fjs/protocol/mcp/stdio/proof.f.d.mts +20 -0
  360. package/fjs/protocol/mcp/stdio/proof.f.mjs +190 -0
  361. package/fjs/protocol/mcp/types.d.ts +59 -0
  362. package/fjs/protocol/mcp/types.js +8 -0
  363. package/fjs/sul/id/module.f.d.mts +37 -0
  364. package/fjs/sul/id/module.f.mjs +143 -0
  365. package/fjs/sul/id/proof.f.mjs +72 -0
  366. package/fjs/sul/id/types.d.ts +8 -0
  367. package/fjs/sul/id/types.js +6 -0
  368. package/fjs/sul/level/hash/module.f.d.mts +37 -0
  369. package/fjs/sul/level/hash/module.f.mjs +61 -0
  370. package/fjs/sul/level/hash/proof.f.d.mts +15 -0
  371. package/fjs/sul/level/hash/proof.f.mjs +131 -0
  372. package/fjs/sul/level/hash/types.d.ts +20 -0
  373. package/fjs/sul/level/hash/types.js +6 -0
  374. package/fjs/sul/level/literal/module.f.d.mts +54 -0
  375. package/fjs/sul/level/literal/module.f.mjs +120 -0
  376. package/fjs/sul/level/literal/proof.f.mjs +788 -0
  377. package/fjs/sul/level/literal/types.d.ts +31 -0
  378. package/fjs/sul/level/literal/types.js +6 -0
  379. package/fjs/sul/module.f.d.mts +25 -0
  380. package/fjs/sul/module.f.mjs +69 -0
  381. package/fjs/sul/proof.f.d.mts +11 -0
  382. package/fjs/sul/proof.f.mjs +62 -0
  383. package/fjs/sul/types.d.ts +19 -0
  384. package/fjs/sul/types.js +6 -0
  385. package/fjs/text/ascii/module.f.d.mts +136 -0
  386. package/fjs/text/ascii/module.f.mjs +224 -0
  387. package/fjs/text/ascii/proof.f.mjs +16 -0
  388. package/fjs/text/code_point/module.f.d.mts +74 -0
  389. package/fjs/text/code_point/module.f.mjs +139 -0
  390. package/fjs/text/code_point/proof.f.mjs +80 -0
  391. package/fjs/text/module.f.d.mts +39 -0
  392. package/fjs/text/module.f.mjs +61 -0
  393. package/fjs/text/proof.f.mjs +48 -0
  394. package/fjs/text/sgr/module.f.d.mts +58 -0
  395. package/fjs/text/sgr/module.f.mjs +99 -0
  396. package/fjs/text/sgr/proof.f.mjs +39 -0
  397. package/fjs/text/sgr/types.d.ts +12 -0
  398. package/fjs/text/sgr/types.js +6 -0
  399. package/fjs/text/types.d.ts +13 -0
  400. package/fjs/text/types.js +6 -0
  401. package/fjs/text/utf16/module.f.d.mts +147 -0
  402. package/fjs/text/utf16/module.f.mjs +350 -0
  403. package/fjs/text/utf16/proof.f.d.mts +11 -0
  404. package/fjs/text/utf16/proof.f.mjs +158 -0
  405. package/fjs/text/utf16/types.d.ts +19 -0
  406. package/fjs/text/utf16/types.js +6 -0
  407. package/fjs/text/utf8/module.f.d.mts +69 -0
  408. package/fjs/text/utf8/module.f.mjs +280 -0
  409. package/fjs/text/utf8/proof.f.mjs +217 -0
  410. package/fjs/text/utf8/types.d.ts +26 -0
  411. package/fjs/text/utf8/types.js +6 -0
  412. package/fjs/types/array/module.f.d.mts +68 -0
  413. package/fjs/types/array/module.f.mjs +101 -0
  414. package/fjs/types/array/proof.f.mjs +98 -0
  415. package/fjs/types/array/types.d.ts +13 -0
  416. package/fjs/types/array/types.js +6 -0
  417. package/fjs/types/bigfloat/module.f.d.mts +14 -0
  418. package/fjs/types/bigfloat/module.f.mjs +99 -0
  419. package/fjs/types/bigfloat/proof.f.mjs +218 -0
  420. package/fjs/types/bigfloat/types.d.ts +6 -0
  421. package/fjs/types/bigfloat/types.js +6 -0
  422. package/fjs/types/bigint/benchmark.d.mts +1 -0
  423. package/fjs/types/bigint/benchmark.mjs +205 -0
  424. package/fjs/types/bigint/module.f.d.mts +176 -0
  425. package/fjs/types/bigint/module.f.mjs +289 -0
  426. package/fjs/types/bigint/proof.f.d.mts +39 -0
  427. package/fjs/types/bigint/proof.f.mjs +443 -0
  428. package/fjs/types/bigint/types.d.ts +14 -0
  429. package/fjs/types/bigint/types.js +6 -0
  430. package/fjs/types/bit_vec/module.f.d.mts +199 -0
  431. package/fjs/types/bit_vec/module.f.mjs +485 -0
  432. package/fjs/types/bit_vec/proof.f.mjs +495 -0
  433. package/fjs/types/bit_vec/types.d.ts +51 -0
  434. package/fjs/types/bit_vec/types.js +6 -0
  435. package/fjs/types/btree/find/module.f.d.mts +15 -0
  436. package/fjs/types/btree/find/module.f.mjs +80 -0
  437. package/fjs/types/btree/find/proof.f.d.mts +4 -0
  438. package/fjs/types/btree/find/proof.f.mjs +121 -0
  439. package/fjs/types/btree/find/types.d.ts +22 -0
  440. package/fjs/types/btree/find/types.js +6 -0
  441. package/fjs/types/btree/module.f.d.mts +10 -0
  442. package/fjs/types/btree/module.f.mjs +39 -0
  443. package/fjs/types/btree/proof.f.d.mts +14 -0
  444. package/fjs/types/btree/proof.f.mjs +85 -0
  445. package/fjs/types/btree/remove/module.f.d.mts +21 -0
  446. package/fjs/types/btree/remove/module.f.mjs +187 -0
  447. package/fjs/types/btree/remove/proof.f.mjs +472 -0
  448. package/fjs/types/btree/set/module.f.d.mts +5 -0
  449. package/fjs/types/btree/set/module.f.mjs +117 -0
  450. package/fjs/types/btree/set/proof.f.mjs +427 -0
  451. package/fjs/types/btree/types/module.f.d.mts +19 -0
  452. package/fjs/types/btree/types/module.f.mjs +19 -0
  453. package/fjs/types/btree/types/types.d.ts +14 -0
  454. package/fjs/types/btree/types/types.js +6 -0
  455. package/fjs/types/byte_set/module.f.d.mts +26 -0
  456. package/fjs/types/byte_set/module.f.mjs +66 -0
  457. package/fjs/types/byte_set/proof.f.d.mts +12 -0
  458. package/fjs/types/byte_set/proof.f.mjs +84 -0
  459. package/fjs/types/byte_set/types.d.ts +6 -0
  460. package/fjs/types/byte_set/types.js +6 -0
  461. package/fjs/types/function/compare/module.f.d.mts +44 -0
  462. package/fjs/types/function/compare/module.f.mjs +71 -0
  463. package/fjs/types/function/compare/proof.f.mjs +50 -0
  464. package/fjs/types/function/compare/types.d.ts +22 -0
  465. package/fjs/types/function/compare/types.js +6 -0
  466. package/fjs/types/function/module.f.d.mts +26 -0
  467. package/fjs/types/function/module.f.mjs +32 -0
  468. package/fjs/types/function/operator/module.f.d.mts +37 -0
  469. package/fjs/types/function/operator/module.f.mjs +55 -0
  470. package/fjs/types/function/operator/proof.f.mjs +76 -0
  471. package/fjs/types/function/operator/types.d.ts +39 -0
  472. package/fjs/types/function/operator/types.js +6 -0
  473. package/fjs/types/function/proof.f.mjs +16 -0
  474. package/fjs/types/function/types.d.ts +16 -0
  475. package/fjs/types/function/types.js +6 -0
  476. package/fjs/types/list/module.f.d.mts +88 -0
  477. package/fjs/types/list/module.f.mjs +309 -0
  478. package/fjs/types/list/proof.f.d.mts +32 -0
  479. package/fjs/types/list/proof.f.mjs +363 -0
  480. package/fjs/types/list/types.d.ts +36 -0
  481. package/fjs/types/list/types.js +6 -0
  482. package/fjs/types/map/module.f.d.mts +13 -0
  483. package/fjs/types/map/module.f.mjs +42 -0
  484. package/fjs/types/map/proof.f.mjs +25 -0
  485. package/fjs/types/nibble_set/module.f.d.mts +30 -0
  486. package/fjs/types/nibble_set/module.f.mjs +43 -0
  487. package/fjs/types/nibble_set/proof.f.mjs +59 -0
  488. package/fjs/types/nibble_set/types.d.ts +9 -0
  489. package/fjs/types/nibble_set/types.js +6 -0
  490. package/fjs/types/nominal/module.f.d.mts +9 -0
  491. package/fjs/types/nominal/module.f.mjs +16 -0
  492. package/fjs/types/nominal/proof.f.d.mts +7 -0
  493. package/fjs/types/nominal/proof.f.mjs +79 -0
  494. package/fjs/types/nominal/types.d.ts +25 -0
  495. package/fjs/types/nominal/types.js +6 -0
  496. package/fjs/types/nullable/module.f.d.mts +38 -0
  497. package/fjs/types/nullable/module.f.mjs +53 -0
  498. package/fjs/types/nullable/proof.f.mjs +34 -0
  499. package/fjs/types/nullable/types.d.ts +6 -0
  500. package/fjs/types/nullable/types.js +6 -0
  501. package/fjs/types/number/module.f.d.mts +23 -0
  502. package/fjs/types/number/module.f.mjs +55 -0
  503. package/fjs/types/number/proof.f.mjs +204 -0
  504. package/fjs/types/object/module.f.d.mts +33 -0
  505. package/fjs/types/object/module.f.mjs +58 -0
  506. package/fjs/types/object/proof.f.d.mts +25 -0
  507. package/fjs/types/object/proof.f.mjs +26 -0
  508. package/fjs/types/object/types.d.ts +50 -0
  509. package/fjs/types/object/types.js +8 -0
  510. package/fjs/types/ordered_map/module.f.d.mts +21 -0
  511. package/fjs/types/ordered_map/module.f.mjs +54 -0
  512. package/fjs/types/ordered_map/proof.f.mjs +88 -0
  513. package/fjs/types/ordered_map/types.d.ts +8 -0
  514. package/fjs/types/ordered_map/types.js +6 -0
  515. package/fjs/types/patricia_trie/module.f.d.mts +19 -0
  516. package/fjs/types/patricia_trie/module.f.mjs +43 -0
  517. package/fjs/types/patricia_trie/proof.f.d.mts +14 -0
  518. package/fjs/types/patricia_trie/proof.f.mjs +148 -0
  519. package/fjs/types/patricia_trie/types.d.ts +34 -0
  520. package/fjs/types/patricia_trie/types.js +6 -0
  521. package/fjs/types/prime_field/module.f.d.mts +42 -0
  522. package/fjs/types/prime_field/module.f.mjs +136 -0
  523. package/fjs/types/prime_field/proof.f.mjs +131 -0
  524. package/fjs/types/prime_field/types.d.ts +38 -0
  525. package/fjs/types/prime_field/types.js +6 -0
  526. package/fjs/types/range/module.f.d.mts +11 -0
  527. package/fjs/types/range/module.f.mjs +13 -0
  528. package/fjs/types/range/proof.f.mjs +10 -0
  529. package/fjs/types/range/types.d.ts +6 -0
  530. package/fjs/types/range/types.js +6 -0
  531. package/fjs/types/range_map/module.f.d.mts +72 -0
  532. package/fjs/types/range_map/module.f.mjs +130 -0
  533. package/fjs/types/range_map/proof.f.d.mts +7 -0
  534. package/fjs/types/range_map/proof.f.mjs +186 -0
  535. package/fjs/types/range_map/types.d.ts +56 -0
  536. package/fjs/types/range_map/types.js +6 -0
  537. package/fjs/types/range_set/module.f.d.mts +5 -0
  538. package/fjs/types/range_set/module.f.mjs +19 -0
  539. package/fjs/types/range_set/proof.f.mjs +26 -0
  540. package/fjs/types/result/module.d.mts +5 -0
  541. package/fjs/types/result/module.f.d.mts +59 -0
  542. package/fjs/types/result/module.f.mjs +67 -0
  543. package/fjs/types/result/module.mjs +22 -0
  544. package/fjs/types/result/proof.f.mjs +41 -0
  545. package/fjs/types/result/types.d.ts +17 -0
  546. package/fjs/types/result/types.js +6 -0
  547. package/fjs/types/rtti/common/module.f.d.mts +86 -0
  548. package/fjs/types/rtti/common/module.f.mjs +183 -0
  549. package/fjs/types/rtti/common/proof.f.d.mts +9 -0
  550. package/fjs/types/rtti/common/proof.f.mjs +64 -0
  551. package/fjs/types/rtti/common/types.d.ts +43 -0
  552. package/fjs/types/rtti/common/types.js +1 -0
  553. package/fjs/types/rtti/module.f.d.mts +76 -0
  554. package/fjs/types/rtti/module.f.mjs +110 -0
  555. package/fjs/types/rtti/parse/module.f.d.mts +9 -0
  556. package/fjs/types/rtti/parse/module.f.mjs +196 -0
  557. package/fjs/types/rtti/parse/proof.f.d.mts +122 -0
  558. package/fjs/types/rtti/parse/proof.f.mjs +363 -0
  559. package/fjs/types/rtti/parse/types.d.ts +12 -0
  560. package/fjs/types/rtti/parse/types.js +1 -0
  561. package/fjs/types/rtti/proof.f.d.mts +8 -0
  562. package/fjs/types/rtti/proof.f.mjs +20 -0
  563. package/fjs/types/rtti/ts/module.f.d.mts +34 -0
  564. package/fjs/types/rtti/ts/module.f.mjs +64 -0
  565. package/fjs/types/rtti/ts/proof.f.mjs +88 -0
  566. package/fjs/types/rtti/ts/types.d.ts +88 -0
  567. package/fjs/types/rtti/ts/types.js +1 -0
  568. package/fjs/types/rtti/types.d.ts +43 -0
  569. package/fjs/types/rtti/types.js +1 -0
  570. package/fjs/types/rtti/validate/module.f.d.mts +6 -0
  571. package/fjs/types/rtti/validate/module.f.mjs +169 -0
  572. package/fjs/types/rtti/validate/proof.f.d.mts +125 -0
  573. package/fjs/types/rtti/validate/proof.f.mjs +437 -0
  574. package/fjs/types/rtti/validate/types.d.ts +6 -0
  575. package/fjs/types/rtti/validate/types.js +1 -0
  576. package/fjs/types/sorted_list/module.f.d.mts +43 -0
  577. package/fjs/types/sorted_list/module.f.mjs +110 -0
  578. package/fjs/types/sorted_list/proof.f.d.mts +5 -0
  579. package/fjs/types/sorted_list/proof.f.mjs +52 -0
  580. package/fjs/types/sorted_list/types.d.ts +15 -0
  581. package/fjs/types/sorted_list/types.js +6 -0
  582. package/fjs/types/sorted_set/module.f.d.mts +24 -0
  583. package/fjs/types/sorted_set/module.f.mjs +56 -0
  584. package/fjs/types/sorted_set/proof.f.d.mts +7 -0
  585. package/fjs/types/sorted_set/proof.f.mjs +77 -0
  586. package/fjs/types/sorted_set/types.d.ts +6 -0
  587. package/fjs/types/sorted_set/types.js +6 -0
  588. package/fjs/types/string/module.f.d.mts +36 -0
  589. package/fjs/types/string/module.f.mjs +58 -0
  590. package/fjs/types/string/proof.f.mjs +76 -0
  591. package/fjs/types/string_set/module.f.d.mts +37 -0
  592. package/fjs/types/string_set/module.f.mjs +53 -0
  593. package/fjs/types/string_set/proof.f.mjs +46 -0
  594. package/fjs/types/string_set/types.d.ts +7 -0
  595. package/fjs/types/string_set/types.js +6 -0
  596. package/fjs/types/ts/module.f.d.mts +20 -0
  597. package/fjs/types/ts/module.f.mjs +51 -0
  598. package/fjs/types/ts/proof.f.mjs +97 -0
  599. package/fjs/types/ts/types.d.ts +16 -0
  600. package/fjs/types/ts/types.js +8 -0
  601. package/fjs/types/uint8array/module.f.d.mts +31 -0
  602. package/fjs/types/uint8array/module.f.mjs +53 -0
  603. package/fjs/types/uint8array/proof.f.d.mts +17 -0
  604. package/fjs/types/uint8array/proof.f.mjs +73 -0
  605. package/fjs/website/module.f.d.mts +8 -0
  606. package/fjs/website/module.f.mjs +24 -0
  607. package/fjs/website/proof.f.mjs +14 -0
  608. package/package.json +12 -10
  609. package/todo/proof.f.d.mts +22 -0
  610. package/todo/proof.f.mjs +59 -0
  611. package/fjs/asn.1/module.f.d.ts +0 -62
  612. package/fjs/asn.1/module.f.js +0 -278
  613. package/fjs/asn.1/proof.f.js +0 -285
  614. package/fjs/asserts/module.f.d.ts +0 -36
  615. package/fjs/asserts/module.f.js +0 -39
  616. package/fjs/asserts/proof.f.js +0 -18
  617. package/fjs/base_n/module.f.d.ts +0 -45
  618. package/fjs/base_n/module.f.js +0 -72
  619. package/fjs/base_n/proof.f.js +0 -73
  620. package/fjs/basen/base128/module.f.d.ts +0 -20
  621. package/fjs/basen/base128/module.f.js +0 -43
  622. package/fjs/basen/base128/proof.f.js +0 -26
  623. package/fjs/basen/base64/module.f.d.ts +0 -9
  624. package/fjs/basen/base64/module.f.js +0 -71
  625. package/fjs/basen/base64/proof.f.d.ts +0 -16
  626. package/fjs/basen/base64/proof.f.js +0 -139
  627. package/fjs/basen/cbase32/module.f.d.ts +0 -11
  628. package/fjs/basen/cbase32/module.f.js +0 -55
  629. package/fjs/basen/cbase32/proof.f.d.ts +0 -7
  630. package/fjs/basen/cbase32/proof.f.js +0 -62
  631. package/fjs/bnf/data/module.f.d.ts +0 -52
  632. package/fjs/bnf/data/module.f.js +0 -143
  633. package/fjs/bnf/data/proof.f.d.ts +0 -8
  634. package/fjs/bnf/data/proof.f.js +0 -169
  635. package/fjs/bnf/descent/module.f.d.ts +0 -87
  636. package/fjs/bnf/descent/module.f.js +0 -149
  637. package/fjs/bnf/descent/proof.f.d.ts +0 -7
  638. package/fjs/bnf/descent/proof.f.js +0 -368
  639. package/fjs/bnf/ll1/module.f.d.ts +0 -72
  640. package/fjs/bnf/ll1/module.f.js +0 -155
  641. package/fjs/bnf/ll1/proof.f.d.ts +0 -10
  642. package/fjs/bnf/ll1/proof.f.js +0 -375
  643. package/fjs/bnf/module.f.d.ts +0 -165
  644. package/fjs/bnf/module.f.js +0 -174
  645. package/fjs/bnf/proof.f.d.ts +0 -12
  646. package/fjs/bnf/proof.f.js +0 -69
  647. package/fjs/bnf/testlib.f.d.ts +0 -3
  648. package/fjs/bnf/testlib.f.js +0 -138
  649. package/fjs/bnf/token_symbol/module.f.d.ts +0 -38
  650. package/fjs/bnf/token_symbol/module.f.js +0 -48
  651. package/fjs/bnf/token_symbol/proof.f.js +0 -37
  652. package/fjs/cas/cli/module.f.d.ts +0 -6
  653. package/fjs/cas/cli/module.f.js +0 -53
  654. package/fjs/cas/cli/proof.f.d.ts +0 -17
  655. package/fjs/cas/cli/proof.f.js +0 -112
  656. package/fjs/cas/evo/module.f.d.ts +0 -222
  657. package/fjs/cas/evo/module.f.js +0 -454
  658. package/fjs/cas/evo/proof.f.d.ts +0 -43
  659. package/fjs/cas/evo/proof.f.js +0 -653
  660. package/fjs/cas/module.f.d.ts +0 -64
  661. package/fjs/cas/module.f.js +0 -255
  662. package/fjs/cas/proof.f.d.ts +0 -18
  663. package/fjs/cas/proof.f.js +0 -305
  664. package/fjs/ci/bun/module.f.d.ts +0 -2
  665. package/fjs/ci/bun/module.f.js +0 -15
  666. package/fjs/ci/common/module.f.d.ts +0 -88
  667. package/fjs/ci/common/module.f.js +0 -63
  668. package/fjs/ci/config/module.f.d.ts +0 -45
  669. package/fjs/ci/config/module.f.js +0 -80
  670. package/fjs/ci/deno/module.f.d.ts +0 -10
  671. package/fjs/ci/deno/module.f.js +0 -28
  672. package/fjs/ci/deno/proof.f.d.ts +0 -5
  673. package/fjs/ci/deno/proof.f.js +0 -26
  674. package/fjs/ci/module.f.d.ts +0 -13
  675. package/fjs/ci/module.f.js +0 -58
  676. package/fjs/ci/nix/module.f.d.ts +0 -61
  677. package/fjs/ci/nix/module.f.js +0 -92
  678. package/fjs/ci/nix/proof.f.d.ts +0 -23
  679. package/fjs/ci/nix/proof.f.js +0 -109
  680. package/fjs/ci/node/module.f.d.ts +0 -28
  681. package/fjs/ci/node/module.f.js +0 -92
  682. package/fjs/ci/node/proof.f.js +0 -17
  683. package/fjs/ci/proof.f.d.ts +0 -18
  684. package/fjs/ci/proof.f.js +0 -182
  685. package/fjs/ci/rust/module.f.d.ts +0 -3
  686. package/fjs/ci/rust/module.f.js +0 -75
  687. package/fjs/cli/module.f.d.ts +0 -11
  688. package/fjs/cli/module.f.js +0 -34
  689. package/fjs/cli/proof.f.d.ts +0 -14
  690. package/fjs/cli/proof.f.js +0 -111
  691. package/fjs/common/monoid/module.f.d.ts +0 -126
  692. package/fjs/common/monoid/module.f.js +0 -88
  693. package/fjs/common/monoid/proof.f.d.ts +0 -9
  694. package/fjs/common/monoid/proof.f.js +0 -48
  695. package/fjs/crypto/hmac/module.f.d.ts +0 -29
  696. package/fjs/crypto/hmac/module.f.js +0 -56
  697. package/fjs/crypto/hmac/proof.f.js +0 -32
  698. package/fjs/crypto/pow/module.f.d.ts +0 -37
  699. package/fjs/crypto/pow/module.f.js +0 -72
  700. package/fjs/crypto/pow/proof.f.js +0 -111
  701. package/fjs/crypto/secp/module.f.d.ts +0 -85
  702. package/fjs/crypto/secp/module.f.js +0 -176
  703. package/fjs/crypto/secp/proof.f.d.ts +0 -8
  704. package/fjs/crypto/secp/proof.f.js +0 -124
  705. package/fjs/crypto/sha2/module.f.d.ts +0 -102
  706. package/fjs/crypto/sha2/module.f.js +0 -266
  707. package/fjs/crypto/sha2/proof.f.d.ts +0 -31
  708. package/fjs/crypto/sha2/proof.f.js +0 -139
  709. package/fjs/crypto/sign/module.f.d.ts +0 -33
  710. package/fjs/crypto/sign/module.f.js +0 -163
  711. package/fjs/crypto/sign/proof.f.d.ts +0 -11
  712. package/fjs/crypto/sign/proof.f.js +0 -562
  713. package/fjs/crypto/vdf/module.f.d.ts +0 -21
  714. package/fjs/crypto/vdf/module.f.js +0 -57
  715. package/fjs/crypto/vdf/proof.f.js +0 -94
  716. package/fjs/dev/module.f.d.ts +0 -57
  717. package/fjs/dev/module.f.js +0 -135
  718. package/fjs/dev/package_json/module.f.d.ts +0 -16
  719. package/fjs/dev/package_json/module.f.js +0 -24
  720. package/fjs/dev/package_json/proof.f.js +0 -28
  721. package/fjs/dev/proof.f.d.ts +0 -13
  722. package/fjs/dev/proof.f.js +0 -77
  723. package/fjs/dev/update/module.f.d.ts +0 -11
  724. package/fjs/dev/update/module.f.js +0 -20
  725. package/fjs/dev/update/proof.f.d.ts +0 -7
  726. package/fjs/dev/update/proof.f.js +0 -35
  727. package/fjs/djs/ast/module.f.d.ts +0 -62
  728. package/fjs/djs/ast/module.f.js +0 -61
  729. package/fjs/djs/ast/proof.f.js +0 -49
  730. package/fjs/djs/examples/input.f.js +0 -4
  731. package/fjs/djs/examples/m.f.js +0 -1
  732. package/fjs/djs/module.f.d.ts +0 -17
  733. package/fjs/djs/module.f.js +0 -22
  734. package/fjs/djs/parser/module.f.d.ts +0 -23
  735. package/fjs/djs/parser/module.f.js +0 -410
  736. package/fjs/djs/parser/proof.f.js +0 -556
  737. package/fjs/djs/proof.f.js +0 -50
  738. package/fjs/djs/serializer/module.f.d.ts +0 -17
  739. package/fjs/djs/serializer/module.f.js +0 -173
  740. package/fjs/djs/serializer/proof.f.js +0 -133
  741. package/fjs/djs/tokenizer/module.f.d.ts +0 -24
  742. package/fjs/djs/tokenizer/module.f.js +0 -472
  743. package/fjs/djs/tokenizer/proof.f.js +0 -1211
  744. package/fjs/djs/transpiler/module.f.d.ts +0 -41
  745. package/fjs/djs/transpiler/module.f.js +0 -88
  746. package/fjs/djs/transpiler/proof.f.js +0 -67
  747. package/fjs/effects/eff/module.f.d.ts +0 -72
  748. package/fjs/effects/eff/module.f.js +0 -46
  749. package/fjs/effects/eff/proof.f.d.ts +0 -11
  750. package/fjs/effects/eff/proof.f.js +0 -58
  751. package/fjs/effects/list/module.f.d.ts +0 -37
  752. package/fjs/effects/list/module.f.js +0 -17
  753. package/fjs/effects/memory/module.f.d.ts +0 -37
  754. package/fjs/effects/memory/module.f.js +0 -24
  755. package/fjs/effects/memory/proof.f.d.ts +0 -6
  756. package/fjs/effects/memory/proof.f.js +0 -50
  757. package/fjs/effects/mock/module.f.d.ts +0 -16
  758. package/fjs/effects/mock/module.f.js +0 -20
  759. package/fjs/effects/module.d.ts +0 -2
  760. package/fjs/effects/module.f.d.ts +0 -408
  761. package/fjs/effects/module.f.js +0 -312
  762. package/fjs/effects/module.js +0 -11
  763. package/fjs/effects/node/memory/module.d.ts +0 -20
  764. package/fjs/effects/node/memory/module.js +0 -44
  765. package/fjs/effects/node/memory/proof.js +0 -29
  766. package/fjs/effects/node/module.d.ts +0 -20
  767. package/fjs/effects/node/module.f.d.ts +0 -300
  768. package/fjs/effects/node/module.f.js +0 -171
  769. package/fjs/effects/node/module.js +0 -305
  770. package/fjs/effects/node/proof.f.d.ts +0 -69
  771. package/fjs/effects/node/proof.f.js +0 -409
  772. package/fjs/effects/node/virtual/module.f.d.ts +0 -49
  773. package/fjs/effects/node/virtual/module.f.js +0 -440
  774. package/fjs/effects/node/virtual/proof.f.d.ts +0 -33
  775. package/fjs/effects/node/virtual/proof.f.js +0 -186
  776. package/fjs/effects/proof.f.d.ts +0 -56
  777. package/fjs/effects/proof.f.js +0 -200
  778. package/fjs/emergent_testing/example.f.d.ts +0 -13
  779. package/fjs/emergent_testing/example.f.js +0 -31
  780. package/fjs/emergent_testing/module.f.d.ts +0 -140
  781. package/fjs/emergent_testing/module.f.js +0 -289
  782. package/fjs/emergent_testing/proof.f.d.ts +0 -67
  783. package/fjs/emergent_testing/proof.f.js +0 -416
  784. package/fjs/fsc/bnf.f.d.ts +0 -2
  785. package/fjs/fsc/bnf.f.js +0 -42
  786. package/fjs/fsc/json.f.d.ts +0 -7
  787. package/fjs/fsc/json.f.js +0 -64
  788. package/fjs/fsc/module.f.d.ts +0 -11
  789. package/fjs/fsc/module.f.js +0 -73
  790. package/fjs/fsc/proof.f.js +0 -104
  791. package/fjs/fsm/module.f.d.ts +0 -17
  792. package/fjs/fsm/module.f.js +0 -55
  793. package/fjs/fsm/proof.f.js +0 -126
  794. package/fjs/js/tokenizer/module.f.d.ts +0 -104
  795. package/fjs/js/tokenizer/module.f.js +0 -547
  796. package/fjs/js/tokenizer/proof.f.d.ts +0 -9
  797. package/fjs/js/tokenizer/proof.f.js +0 -986
  798. package/fjs/mcp/cas/module.f.d.ts +0 -27
  799. package/fjs/mcp/cas/module.f.js +0 -232
  800. package/fjs/mcp/evo/module.f.d.ts +0 -32
  801. package/fjs/mcp/evo/module.f.js +0 -99
  802. package/fjs/mcp/evo/proof.f.d.ts +0 -12
  803. package/fjs/mcp/evo/proof.f.js +0 -147
  804. package/fjs/mcp/module.f.d.ts +0 -56
  805. package/fjs/mcp/module.f.js +0 -69
  806. package/fjs/mcp/proof.f.d.ts +0 -45
  807. package/fjs/mcp/proof.f.js +0 -535
  808. package/fjs/media/html/module.f.d.ts +0 -52
  809. package/fjs/media/html/module.f.js +0 -117
  810. package/fjs/media/html/proof.f.js +0 -65
  811. package/fjs/media/json/module.f.d.ts +0 -64
  812. package/fjs/media/json/module.f.js +0 -109
  813. package/fjs/media/json/parser/module.f.d.ts +0 -21
  814. package/fjs/media/json/parser/module.f.js +0 -194
  815. package/fjs/media/json/parser/proof.f.d.ts +0 -5
  816. package/fjs/media/json/parser/proof.f.js +0 -314
  817. package/fjs/media/json/proof.f.js +0 -98
  818. package/fjs/media/json/schema/module.f.d.ts +0 -78
  819. package/fjs/media/json/schema/module.f.js +0 -96
  820. package/fjs/media/json/schema/proof.f.d.ts +0 -36
  821. package/fjs/media/json/schema/proof.f.js +0 -83
  822. package/fjs/media/json/serializer/module.f.d.ts +0 -28
  823. package/fjs/media/json/serializer/module.f.js +0 -73
  824. package/fjs/media/json/serializer/proof.f.js +0 -94
  825. package/fjs/media/json/tokenizer/module.f.d.ts +0 -15
  826. package/fjs/media/json/tokenizer/module.f.js +0 -63
  827. package/fjs/media/json/tokenizer/proof.f.d.ts +0 -5
  828. package/fjs/media/json/tokenizer/proof.f.js +0 -417
  829. package/fjs/media/module.f.d.ts +0 -119
  830. package/fjs/media/module.f.js +0 -88
  831. package/fjs/media/nix/module.f.d.ts +0 -30
  832. package/fjs/media/nix/module.f.js +0 -166
  833. package/fjs/media/nix/proof.f.js +0 -127
  834. package/fjs/media/proof.f.d.ts +0 -19
  835. package/fjs/media/proof.f.js +0 -127
  836. package/fjs/media/revision/module.f.d.ts +0 -86
  837. package/fjs/media/revision/module.f.js +0 -131
  838. package/fjs/media/revision/proof.f.d.ts +0 -31
  839. package/fjs/media/revision/proof.f.js +0 -140
  840. package/fjs/media/type/module.f.d.ts +0 -135
  841. package/fjs/media/type/module.f.js +0 -231
  842. package/fjs/media/type/proof.f.js +0 -213
  843. package/fjs/module.f.d.ts +0 -2
  844. package/fjs/module.f.js +0 -50
  845. package/fjs/module.js +0 -4
  846. package/fjs/path/module.f.d.ts +0 -46
  847. package/fjs/path/module.f.js +0 -71
  848. package/fjs/path/proof.f.js +0 -119
  849. package/fjs/proof.f.js +0 -38
  850. package/fjs/protocol/json_rpc/module.f.d.ts +0 -114
  851. package/fjs/protocol/json_rpc/module.f.js +0 -89
  852. package/fjs/protocol/json_rpc/proof.f.js +0 -68
  853. package/fjs/protocol/mcp/module.f.d.ts +0 -239
  854. package/fjs/protocol/mcp/module.f.js +0 -272
  855. package/fjs/protocol/mcp/proof.f.d.ts +0 -34
  856. package/fjs/protocol/mcp/proof.f.js +0 -208
  857. package/fjs/protocol/mcp/stdio/module.f.d.ts +0 -47
  858. package/fjs/protocol/mcp/stdio/module.f.js +0 -78
  859. package/fjs/protocol/mcp/stdio/proof.f.d.ts +0 -13
  860. package/fjs/protocol/mcp/stdio/proof.f.js +0 -143
  861. package/fjs/sul/id/module.f.d.ts +0 -33
  862. package/fjs/sul/id/module.f.js +0 -93
  863. package/fjs/sul/id/proof.f.js +0 -61
  864. package/fjs/sul/level/hash/module.f.d.ts +0 -38
  865. package/fjs/sul/level/hash/module.f.js +0 -43
  866. package/fjs/sul/level/hash/proof.f.d.ts +0 -13
  867. package/fjs/sul/level/hash/proof.f.js +0 -112
  868. package/fjs/sul/level/literal/module.f.d.ts +0 -64
  869. package/fjs/sul/level/literal/module.f.js +0 -88
  870. package/fjs/sul/level/literal/proof.f.js +0 -714
  871. package/fjs/sul/module.f.d.ts +0 -23
  872. package/fjs/sul/module.f.js +0 -46
  873. package/fjs/sul/proof.f.d.ts +0 -9
  874. package/fjs/sul/proof.f.js +0 -47
  875. package/fjs/text/ascii/module.f.d.ts +0 -136
  876. package/fjs/text/ascii/module.f.js +0 -154
  877. package/fjs/text/ascii/proof.f.js +0 -14
  878. package/fjs/text/code_point/module.f.d.ts +0 -65
  879. package/fjs/text/code_point/module.f.js +0 -103
  880. package/fjs/text/code_point/proof.f.js +0 -72
  881. package/fjs/text/module.f.d.ts +0 -40
  882. package/fjs/text/module.f.js +0 -43
  883. package/fjs/text/proof.f.js +0 -44
  884. package/fjs/text/sgr/module.f.d.ts +0 -53
  885. package/fjs/text/sgr/module.f.js +0 -63
  886. package/fjs/text/sgr/proof.f.js +0 -33
  887. package/fjs/text/utf16/module.f.d.ts +0 -161
  888. package/fjs/text/utf16/module.f.js +0 -311
  889. package/fjs/text/utf16/proof.f.d.ts +0 -10
  890. package/fjs/text/utf16/proof.f.js +0 -144
  891. package/fjs/text/utf8/module.f.d.ts +0 -83
  892. package/fjs/text/utf8/module.f.js +0 -247
  893. package/fjs/text/utf8/proof.f.js +0 -217
  894. package/fjs/types/array/module.f.d.ts +0 -49
  895. package/fjs/types/array/module.f.js +0 -42
  896. package/fjs/types/array/proof.f.js +0 -92
  897. package/fjs/types/bigfloat/module.f.d.ts +0 -6
  898. package/fjs/types/bigfloat/module.f.js +0 -69
  899. package/fjs/types/bigfloat/proof.f.js +0 -217
  900. package/fjs/types/bigint/module.f.d.ts +0 -172
  901. package/fjs/types/bigint/module.f.js +0 -251
  902. package/fjs/types/bigint/proof.f.d.ts +0 -37
  903. package/fjs/types/bigint/proof.f.js +0 -400
  904. package/fjs/types/bit_vec/module.f.d.ts +0 -302
  905. package/fjs/types/bit_vec/module.f.js +0 -375
  906. package/fjs/types/bit_vec/proof.f.js +0 -465
  907. package/fjs/types/btree/find/module.f.d.ts +0 -25
  908. package/fjs/types/btree/find/module.f.js +0 -80
  909. package/fjs/types/btree/find/proof.f.d.ts +0 -3
  910. package/fjs/types/btree/find/proof.f.js +0 -108
  911. package/fjs/types/btree/module.f.d.ts +0 -9
  912. package/fjs/types/btree/module.f.js +0 -33
  913. package/fjs/types/btree/proof.f.d.ts +0 -13
  914. package/fjs/types/btree/proof.f.js +0 -64
  915. package/fjs/types/btree/remove/module.f.d.ts +0 -14
  916. package/fjs/types/btree/remove/module.f.js +0 -186
  917. package/fjs/types/btree/remove/proof.f.js +0 -484
  918. package/fjs/types/btree/set/module.f.d.ts +0 -8
  919. package/fjs/types/btree/set/module.f.js +0 -128
  920. package/fjs/types/btree/set/proof.f.js +0 -368
  921. package/fjs/types/btree/types/module.f.d.ts +0 -23
  922. package/fjs/types/btree/types/module.f.js +0 -9
  923. package/fjs/types/byte_set/module.f.d.ts +0 -16
  924. package/fjs/types/byte_set/module.f.js +0 -30
  925. package/fjs/types/byte_set/proof.f.d.ts +0 -11
  926. package/fjs/types/byte_set/proof.f.js +0 -79
  927. package/fjs/types/function/compare/module.f.d.ts +0 -49
  928. package/fjs/types/function/compare/module.f.js +0 -51
  929. package/fjs/types/function/compare/proof.f.js +0 -47
  930. package/fjs/types/function/module.f.d.ts +0 -28
  931. package/fjs/types/function/module.f.js +0 -19
  932. package/fjs/types/function/operator/module.f.d.ts +0 -48
  933. package/fjs/types/function/operator/module.f.js +0 -16
  934. package/fjs/types/function/operator/proof.f.js +0 -53
  935. package/fjs/types/function/proof.f.js +0 -10
  936. package/fjs/types/list/module.f.d.ts +0 -75
  937. package/fjs/types/list/module.f.js +0 -190
  938. package/fjs/types/list/proof.f.d.ts +0 -31
  939. package/fjs/types/list/proof.f.js +0 -330
  940. package/fjs/types/map/module.f.d.ts +0 -2
  941. package/fjs/types/map/module.f.js +0 -22
  942. package/fjs/types/map/proof.f.js +0 -22
  943. package/fjs/types/nibble_set/module.f.d.ts +0 -27
  944. package/fjs/types/nibble_set/module.f.js +0 -25
  945. package/fjs/types/nibble_set/proof.f.js +0 -60
  946. package/fjs/types/nominal/module.f.d.ts +0 -22
  947. package/fjs/types/nominal/module.f.js +0 -13
  948. package/fjs/types/nominal/proof.f.d.ts +0 -4
  949. package/fjs/types/nominal/proof.f.js +0 -48
  950. package/fjs/types/nullable/module.f.d.ts +0 -21
  951. package/fjs/types/nullable/module.f.js +0 -29
  952. package/fjs/types/nullable/proof.f.js +0 -29
  953. package/fjs/types/number/module.f.d.ts +0 -16
  954. package/fjs/types/number/module.f.js +0 -30
  955. package/fjs/types/number/proof.f.js +0 -124
  956. package/fjs/types/object/module.f.d.ts +0 -54
  957. package/fjs/types/object/module.f.js +0 -25
  958. package/fjs/types/object/proof.f.d.ts +0 -4
  959. package/fjs/types/object/proof.f.js +0 -14
  960. package/fjs/types/ordered_map/module.f.d.ts +0 -17
  961. package/fjs/types/ordered_map/module.f.js +0 -22
  962. package/fjs/types/ordered_map/proof.f.js +0 -73
  963. package/fjs/types/patricia_trie/module.f.d.ts +0 -25
  964. package/fjs/types/patricia_trie/module.f.js +0 -35
  965. package/fjs/types/patricia_trie/proof.f.d.ts +0 -13
  966. package/fjs/types/patricia_trie/proof.f.js +0 -121
  967. package/fjs/types/prime_field/module.f.d.ts +0 -62
  968. package/fjs/types/prime_field/module.f.js +0 -112
  969. package/fjs/types/prime_field/proof.f.js +0 -128
  970. package/fjs/types/range/module.f.d.ts +0 -8
  971. package/fjs/types/range/module.f.js +0 -2
  972. package/fjs/types/range/proof.f.js +0 -9
  973. package/fjs/types/range_map/module.f.d.ts +0 -92
  974. package/fjs/types/range_map/module.f.js +0 -82
  975. package/fjs/types/range_map/proof.f.d.ts +0 -6
  976. package/fjs/types/range_map/proof.f.js +0 -151
  977. package/fjs/types/range_set/module.f.d.ts +0 -5
  978. package/fjs/types/range_set/module.f.js +0 -16
  979. package/fjs/types/range_set/proof.f.d.ts +0 -1
  980. package/fjs/types/range_set/proof.f.js +0 -19
  981. package/fjs/types/result/module.d.ts +0 -3
  982. package/fjs/types/result/module.f.d.ts +0 -61
  983. package/fjs/types/result/module.f.js +0 -54
  984. package/fjs/types/result/module.js +0 -19
  985. package/fjs/types/result/proof.f.js +0 -31
  986. package/fjs/types/rtti/common/module.f.d.ts +0 -121
  987. package/fjs/types/rtti/common/module.f.js +0 -94
  988. package/fjs/types/rtti/common/proof.f.d.ts +0 -8
  989. package/fjs/types/rtti/common/proof.f.js +0 -51
  990. package/fjs/types/rtti/module.f.d.ts +0 -75
  991. package/fjs/types/rtti/module.f.js +0 -34
  992. package/fjs/types/rtti/parse/module.f.d.ts +0 -36
  993. package/fjs/types/rtti/parse/module.f.js +0 -114
  994. package/fjs/types/rtti/parse/proof.f.d.ts +0 -115
  995. package/fjs/types/rtti/parse/proof.f.js +0 -334
  996. package/fjs/types/rtti/proof.f.d.ts +0 -5
  997. package/fjs/types/rtti/proof.f.js +0 -16
  998. package/fjs/types/rtti/ts/module.f.d.ts +0 -118
  999. package/fjs/types/rtti/ts/module.f.js +0 -59
  1000. package/fjs/types/rtti/ts/proof.f.js +0 -75
  1001. package/fjs/types/rtti/validate/module.f.d.ts +0 -4
  1002. package/fjs/types/rtti/validate/module.f.js +0 -74
  1003. package/fjs/types/rtti/validate/proof.f.d.ts +0 -118
  1004. package/fjs/types/rtti/validate/proof.f.js +0 -349
  1005. package/fjs/types/sorted_list/module.f.d.ts +0 -26
  1006. package/fjs/types/sorted_list/module.f.js +0 -51
  1007. package/fjs/types/sorted_list/proof.f.d.ts +0 -4
  1008. package/fjs/types/sorted_list/proof.f.js +0 -46
  1009. package/fjs/types/sorted_set/module.f.d.ts +0 -33
  1010. package/fjs/types/sorted_set/module.f.js +0 -5
  1011. package/fjs/types/sorted_set/proof.f.d.ts +0 -6
  1012. package/fjs/types/sorted_set/proof.f.js +0 -67
  1013. package/fjs/types/string/module.f.d.ts +0 -24
  1014. package/fjs/types/string/module.f.js +0 -35
  1015. package/fjs/types/string/proof.f.js +0 -77
  1016. package/fjs/types/string_set/module.f.d.ts +0 -30
  1017. package/fjs/types/string_set/module.f.js +0 -37
  1018. package/fjs/types/string_set/proof.f.js +0 -43
  1019. package/fjs/types/ts/module.f.d.ts +0 -23
  1020. package/fjs/types/ts/module.f.js +0 -27
  1021. package/fjs/types/ts/proof.f.js +0 -86
  1022. package/fjs/types/uint8array/module.f.d.ts +0 -13
  1023. package/fjs/types/uint8array/module.f.js +0 -34
  1024. package/fjs/types/uint8array/proof.f.d.ts +0 -17
  1025. package/fjs/types/uint8array/proof.f.js +0 -64
  1026. package/fjs/website/module.f.d.ts +0 -3
  1027. package/fjs/website/module.f.js +0 -14
  1028. package/fjs/website/proof.f.js +0 -13
  1029. package/nanvm-lib/tests/proof.f.d.ts +0 -122
  1030. package/nanvm-lib/tests/proof.f.js +0 -330
  1031. package/todo/031-json.f.js +0 -241
  1032. package/todo/proof.f.d.ts +0 -20
  1033. package/todo/proof.f.js +0 -62
  1034. /package/fjs/asn.1/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1035. /package/fjs/asserts/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1036. /package/fjs/{base_n/proof.f.d.ts → basen/proof.f.d.mts} +0 -0
  1037. /package/fjs/bnf/token_symbol/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1038. /package/{todo/031-json.f.d.ts → fjs/ci/common/types.js} +0 -0
  1039. /package/fjs/ci/node/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1040. /package/fjs/crypto/hmac/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1041. /package/fjs/crypto/pow/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1042. /package/fjs/crypto/vdf/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1043. /package/fjs/dev/package_json/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1044. /package/fjs/djs/ast/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1045. /package/fjs/djs/examples/{input.f.d.ts → input.f.d.mts} +0 -0
  1046. /package/fjs/djs/examples/{m.f.d.ts → m.f.d.mts} +0 -0
  1047. /package/fjs/djs/parser/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1048. /package/fjs/djs/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1049. /package/fjs/djs/serializer/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1050. /package/fjs/djs/tokenizer/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1051. /package/fjs/djs/transpiler/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1052. /package/fjs/effects/node/memory/{proof.d.ts → proof.d.mts} +0 -0
  1053. /package/fjs/fsc/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1054. /package/fjs/fsm/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1055. /package/fjs/media/html/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1056. /package/fjs/media/json/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1057. /package/fjs/media/json/serializer/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1058. /package/fjs/media/nix/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1059. /package/fjs/media/type/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1060. /package/fjs/{module.d.ts → module.d.mts} +0 -0
  1061. /package/fjs/path/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1062. /package/fjs/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1063. /package/fjs/protocol/json_rpc/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1064. /package/fjs/sul/id/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1065. /package/fjs/sul/level/literal/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1066. /package/fjs/text/ascii/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1067. /package/fjs/text/code_point/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1068. /package/fjs/text/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1069. /package/fjs/text/sgr/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1070. /package/fjs/text/utf8/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1071. /package/fjs/types/array/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1072. /package/fjs/types/bigfloat/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1073. /package/fjs/types/bit_vec/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1074. /package/fjs/types/btree/remove/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1075. /package/fjs/types/btree/set/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1076. /package/fjs/{basen/base128/proof.f.d.ts → types/function/compare/proof.f.d.mts} +0 -0
  1077. /package/fjs/types/function/operator/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1078. /package/fjs/types/function/{compare/proof.f.d.ts → proof.f.d.mts} +0 -0
  1079. /package/fjs/types/map/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1080. /package/fjs/types/nibble_set/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1081. /package/fjs/types/nullable/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1082. /package/fjs/types/number/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1083. /package/fjs/types/option/{module.f.d.ts → types.d.ts} +0 -0
  1084. /package/fjs/types/option/{module.f.js → types.js} +0 -0
  1085. /package/fjs/types/ordered_map/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1086. /package/fjs/types/phantom/{module.f.d.ts → types.d.ts} +0 -0
  1087. /package/fjs/types/phantom/{module.f.js → types.js} +0 -0
  1088. /package/fjs/types/prime_field/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1089. /package/fjs/types/{function/proof.f.d.ts → range/proof.f.d.mts} +0 -0
  1090. /package/fjs/types/{range/proof.f.d.ts → range_set/proof.f.d.mts} +0 -0
  1091. /package/fjs/types/result/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1092. /package/fjs/types/rtti/ts/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1093. /package/fjs/types/string/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1094. /package/fjs/types/string_set/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1095. /package/fjs/types/ts/{proof.f.d.ts → proof.f.d.mts} +0 -0
  1096. /package/fjs/website/{proof.f.d.ts → proof.f.d.mts} +0 -0
@@ -0,0 +1,749 @@
1
+ /**
2
+ * @import { Cas } from '../types.ts'
3
+ * @import { Vec } from '../../types/bit_vec/types.ts'
4
+ * @import { Ok } from '../../types/result/types.ts'
5
+ * @import { IoResult } from '../../effects/node/types.ts'
6
+ * @import { List } from '../../effects/list/types.ts'
7
+ * @import { RevisionData } from './types.ts'
8
+ */
9
+
10
+ import { assert, assertEq } from '../../asserts/module.f.mjs'
11
+ import { pure } from '../../effects/module.f.mjs'
12
+ import { fileCas } from '../module.f.mjs'
13
+ import { sha256 } from '../../crypto/sha2/module.f.mjs'
14
+ import { emptyState, virtual } from '../../effects/node/virtual/module.f.mjs'
15
+ import { vec, vec8 } from '../../types/bit_vec/module.f.mjs'
16
+ import { cBase32ToVec, vecToCBase32 } from '../../basen/cbase32/module.f.mjs'
17
+ import { unwrap } from '../../types/nullable/module.f.mjs'
18
+ import { ok, error } from '../../types/result/module.f.mjs'
19
+ import { nonEmpty, empty as elEmpty } from '../../effects/list/module.f.mjs'
20
+ import { tryUtf8 } from '../../text/module.f.mjs'
21
+
22
+ import { dialect as revisionDialect } from '../../media/revision/module.f.mjs'
23
+ import {
24
+ buildCache, decodeRevisionBlob, initEvo, evo, emptyCache, syncRevision,
25
+ } from './module.f.mjs'
26
+
27
+ const home = '.'
28
+
29
+ // A `Cas<never>` whose `write` always fails — used to reach `addRevision`'s
30
+ // store-write-failure branch, which real `fileCas` has no easy way to trigger.
31
+ /** @type {Cas<never>} */
32
+ const writeFailingCas = {
33
+ read: () => elEmpty(),
34
+ write: () => pure(error('boom')),
35
+ list: () => pure([]),
36
+ }
37
+
38
+ // A `Cas<never>` whose `read` yields an error item that is *not* a missing
39
+ // shard — what a permission error, a mid-stream I/O failure, or a blob too
40
+ // large for `collectRead` to buffer looks like to a caller.
41
+ /** @type {Cas<never>} */
42
+ const readFailingCas = {
43
+ read: () => nonEmpty(/** @type {IoResult<Vec>} */ (error('boom')), elEmpty()),
44
+ write: () => pure(error('write not supported')),
45
+ list: () => pure([]),
46
+ }
47
+
48
+ // A `Cas<never>` backed by a fixed set of (hash, content) entries, returned
49
+ // from `list()` in exactly the given order — used to control the order
50
+ // `buildCache` sees hashes in, independent of any real filesystem's
51
+ // (hash-lexical, not causal) directory-listing order.
52
+ /** @type {(entries: readonly (readonly [Vec, Vec])[]) => Cas<never>} */
53
+ const fixedCas = entries => ({
54
+ read: hash => {
55
+ const found = entries.find(([h]) => vecToCBase32(h) === vecToCBase32(hash))
56
+ return found === undefined
57
+ ? nonEmpty(/** @type {IoResult<Vec>} */ (error('not found')), elEmpty())
58
+ : nonEmpty(/** @type {IoResult<Vec>} */ (ok(found[1])), elEmpty())
59
+ },
60
+ write: () => pure(error('write not supported')),
61
+ list: () => pure(entries.map(([h]) => h)),
62
+ })
63
+
64
+ export const proof = {
65
+ buildCacheEmptyStoreYieldsEmptyCache: () => {
66
+ const c = fileCas(sha256)(home)
67
+ const [, cache] = virtual(emptyState)(buildCache(c))
68
+ assertEq(JSON.stringify(cache), JSON.stringify(emptyCache))
69
+ },
70
+ buildCacheSkipsNonRevisionBlob: () => {
71
+ const c = fileCas(sha256)(home)
72
+ const content = vec8(0x41n) // 'A' — valid UTF-8, not revision JSON
73
+ const [state1] = virtual(emptyState)(c.write(nonEmpty(ok(content), /** @type {List<never, Ok<Vec>>} */ (elEmpty()))))
74
+ const [, cache] = virtual(state1)(buildCache(c))
75
+ assertEq(Object.keys(cache.bySubject).length, 0)
76
+ },
77
+ decodeRevisionBlobMissingHashIsNull: () => {
78
+ const c = fileCas(sha256)(home)
79
+ const [, revision] = virtual(emptyState)(decodeRevisionBlob(c)(vec8(0x99n)))
80
+ assertEq(revision, null)
81
+ },
82
+ decodeRevisionBlobNonUtf8IsNull: () => {
83
+ const c = fileCas(sha256)(home)
84
+ const oddVec = vec(5n)(0b10101n) // not a whole number of bytes
85
+ const [state1, w] = virtual(emptyState)(c.write(nonEmpty(ok(oddVec), /** @type {List<never, Ok<Vec>>} */ (elEmpty()))))
86
+ assert(w[0] === 'ok', ['expected write ok', w])
87
+ const [, revision] = virtual(state1)(decodeRevisionBlob(c)(w[1]))
88
+ assertEq(revision, null)
89
+ },
90
+ decodeRevisionBlobInvalidJsonIsNull: () => {
91
+ const c = fileCas(sha256)(home)
92
+ const content = vec8(0x7bn) // '{' alone: valid UTF-8, not parseable JSON
93
+ const [state1, w] = virtual(emptyState)(c.write(nonEmpty(ok(content), /** @type {List<never, Ok<Vec>>} */ (elEmpty()))))
94
+ assert(w[0] === 'ok', ['expected write ok', w])
95
+ const [, revision] = virtual(state1)(decodeRevisionBlob(c)(w[1]))
96
+ assertEq(revision, null)
97
+ },
98
+ decodeRevisionBlobValidRevisionRoundTrips: () => {
99
+ const c = fileCas(sha256)(home)
100
+ const subjectHash = vecToCBase32(vec8(0x11n))
101
+ const text = `{"dialect":"${revisionDialect}","subject":"${subjectHash}","parents":[],"snapshot":"${subjectHash}","generation":0}`
102
+ const bytes = tryUtf8(text)
103
+ assert(bytes !== null, 'expected the sample revision text to encode as UTF-8')
104
+ const [state1, w] = virtual(emptyState)(c.write(nonEmpty(ok(bytes), /** @type {List<never, Ok<Vec>>} */ (elEmpty()))))
105
+ assert(w[0] === 'ok', ['expected write ok', w])
106
+ const [, revision] = virtual(state1)(decodeRevisionBlob(c)(w[1]))
107
+ assert(revision !== null, 'expected a decoded revision')
108
+ assertEq(revision?.subject, subjectHash)
109
+ },
110
+ buildCacheIncludesScannedRevision: () => {
111
+ // Unlike the `add`-driven tests below (which fold one revision at a
112
+ // time), this seeds a `vnd.fjs.revision` blob directly into the store
113
+ // and scans it with `buildCache`, covering the "found a revision"
114
+ // branch of the full-store fold.
115
+ const c = fileCas(sha256)(home)
116
+ const subjectHash = vecToCBase32(vec8(0x12n))
117
+ const text = `{"dialect":"${revisionDialect}","subject":"${subjectHash}","parents":[],"snapshot":"${subjectHash}","generation":0}`
118
+ const bytes = tryUtf8(text)
119
+ assert(bytes !== null, 'expected the sample revision text to encode as UTF-8')
120
+ const [state1, w] = virtual(emptyState)(fileCas(sha256)(home).write(nonEmpty(ok(bytes), /** @type {List<never, Ok<Vec>>} */ (elEmpty()))))
121
+ assert(w[0] === 'ok', ['expected write ok', w])
122
+ const [, cache] = virtual(state1)(buildCache(c))
123
+ assertEq(cache.bySubject[subjectHash]?.hashes.length, 1)
124
+ assertEq(cache.bySubject[subjectHash]?.hashes[0], vecToCBase32(w[1]))
125
+ },
126
+ // Regression: `cas.list()` enumerates a real store by hash-sharded path,
127
+ // not revision ancestry, so a child's hash can sort (and therefore be
128
+ // scanned) before its parent's. `buildCache` must still end up with only
129
+ // the child as a head — the whole point of tracking `hashes`/`parents`
130
+ // as separate sets (see the module doc) rather than an incremental head
131
+ // list.
132
+ buildCacheOrderIndependentWhenChildScannedBeforeParent: () => {
133
+ const rootHash = vec8(0xaan)
134
+ const childHash = vec8(0xbbn)
135
+ const rootCBase32 = vecToCBase32(rootHash)
136
+ const childCBase32 = vecToCBase32(childHash)
137
+ const snapshotHash = vecToCBase32(vec8(0xccn))
138
+ const rootText = `{"dialect":"${revisionDialect}","subject":"doc","parents":[],"snapshot":"${snapshotHash}","generation":0}`
139
+ const childText = `{"dialect":"${revisionDialect}","subject":"doc","parents":["${rootCBase32}"],"snapshot":"${snapshotHash}","generation":1}`
140
+ const rootBytes = tryUtf8(rootText)
141
+ const childBytes = tryUtf8(childText)
142
+ assert(rootBytes !== null && childBytes !== null, 'expected sample revisions to encode as UTF-8')
143
+ const cas = fixedCas([[childHash, childBytes], [rootHash, rootBytes]])
144
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(cas))
145
+ const [, heads] = virtual(state0)(evo(cas)(cacheKey).head('doc'))
146
+ assertEq(heads.length, 1)
147
+ assertEq(heads[0], childCBase32)
148
+ },
149
+ // Regression: `cBase32ToVec` accepts more than one spelling of the same
150
+ // hash (case, and the `i`/`l`/`o` alphabet aliases). A parent reference
151
+ // recorded in a non-canonical spelling must still demote the parent from
152
+ // the head set — `headsOf` compares hash strings directly, so caching
153
+ // the parent verbatim (instead of its canonical `vecToCBase32` spelling)
154
+ // would leave the parent listed as a head alongside its child.
155
+ buildCacheCanonicalizesNonCanonicalParentHashes: () => {
156
+ const rootHash = vec8(0xffn)
157
+ const rootCanonical = vecToCBase32(rootHash) // "zy" — has letters to uppercase
158
+ const rootNonCanonical = rootCanonical.toUpperCase()
159
+ assert(rootNonCanonical !== rootCanonical, 'expected the sample hash to contain letters')
160
+ const childHash = vec8(0xeen)
161
+ const snapshotHash = vecToCBase32(vec8(0xddn))
162
+ const rootText = `{"dialect":"${revisionDialect}","subject":"doc","parents":[],"snapshot":"${snapshotHash}","generation":0}`
163
+ const childText = `{"dialect":"${revisionDialect}","subject":"doc","parents":["${rootNonCanonical}"],"snapshot":"${snapshotHash}","generation":1}`
164
+ const rootBytes = tryUtf8(rootText)
165
+ const childBytes = tryUtf8(childText)
166
+ assert(rootBytes !== null && childBytes !== null, 'expected sample revisions to encode as UTF-8')
167
+ const cas = fixedCas([[rootHash, rootBytes], [childHash, childBytes]])
168
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(cas))
169
+ const [, heads] = virtual(state0)(evo(cas)(cacheKey).head('doc'))
170
+ assertEq(heads.length, 1)
171
+ assertEq(heads[0], vecToCBase32(childHash))
172
+ },
173
+ // Two concurrent children of one root: both become heads, the root stops
174
+ // being one. Exercises addRevisionToCache's fold across a first insert
175
+ // (no prior heads for the subject), a removal (a parent leaving the head
176
+ // set), and a keep (an unrelated existing head surviving the fold).
177
+ addRevisionBuildsHeadsAcrossChainAndFork: () => {
178
+ const c = fileCas(sha256)(home)
179
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
180
+ const e = evo(c)(cacheKey)
181
+ const snapshotHash = vecToCBase32(vec8(0x22n))
182
+
183
+ /** @type {RevisionData} */
184
+ const rev0 = { parents: [], subject: 'doc', snapshot: snapshotHash }
185
+ const [state1, rev0Result] = virtual(state0)(e.add(rev0))
186
+ assert(rev0Result[0] === 'ok', ['expected rev0 ok', rev0Result])
187
+ const rev0Hash = rev0Result[1]
188
+
189
+ // rev1 inherits rev0's snapshot; rev2 states a different one — so the
190
+ // two concurrent children are genuinely distinct blobs (both children
191
+ // of rev0, same generation), not one deduplicated revision.
192
+ /** @type {RevisionData} */
193
+ const rev1 = { parents: [rev0Hash], subject: 'doc' }
194
+ const [state2, rev1Result] = virtual(state1)(e.add(rev1))
195
+ assert(rev1Result[0] === 'ok', ['expected rev1 ok', rev1Result])
196
+ const rev1Hash = rev1Result[1]
197
+
198
+ /** @type {RevisionData} */
199
+ const rev2 = { parents: [rev0Hash], subject: 'doc', snapshot: vecToCBase32(vec8(0x23n)) }
200
+ const [state3, rev2Result] = virtual(state2)(e.add(rev2))
201
+ assert(rev2Result[0] === 'ok', ['expected rev2 ok', rev2Result])
202
+ const rev2Hash = rev2Result[1]
203
+
204
+ const [state4, heads] = virtual(state3)(e.head('doc'))
205
+ assertEq(heads.length, 2)
206
+ assert(heads.includes(rev1Hash), ['expected rev1 to remain a head', heads])
207
+ assert(heads.includes(rev2Hash), ['expected rev2 to be a head', heads])
208
+ assert(!heads.includes(rev0Hash), ['expected rev0 to no longer be a head', heads])
209
+
210
+ const [, subjects] = virtual(state4)(e.list())
211
+ assertEq(subjects.length, 1)
212
+ assertEq(subjects[0], 'doc')
213
+ },
214
+ // `list()` and `list(true)` partition subjects by the archived flags of
215
+ // their current heads: a lone root revision carrying `archived: true`
216
+ // makes its subject archived, one without it leaves the subject active,
217
+ // and neither subject appears in the other's result.
218
+ listPartitionsSubjectsByHeadArchivedFlag: () => {
219
+ const c = fileCas(sha256)(home)
220
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
221
+ const e = evo(c)(cacheKey)
222
+ const [state1, live] = virtual(state0)(e.add({ parents: [], subject: 'live', snapshot: vecToCBase32(vec8(0x40n)) }))
223
+ assert(live[0] === 'ok', ['expected the active add to succeed', live])
224
+ const [state2, gone] = virtual(state1)(e.add({ parents: [], subject: 'gone', snapshot: vecToCBase32(vec8(0x41n)), archived: true }))
225
+ assert(gone[0] === 'ok', ['expected the archived add to succeed', gone])
226
+ const [state3, active] = virtual(state2)(e.list())
227
+ assertEq(active.length, 1)
228
+ assertEq(active[0], 'live')
229
+ const [, archived] = virtual(state3)(e.list(true))
230
+ assertEq(archived.length, 1)
231
+ assertEq(archived[0], 'gone')
232
+ },
233
+ // Concurrent heads can disagree about `archived`. One unarchived head
234
+ // keeps the whole subject active — there is still a head left to build on
235
+ // — so the subject stays out of the archived-only result.
236
+ listTreatsDisagreeingHeadsAsActive: () => {
237
+ const c = fileCas(sha256)(home)
238
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
239
+ const e = evo(c)(cacheKey)
240
+ const [state1, root] = virtual(state0)(e.add({ parents: [], subject: 'doc', snapshot: vecToCBase32(vec8(0x42n)) }))
241
+ assert(root[0] === 'ok', ['expected root ok', root])
242
+ // The two children differ only in `archived`, which is enough to make
243
+ // them distinct blobs, hence two concurrent heads of one root.
244
+ const [state2, kept] = virtual(state1)(e.add({ parents: [root[1]], subject: 'doc' }))
245
+ assert(kept[0] === 'ok', ['expected the unarchived child ok', kept])
246
+ const [state3, dropped] = virtual(state2)(e.add({ parents: [root[1]], subject: 'doc', archived: true }))
247
+ assert(dropped[0] === 'ok', ['expected the archived child ok', dropped])
248
+ const [state4, heads] = virtual(state3)(e.head('doc'))
249
+ assertEq(heads.length, 2)
250
+ const [state5, active] = virtual(state4)(e.list())
251
+ assertEq(active.length, 1)
252
+ assertEq(active[0], 'doc')
253
+ const [, archived] = virtual(state5)(e.list(true))
254
+ assertEq(archived.length, 0)
255
+ },
256
+ // `archived` is a property of a revision, not of a subject: a subject
257
+ // archived at one revision is active again as soon as an unarchived child
258
+ // demotes that revision out of the head set.
259
+ listIgnoresArchivedRevisionsThatAreNoLongerHeads: () => {
260
+ const c = fileCas(sha256)(home)
261
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
262
+ const e = evo(c)(cacheKey)
263
+ const [state1, root] = virtual(state0)(e.add({ parents: [], subject: 'doc', snapshot: vecToCBase32(vec8(0x45n)), archived: true }))
264
+ assert(root[0] === 'ok', ['expected the archived root ok', root])
265
+ const [state2, revived] = virtual(state1)(e.add({ parents: [root[1]], subject: 'doc' }))
266
+ assert(revived[0] === 'ok', ['expected the unarchived child ok', revived])
267
+ const [state3, active] = virtual(state2)(e.list())
268
+ assertEq(active.length, 1)
269
+ assertEq(active[0], 'doc')
270
+ const [, archived] = virtual(state3)(e.list(true))
271
+ assertEq(archived.length, 0)
272
+ },
273
+ // A subject can end up with no current head at all, and a status is a
274
+ // statement about heads — so such a subject is neither active nor
275
+ // archived and belongs to neither result. Nothing verifies that a stored
276
+ // blob actually hashes to the key it sits under, so a hand-crafted or
277
+ // corrupt store can present a revision naming its own hash as its parent;
278
+ // `fixedCas` reproduces exactly that, which a real `fileCas` cannot.
279
+ listExcludesSubjectWithNoCurrentHeads: () => {
280
+ const selfHash = vec8(0x43n)
281
+ const snapshotHash = vecToCBase32(vec8(0x44n))
282
+ const text = `{"dialect":"${revisionDialect}","subject":"doc","parents":["${vecToCBase32(selfHash)}"],"snapshot":"${snapshotHash}","generation":1}`
283
+ const bytes = tryUtf8(text)
284
+ assert(bytes !== null, 'expected the sample revision text to encode as UTF-8')
285
+ const cas = fixedCas([[selfHash, bytes]])
286
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(cas))
287
+ const e = evo(cas)(cacheKey)
288
+ const [state1, heads] = virtual(state0)(e.head('doc'))
289
+ assertEq(heads.length, 0)
290
+ const [state2, active] = virtual(state1)(e.list())
291
+ assertEq(active.length, 0)
292
+ const [, archived] = virtual(state2)(e.list(true))
293
+ assertEq(archived.length, 0)
294
+ },
295
+ // Adding the exact same revision twice yields the same (deduplicated)
296
+ // content hash and must not duplicate the head entry.
297
+ addRevisionIdempotentOnDuplicateContent: () => {
298
+ const c = fileCas(sha256)(home)
299
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
300
+ const e = evo(c)(cacheKey)
301
+ /** @type {RevisionData} */
302
+ const input = { parents: [], subject: 'x', snapshot: vecToCBase32(vec8(0x33n)) }
303
+ const [state1, r1] = virtual(state0)(e.add(input))
304
+ assert(r1[0] === 'ok', ['expected first add ok', r1])
305
+ const [state2, r2] = virtual(state1)(e.add(input))
306
+ assert(r2[0] === 'ok', ['expected second add ok', r2])
307
+ assertEq(r1[1], r2[1])
308
+ const [, heads] = virtual(state2)(e.head('x'))
309
+ assertEq(heads.length, 1)
310
+ },
311
+ // Two `add` calls describing the same logical revision but spelling the
312
+ // parent reference differently (canonical vs. an accepted uppercase
313
+ // alias) must serialize identically and dedupe to one head — otherwise
314
+ // `addRevision` itself would be the source of the very spelling drift
315
+ // `canonicalHash` exists to prevent.
316
+ addRevisionCanonicalizesParentSpellingBeforeSerializing: () => {
317
+ const c = fileCas(sha256)(home)
318
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
319
+ const e = evo(c)(cacheKey)
320
+ /** @type {RevisionData} */
321
+ const root = { parents: [], subject: 'doc', snapshot: vecToCBase32(vec8(0x2en)) }
322
+ const [state1, rootResult] = virtual(state0)(e.add(root))
323
+ assert(rootResult[0] === 'ok', ['expected root ok', rootResult])
324
+ const rootHash = rootResult[1]
325
+ assert(rootHash !== rootHash.toUpperCase(), 'expected the sample hash to contain letters')
326
+ /** @type {RevisionData} */
327
+ const child1 = { parents: [rootHash], subject: 'doc' }
328
+ const [state2, child1Result] = virtual(state1)(e.add(child1))
329
+ assert(child1Result[0] === 'ok', ['expected child1 ok', child1Result])
330
+ /** @type {RevisionData} */
331
+ const child2 = { parents: [rootHash.toUpperCase()], subject: 'doc' }
332
+ const [state3, child2Result] = virtual(state2)(e.add(child2))
333
+ assert(child2Result[0] === 'ok', ['expected child2 ok', child2Result])
334
+ assertEq(child1Result[1], child2Result[1])
335
+ const [, heads] = virtual(state3)(e.head('doc'))
336
+ assertEq(heads.length, 1)
337
+ assertEq(heads[0], child1Result[1])
338
+ },
339
+ // `subject` omitted with exactly one parent is inherited from that
340
+ // parent's own `subject`.
341
+ addRevisionResolvesSubjectFromSingleParent: () => {
342
+ const c = fileCas(sha256)(home)
343
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
344
+ const e = evo(c)(cacheKey)
345
+ /** @type {RevisionData} */
346
+ const root = { parents: [], subject: 'inherit-me', snapshot: vecToCBase32(vec8(0x44n)) }
347
+ const [state1, rootResult] = virtual(state0)(e.add(root))
348
+ assert(rootResult[0] === 'ok', ['expected root ok', rootResult])
349
+ const rootHash = rootResult[1]
350
+ /** @type {RevisionData} */
351
+ const child = { parents: [rootHash] }
352
+ const [state2, childResult] = virtual(state1)(e.add(child))
353
+ assert(childResult[0] === 'ok', ['expected child ok', childResult])
354
+ const childHash = childResult[1]
355
+ const [, heads] = virtual(state2)(e.head('inherit-me'))
356
+ assertEq(heads.length, 1)
357
+ assertEq(heads[0], childHash)
358
+ },
359
+ // `add` writes both inference-derived fields explicitly: a root gets
360
+ // `generation` 0 and, with no input `snapshot`, its `subject` (a hash) as
361
+ // the snapshot reference; a single-parent child with no input `snapshot`
362
+ // inherits the parent's stored snapshot and gets `generation` 1.
363
+ addComputesGenerationAndResolvesSnapshot: () => {
364
+ const c = fileCas(sha256)(home)
365
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
366
+ const e = evo(c)(cacheKey)
367
+ const subjectHash = vecToCBase32(vec8(0x71n))
368
+ const [state1, rootResult] = virtual(state0)(e.add({ parents: [], subject: subjectHash }))
369
+ assert(rootResult[0] === 'ok', ['expected root ok', rootResult])
370
+ const rootHashVec = unwrap(cBase32ToVec(rootResult[1]))
371
+ const [state2, root] = virtual(state1)(decodeRevisionBlob(c)(rootHashVec))
372
+ assert(root !== null, 'expected the stored root to decode')
373
+ assertEq(root?.generation, 0)
374
+ assertEq(root?.snapshot, subjectHash)
375
+
376
+ const [state3, childResult] = virtual(state2)(e.add({ parents: [rootResult[1]], subject: subjectHash }))
377
+ assert(childResult[0] === 'ok', ['expected child ok', childResult])
378
+ const childHashVec = unwrap(cBase32ToVec(childResult[1]))
379
+ const [, child] = virtual(state3)(decodeRevisionBlob(c)(childHashVec))
380
+ assert(child !== null, 'expected the stored child to decode')
381
+ assertEq(child?.generation, 1)
382
+ assertEq(child?.snapshot, subjectHash)
383
+ },
384
+ // A merge takes `1 + max(parents' generations)`: a parent at generation 2
385
+ // and one at generation 1 yield generation 3.
386
+ addComputesMergeGenerationFromMaxOfParents: () => {
387
+ const c = fileCas(sha256)(home)
388
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
389
+ const e = evo(c)(cacheKey)
390
+ const snap = vecToCBase32(vec8(0x72n))
391
+ // Mainline chain: root(gen0) → a(gen1) → b(gen2).
392
+ const [state1, root] = virtual(state0)(e.add({ parents: [], subject: 'm', snapshot: snap }))
393
+ assert(root[0] === 'ok', ['expected root ok', root])
394
+ const [state2, a] = virtual(state1)(e.add({ parents: [root[1]], subject: 'm', snapshot: snap }))
395
+ assert(a[0] === 'ok', ['expected a ok', a])
396
+ const [state3, b] = virtual(state2)(e.add({ parents: [a[1]], subject: 'm', snapshot: snap }))
397
+ assert(b[0] === 'ok', ['expected b ok', b])
398
+ // Side branch off root: c(gen1).
399
+ const [state4, cRev] = virtual(state3)(e.add({ parents: [root[1]], subject: 'm', snapshot: snap }))
400
+ assert(cRev[0] === 'ok', ['expected c ok', cRev])
401
+ // Merge of b(gen2) and c(gen1) → gen3.
402
+ const [state5, merge] = virtual(state4)(e.add({ parents: [b[1], cRev[1]], subject: 'm', snapshot: snap }))
403
+ assert(merge[0] === 'ok', ['expected merge ok', merge])
404
+ const mergeHashVec = unwrap(cBase32ToVec(merge[1]))
405
+ const [, mergeRev] = virtual(state5)(decodeRevisionBlob(c)(mergeHashVec))
406
+ assert(mergeRev !== null, 'expected the stored merge to decode')
407
+ assertEq(mergeRev?.generation, 3)
408
+ },
409
+ // `generation` is an input field only so a value read back by
410
+ // `revision` round-trips into `add` unchanged: `add` never reads it, and
411
+ // supplying a wrong one must not reach the stored blob — the revision is
412
+ // byte-identical to the same `add` without it.
413
+ addIgnoresSuppliedGeneration: () => {
414
+ const c = fileCas(sha256)(home)
415
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
416
+ const e = evo(c)(cacheKey)
417
+ const subjectHash = vecToCBase32(vec8(0x73n))
418
+ const [state1, claimed] = virtual(state0)(e.add({ parents: [], subject: subjectHash, generation: 42 }))
419
+ assert(claimed[0] === 'ok', ['expected add ok', claimed])
420
+ const [state2, plain] = virtual(state1)(e.add({ parents: [], subject: subjectHash }))
421
+ assert(plain[0] === 'ok', ['expected add ok', plain])
422
+ assertEq(claimed[1], plain[1])
423
+ const [, revision] = virtual(state2)(e.revision(claimed[1]))
424
+ assert(revision[0] === 'ok', ['expected revision ok', revision])
425
+ assertEq(revision[1].generation, 0)
426
+ },
427
+ addRevisionSubjectRequiredForZeroParents: () => {
428
+ const c = fileCas(sha256)(home)
429
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
430
+ const e = evo(c)(cacheKey)
431
+ const [, result] = virtual(state0)(e.add({ parents: [] }))
432
+ assertEq(result[0], 'error')
433
+ assert(result[0] === 'error' && result[1].includes('subject is required'), ['unexpected message', result])
434
+ },
435
+ // Zero parents and no input `snapshot`: `resolveSnapshot` falls back to
436
+ // `subject` as the reference, which must itself be a hash. A subject with
437
+ // characters outside the cbase32 alphabet ('not-a-hash!') therefore has
438
+ // nothing to resolve the snapshot to and is an error — the format requires
439
+ // an explicit `snapshot`.
440
+ addRevisionNonHashSubjectWithoutSnapshotIsError: () => {
441
+ const c = fileCas(sha256)(home)
442
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
443
+ const e = evo(c)(cacheKey)
444
+ const [, result] = virtual(state0)(e.add({ parents: [], subject: 'not-a-hash!' }))
445
+ assertEq(result[0], 'error')
446
+ assert(result[0] === 'error' && result[1].includes('subject must be a valid hash'), ['unexpected message', result])
447
+ },
448
+ addRevisionInvalidParentHashIsError: () => {
449
+ const c = fileCas(sha256)(home)
450
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
451
+ const e = evo(c)(cacheKey)
452
+ const [, result] = virtual(state0)(e.add({ parents: ['not a valid cbase32!'] }))
453
+ assertEq(result[0], 'error')
454
+ assert(result[0] === 'error' && result[1].includes('invalid parent hash'), ['unexpected message', result])
455
+ },
456
+ addRevisionParentNotARevisionIsError: () => {
457
+ const c = fileCas(sha256)(home)
458
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
459
+ const e = evo(c)(cacheKey)
460
+ const missingParent = vecToCBase32(vec8(0x55n))
461
+ const [, result] = virtual(state0)(e.add({ parents: [missingParent] }))
462
+ assertEq(result[0], 'error')
463
+ assert(result[0] === 'error' && result[1].includes('parent is not a revision blob'), ['unexpected message', result])
464
+ },
465
+ // An explicit `subject` must not bypass parent validation: a missing
466
+ // parent is still an error even though `subject` alone would otherwise
467
+ // resolve without looking at any parent.
468
+ addRevisionValidatesParentsEvenWithExplicitSubject: () => {
469
+ const c = fileCas(sha256)(home)
470
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
471
+ const e = evo(c)(cacheKey)
472
+ const missingParent = vecToCBase32(vec8(0x66n))
473
+ const [, result] = virtual(state0)(e.add({ parents: [missingParent], subject: 'doc' }))
474
+ assertEq(result[0], 'error')
475
+ assert(result[0] === 'error' && result[1].includes('parent is not a revision blob'), ['unexpected message', result])
476
+ },
477
+ // A revision models one step in the evolution of a single subject: a
478
+ // parent that actually belongs to a *different* subject must be
479
+ // rejected, even though it exists and is a valid revision — otherwise
480
+ // the new revision would silently graft onto an unrelated object's
481
+ // history, and head demotion (scoped to the child's own subject) would
482
+ // never remove the parent from its real subject's head set.
483
+ addRevisionRejectsCrossSubjectParent: () => {
484
+ const c = fileCas(sha256)(home)
485
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
486
+ const e = evo(c)(cacheKey)
487
+ /** @type {RevisionData} */
488
+ const rootA = { parents: [], subject: 'A', snapshot: vecToCBase32(vec8(0x67n)) }
489
+ const [state1, rootAResult] = virtual(state0)(e.add(rootA))
490
+ assert(rootAResult[0] === 'ok', ['expected rootA ok', rootAResult])
491
+ const [, result] = virtual(state1)(e.add({ parents: [rootAResult[1]], subject: 'B' }))
492
+ assertEq(result[0], 'error')
493
+ assert(result[0] === 'error' && result[1].includes('different subject'), ['unexpected message', result])
494
+ },
495
+ // With multiple parents, a failure on an earlier one short-circuits the
496
+ // fold — the second (here, a well-formed but nonexistent) parent is
497
+ // never even looked up.
498
+ addRevisionShortCircuitsOnFirstInvalidParentAmongMultiple: () => {
499
+ const c = fileCas(sha256)(home)
500
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
501
+ const e = evo(c)(cacheKey)
502
+ const missingParent = vecToCBase32(vec8(0x99n))
503
+ const [, result] = virtual(state0)(e.add({ parents: ['not a valid cbase32!', missingParent], subject: 'doc' }))
504
+ assertEq(result[0], 'error')
505
+ assert(result[0] === 'error' && result[1].includes('invalid parent hash'), ['unexpected message', result])
506
+ },
507
+ // Two *valid* parents without an explicit `snapshot` cannot resolve one
508
+ // (no single parent snapshot to inherit) — a distinct failure from a
509
+ // missing/invalid parent, reported by `resolveSnapshot` at the write
510
+ // boundary now that the format requires an explicit `snapshot`.
511
+ addRevisionInvalidReferencesIsError: () => {
512
+ const c = fileCas(sha256)(home)
513
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
514
+ const e = evo(c)(cacheKey)
515
+ /** @type {RevisionData} */
516
+ const rootA = { parents: [], subject: 'merge', snapshot: vecToCBase32(vec8(0x77n)) }
517
+ const [state1, rootAResult] = virtual(state0)(e.add(rootA))
518
+ assert(rootAResult[0] === 'ok', ['expected rootA ok', rootAResult])
519
+ /** @type {RevisionData} */
520
+ const rootB = { parents: [], subject: 'merge', snapshot: vecToCBase32(vec8(0x88n)) }
521
+ const [state2, rootBResult] = virtual(state1)(e.add(rootB))
522
+ assert(rootBResult[0] === 'ok', ['expected rootB ok', rootBResult])
523
+ const [, result] = virtual(state2)(e.add({ parents: [rootAResult[1], rootBResult[1]], subject: 'merge' }))
524
+ assertEq(result[0], 'error')
525
+ assert(result[0] === 'error' && !result[1].includes('parent is not a revision blob'), ['unexpected message', result])
526
+ },
527
+ addRevisionTooLargeToEncodeIsError: () => {
528
+ const c = fileCas(sha256)(home)
529
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
530
+ const e = evo(c)(cacheKey)
531
+ const hugeSubject = 'x'.repeat(200_000)
532
+ /** @type {RevisionData} */
533
+ const input = { parents: [], subject: hugeSubject, snapshot: vecToCBase32(vec8(0x88n)) }
534
+ const [, result] = virtual(state0)(e.add(input))
535
+ assertEq(result[0], 'error')
536
+ assert(result[0] === 'error' && result[1] === 'revision too large to encode', ['unexpected message', result])
537
+ },
538
+ addRevisionWriteFailureIsError: () => {
539
+ const [, cacheKey] = virtual(emptyState)(initEvo(writeFailingCas))
540
+ const e = evo(writeFailingCas)(cacheKey)
541
+ const [, result] = virtual(emptyState)(e.add({ parents: [], subject: vecToCBase32(vec8(0x99n)) }))
542
+ assertEq(result[0], 'error')
543
+ assert(result[0] === 'error' && result[1] === 'failed to write revision to CAS', ['unexpected message', result])
544
+ },
545
+ // Every way `revision` can fail is its own message, not one `null`: an
546
+ // undecodable hash, a hash the store has nothing under, a read that failed
547
+ // for any other reason, and a blob that is not a revision.
548
+ // `decodeRevisionBlob` collapses all but the first (it exists to scan
549
+ // stores of arbitrary content); this read keeps them apart.
550
+ revisionInvalidHashIsError: () => {
551
+ const c = fileCas(sha256)(home)
552
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
553
+ const e = evo(c)(cacheKey)
554
+ const [, result] = virtual(state0)(e.revision('not a valid cbase32!'))
555
+ assertEq(result[0], 'error')
556
+ assert(result[0] === 'error' && result[1].includes('invalid hash'), ['unexpected message', result])
557
+ },
558
+ revisionMissingHashIsError: () => {
559
+ const c = fileCas(sha256)(home)
560
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
561
+ const e = evo(c)(cacheKey)
562
+ const [, result] = virtual(state0)(e.revision(vecToCBase32(vec8(0x9an))))
563
+ assertEq(result[0], 'error')
564
+ assert(result[0] === 'error' && result[1].includes('revision not found'), ['unexpected message', result])
565
+ },
566
+ // Regression: a read failure that is not a missing shard — a permission or
567
+ // mid-stream I/O error, or a blob too large to buffer into one `Vec` —
568
+ // must not be reported as "not found". The blob may well be there; saying
569
+ // it is absent would be a false answer, not merely a vague one.
570
+ revisionReadFailureIsNotReportedAsMissing: () => {
571
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(readFailingCas))
572
+ const e = evo(readFailingCas)(cacheKey)
573
+ const [, result] = virtual(state0)(e.revision(vecToCBase32(vec8(0x9bn))))
574
+ assertEq(result[0], 'error')
575
+ assert(result[0] === 'error' && result[1].includes('failed to read revision'), ['unexpected message', result])
576
+ },
577
+ revisionNonRevisionBlobIsError: () => {
578
+ const c = fileCas(sha256)(home)
579
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
580
+ const e = evo(c)(cacheKey)
581
+ const content = vec8(0x41n) // 'A' — valid UTF-8, not revision JSON
582
+ const [state1, w] = virtual(state0)(c.write(nonEmpty(ok(content), /** @type {List<never, Ok<Vec>>} */ (elEmpty()))))
583
+ assert(w[0] === 'ok', ['expected write ok', w])
584
+ const [, result] = virtual(state1)(e.revision(vecToCBase32(w[1])))
585
+ assertEq(result[0], 'error')
586
+ assert(result[0] === 'error' && result[1].includes('not a revision blob'), ['unexpected message', result])
587
+ },
588
+ // A blob written by somebody else can spell its references in any accepted
589
+ // cbase32 alias (case, `i`/`l`/`o`). What `revision` returns is
590
+ // canonicalized, so a client can compare it against `head` output
591
+ // directly instead of knowing about cbase32 aliasing.
592
+ revisionCanonicalizesReferenceSpellings: () => {
593
+ const c = fileCas(sha256)(home)
594
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
595
+ const e = evo(c)(cacheKey)
596
+ const parentCanonical = vecToCBase32(vec8(0xffn))
597
+ const snapshotCanonical = vecToCBase32(vec8(0xfen))
598
+ const parentAlias = parentCanonical.toUpperCase()
599
+ const snapshotAlias = snapshotCanonical.toUpperCase()
600
+ assert(
601
+ parentAlias !== parentCanonical && snapshotAlias !== snapshotCanonical,
602
+ 'expected the sample hashes to contain letters')
603
+ const text = `{"dialect":"${revisionDialect}","subject":"doc","parents":["${parentAlias}"],"snapshot":"${snapshotAlias}","generation":1}`
604
+ const bytes = tryUtf8(text)
605
+ assert(bytes !== null, 'expected the sample revision text to encode as UTF-8')
606
+ const [state1, w] = virtual(state0)(c.write(nonEmpty(ok(bytes), /** @type {List<never, Ok<Vec>>} */ (elEmpty()))))
607
+ assert(w[0] === 'ok', ['expected write ok', w])
608
+ const [, result] = virtual(state1)(e.revision(vecToCBase32(w[1])))
609
+ assert(result[0] === 'ok', ['expected revision ok', result])
610
+ assertEq(result[1].parents.length, 1)
611
+ assertEq(result[1].parents[0], parentCanonical)
612
+ assertEq(result[1].snapshot, snapshotCanonical)
613
+ assertEq(result[1].subject, 'doc')
614
+ assertEq(result[1].archived, undefined)
615
+ },
616
+ // What you add is what you get back: every field of a stored revision
617
+ // comes back in the same `RevisionData` shape `add` takes, so the value
618
+ // can be added again unchanged — same content, same hash.
619
+ revisionRoundTripsThroughAdd: () => {
620
+ const c = fileCas(sha256)(home)
621
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
622
+ const e = evo(c)(cacheKey)
623
+ const subjectHash = vecToCBase32(vec8(0x74n))
624
+ const [state1, root] = virtual(state0)(e.add({ parents: [], subject: subjectHash }))
625
+ assert(root[0] === 'ok', ['expected root ok', root])
626
+ const [state2, child] = virtual(state1)(e.add({ parents: [root[1]], archived: true }))
627
+ assert(child[0] === 'ok', ['expected child ok', child])
628
+ const [state3, result] = virtual(state2)(e.revision(child[1]))
629
+ assert(result[0] === 'ok', ['expected revision ok', result])
630
+ assertEq(result[1].subject, subjectHash)
631
+ assertEq(result[1].snapshot, subjectHash)
632
+ assertEq(result[1].generation, 1)
633
+ assertEq(result[1].archived, true)
634
+ assertEq(result[1].parents.length, 1)
635
+ assertEq(result[1].parents[0], root[1])
636
+ const [, readded] = virtual(state3)(e.add(result[1]))
637
+ assert(readded[0] === 'ok', ['expected re-add ok', readded])
638
+ assertEq(readded[1], child[1])
639
+ },
640
+ revisionLockRoundTripsAndCanonicalizes: () => {
641
+ const c = fileCas(sha256)(home)
642
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
643
+ const e = evo(c)(cacheKey)
644
+ const canonical = vecToCBase32(vec8(0xffn))
645
+ const alias = canonical.toUpperCase()
646
+ const [state1, added] = virtual(state0)(e.add({
647
+ parents: [], subject: 'doc', snapshot: canonical,
648
+ lock: { dependency: alias },
649
+ }))
650
+ assert(added[0] === 'ok', ['expected add ok', added])
651
+ const [, result] = virtual(state1)(e.revision(added[1]))
652
+ assert(result[0] === 'ok', ['expected revision ok', result])
653
+ assertEq(result[1].lock?.dependency, canonical)
654
+ },
655
+ revisionAbsentAndEmptyLocksRemainDistinct: () => {
656
+ const c = fileCas(sha256)(home)
657
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
658
+ const e = evo(c)(cacheKey)
659
+ const snapshot = vecToCBase32(vec8(0x42n))
660
+ const [state1, absent] = virtual(state0)(e.add({ parents: [], subject: 'absent', snapshot }))
661
+ assert(absent[0] === 'ok', ['expected add ok', absent])
662
+ const [state2, empty] = virtual(state1)(e.add({ parents: [], subject: 'empty', snapshot, lock: {} }))
663
+ assert(empty[0] === 'ok', ['expected add ok', empty])
664
+ const [state3, absentRead] = virtual(state2)(e.revision(absent[1]))
665
+ assert(absentRead[0] === 'ok', ['expected revision ok', absentRead])
666
+ const [, emptyRead] = virtual(state3)(e.revision(empty[1]))
667
+ assert(emptyRead[0] === 'ok', ['expected revision ok', emptyRead])
668
+ assertEq(absentRead[1].lock, undefined)
669
+ assertEq(Object.keys(emptyRead[1].lock ?? {}).length, 0)
670
+ },
671
+ revisionInvalidLockValueIsRejected: () => {
672
+ const c = fileCas(sha256)(home)
673
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
674
+ const e = evo(c)(cacheKey)
675
+ const [, result] = virtual(state0)(e.add({
676
+ parents: [], subject: 'doc', snapshot: vecToCBase32(vec8(0x42n)),
677
+ lock: { dependency: 'not a hash!' },
678
+ }))
679
+ assertEq(result[0], 'error')
680
+ },
681
+ equivalentLockOrdersReuseOneCasAddress: () => {
682
+ const c = fileCas(sha256)(home)
683
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
684
+ const e = evo(c)(cacheKey)
685
+ const a = vecToCBase32(vec8(0x1an))
686
+ const b = vecToCBase32(vec8(0x2bn))
687
+ const snapshot = vecToCBase32(vec8(0x3cn))
688
+ const [state1, first] = virtual(state0)(e.add({ parents: [], subject: 'doc', snapshot, lock: { '2': b, '10': a } }))
689
+ assert(first[0] === 'ok', ['expected add ok', first])
690
+ const [, second] = virtual(state1)(e.add({ lock: { '10': a, '2': b }, snapshot, subject: 'doc', parents: [] }))
691
+ assert(second[0] === 'ok', ['expected add ok', second])
692
+ assertEq(second[1], first[1])
693
+ },
694
+ // A raw CAS write (e.g. `cas_add`) of valid revision content is folded
695
+ // into the cache exactly as `addRevision` would, without going through
696
+ // `evo.add` — this is what keeps `cas_add` and `evo_add` writes to the
697
+ // same store consistent (see `fjs/mcp`).
698
+ syncRevisionFoldsValidRevisionIntoCache: () => {
699
+ const c = fileCas(sha256)(home)
700
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
701
+ const subjectHash = vecToCBase32(vec8(0x13n))
702
+ const text = `{"dialect":"${revisionDialect}","subject":"${subjectHash}","parents":[],"snapshot":"${subjectHash}","generation":0}`
703
+ const bytes = tryUtf8(text)
704
+ assert(bytes !== null, 'expected sample revision to encode as UTF-8')
705
+ const hashVec = vec8(0x14n)
706
+ const [state1] = virtual(state0)(syncRevision(cacheKey)(hashVec)(bytes))
707
+ const [, heads] = virtual(state1)(evo(c)(cacheKey).head(subjectHash))
708
+ assertEq(heads.length, 1)
709
+ assertEq(heads[0], vecToCBase32(hashVec))
710
+ },
711
+ syncRevisionIgnoresNonRevisionContent: () => {
712
+ const c = fileCas(sha256)(home)
713
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
714
+ const [state1] = virtual(state0)(syncRevision(cacheKey)(vec8(0x15n))(vec8(0x41n)))
715
+ const [, subjects] = virtual(state1)(evo(c)(cacheKey).list())
716
+ assertEq(subjects.length, 0)
717
+ },
718
+ evoHeadUnknownSubjectIsEmpty: () => {
719
+ const c = fileCas(sha256)(home)
720
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
721
+ const e = evo(c)(cacheKey)
722
+ const [, heads] = virtual(state0)(e.head('nope'))
723
+ assertEq(heads.length, 0)
724
+ },
725
+ // Regression: subjects are arbitrary caller-supplied strings, so one can
726
+ // collide with an inherited `Object.prototype` name. Plain bracket
727
+ // indexing on the `bySubject` map would return the inherited value
728
+ // (e.g. the `toString` function) instead of "no entry yet", crashing on
729
+ // `.hashes` — the cache must use an own-property lookup instead.
730
+ evoHeadUnknownPrototypeNamedSubjectIsEmpty: () => {
731
+ const c = fileCas(sha256)(home)
732
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
733
+ const e = evo(c)(cacheKey)
734
+ const [, heads] = virtual(state0)(e.head('constructor'))
735
+ assertEq(heads.length, 0)
736
+ },
737
+ evoAddAndHeadHandlePrototypeNamedSubject: () => {
738
+ const c = fileCas(sha256)(home)
739
+ const [state0, cacheKey] = virtual(emptyState)(initEvo(c))
740
+ const e = evo(c)(cacheKey)
741
+ /** @type {RevisionData} */
742
+ const input = { parents: [], subject: 'toString', snapshot: vecToCBase32(vec8(0x16n)) }
743
+ const [state1, result] = virtual(state0)(e.add(input))
744
+ assert(result[0] === 'ok', ['expected add ok', result])
745
+ const [, heads] = virtual(state1)(e.head('toString'))
746
+ assertEq(heads.length, 1)
747
+ assertEq(heads[0], result[1])
748
+ },
749
+ }