functionalscript 0.37.0 → 0.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (500) hide show
  1. package/README.md +1 -1
  2. package/{fs → fjs}/asn.1/proof.f.js +32 -94
  3. package/fjs/asserts/module.f.d.ts +36 -0
  4. package/fjs/asserts/module.f.js +39 -0
  5. package/fjs/asserts/proof.f.d.ts +11 -0
  6. package/fjs/asserts/proof.f.js +18 -0
  7. package/{fs → fjs}/base_n/proof.f.js +12 -36
  8. package/{fs → fjs}/basen/base64/proof.f.d.ts +1 -0
  9. package/{fs → fjs}/basen/base64/proof.f.js +15 -1
  10. package/{fs → fjs}/basen/cbase32/proof.f.js +15 -42
  11. package/fjs/bnf/data/module.f.d.ts +52 -0
  12. package/{fs → fjs}/bnf/data/module.f.js +53 -3
  13. package/{fs → fjs}/bnf/data/proof.f.d.ts +1 -0
  14. package/{fs → fjs}/bnf/data/proof.f.js +54 -19
  15. package/{fs → fjs}/bnf/descent/module.f.d.ts +4 -14
  16. package/fjs/bnf/descent/module.f.js +124 -0
  17. package/{fs → fjs}/bnf/descent/proof.f.d.ts +1 -0
  18. package/{fs → fjs}/bnf/descent/proof.f.js +55 -24
  19. package/{fs → fjs}/bnf/ll1/module.f.d.ts +4 -4
  20. package/{fs → fjs}/bnf/ll1/module.f.js +7 -5
  21. package/{fs → fjs}/bnf/ll1/proof.f.d.ts +1 -0
  22. package/{fs → fjs}/bnf/ll1/proof.f.js +27 -10
  23. package/{fs → fjs}/bnf/module.f.d.ts +19 -5
  24. package/{fs → fjs}/bnf/module.f.js +10 -11
  25. package/fjs/bnf/proof.f.js +69 -0
  26. package/{fs → fjs}/bnf/testlib.f.js +2 -2
  27. package/{fs → fjs}/cas/cli/proof.f.d.ts +4 -1
  28. package/{fs → fjs}/cas/cli/proof.f.js +29 -66
  29. package/fjs/cas/evo/mcp/module.f.d.ts +19 -0
  30. package/fjs/cas/evo/mcp/module.f.js +56 -0
  31. package/fjs/cas/evo/mcp/proof.f.d.ts +9 -0
  32. package/fjs/cas/evo/mcp/proof.f.js +95 -0
  33. package/fjs/cas/evo/module.f.d.ts +138 -0
  34. package/fjs/cas/evo/module.f.js +309 -0
  35. package/fjs/cas/evo/proof.f.d.ts +32 -0
  36. package/fjs/cas/evo/proof.f.js +453 -0
  37. package/fjs/cas/mcp/module.f.d.ts +49 -0
  38. package/{fs → fjs}/cas/mcp/module.f.js +54 -76
  39. package/{fs → fjs}/cas/mcp/proof.f.d.ts +4 -1
  40. package/{fs → fjs}/cas/mcp/proof.f.js +41 -13
  41. package/{fs → fjs}/cas/module.f.d.ts +10 -0
  42. package/{fs → fjs}/cas/module.f.js +27 -1
  43. package/{fs → fjs}/cas/proof.f.d.ts +4 -0
  44. package/{fs → fjs}/cas/proof.f.js +77 -86
  45. package/{fs → fjs}/ci/config/module.f.d.ts +5 -5
  46. package/{fs → fjs}/ci/config/module.f.js +5 -5
  47. package/{fs → fjs}/ci/proof.f.js +14 -9
  48. package/{fs → fjs}/ci/rust/module.f.js +9 -1
  49. package/{fs → fjs}/cli/proof.f.js +22 -63
  50. package/{fs → fjs}/common/monoid/proof.f.js +4 -9
  51. package/{fs → fjs}/crypto/hmac/proof.f.js +4 -12
  52. package/fjs/crypto/pow/proof.f.js +111 -0
  53. package/{fs → fjs}/crypto/secp/proof.f.js +12 -33
  54. package/{fs → fjs}/crypto/sha2/proof.f.js +18 -49
  55. package/{fs → fjs}/crypto/sign/module.f.d.ts +0 -5
  56. package/{fs → fjs}/crypto/sign/module.f.js +7 -4
  57. package/{fs → fjs}/crypto/sign/proof.f.js +36 -105
  58. package/{fs → fjs}/crypto/vdf/proof.f.js +22 -63
  59. package/{fs → fjs}/dev/package_json/proof.f.js +7 -7
  60. package/{fs → fjs}/dev/proof.f.js +2 -4
  61. package/{fs → fjs}/djs/ast/proof.f.js +4 -12
  62. package/{fs → fjs}/djs/parser/module.f.d.ts +5 -0
  63. package/{fs → fjs}/djs/parser/module.f.js +20 -0
  64. package/{fs → fjs}/djs/parser/proof.f.js +138 -400
  65. package/{fs → fjs}/djs/proof.f.js +13 -36
  66. package/{fs → fjs}/djs/serializer/proof.f.js +14 -39
  67. package/fjs/djs/tokenizer/module.f.d.ts +24 -0
  68. package/fjs/djs/tokenizer/module.f.js +472 -0
  69. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.d.ts +4 -3
  70. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.js +446 -445
  71. package/{fs → fjs}/djs/transpiler/proof.f.d.ts +3 -0
  72. package/{fs → fjs}/djs/transpiler/proof.f.js +29 -30
  73. package/{fs → fjs}/effects/memory/proof.f.js +8 -21
  74. package/{fs → fjs}/effects/node/memory/proof.js +5 -12
  75. package/{fs → fjs}/effects/node/module.d.ts +1 -1
  76. package/{fs → fjs}/effects/node/module.f.d.ts +1 -1
  77. package/{fs → fjs}/effects/node/module.js +3 -3
  78. package/{fs → fjs}/effects/node/proof.f.d.ts +1 -0
  79. package/{fs → fjs}/effects/node/proof.f.js +106 -292
  80. package/{fs → fjs}/effects/node/virtual/proof.f.d.ts +1 -0
  81. package/{fs → fjs}/effects/node/virtual/proof.f.js +36 -29
  82. package/{fs → fjs}/effects/proof.f.js +16 -45
  83. package/{fs → fjs}/emergent_testing/proof.f.js +7 -7
  84. package/{fs → fjs}/fsc/proof.f.js +12 -34
  85. package/{fs → fjs}/fsm/proof.f.js +5 -12
  86. package/{fs → fjs}/mcp/module.f.d.ts +7 -0
  87. package/{fs → fjs}/mcp/module.f.js +9 -2
  88. package/{fs → fjs}/mcp/proof.f.js +12 -12
  89. package/{fs → fjs}/mcp/stdio/module.f.d.ts +2 -2
  90. package/{fs → fjs}/mcp/stdio/module.f.js +2 -2
  91. package/{fs → fjs}/media/html/proof.f.js +12 -33
  92. package/{fs → fjs}/media/json/parser/module.f.d.ts +5 -0
  93. package/{fs → fjs}/media/json/parser/module.f.js +14 -0
  94. package/{fs → fjs}/media/json/parser/proof.f.js +39 -114
  95. package/{fs → fjs}/media/json/rpc/module.f.js +1 -1
  96. package/{fs → fjs}/media/json/schema/module.f.d.ts +2 -2
  97. package/{fs → fjs}/media/json/schema/module.f.js +23 -39
  98. package/{fs → fjs}/media/json/schema/proof.f.js +3 -6
  99. package/{fs → fjs}/media/json/serializer/proof.f.js +10 -27
  100. package/{fs → fjs}/media/module.f.d.ts +6 -6
  101. package/{fs → fjs}/media/module.f.js +3 -4
  102. package/{fs → fjs}/media/proof.f.js +5 -4
  103. package/{fs → fjs}/media/revision/module.f.d.ts +31 -4
  104. package/{fs → fjs}/media/revision/module.f.js +35 -23
  105. package/{fs → fjs}/media/revision/proof.f.d.ts +10 -8
  106. package/fjs/media/revision/proof.f.js +140 -0
  107. package/{fs → fjs}/media/type/proof.f.js +2 -6
  108. package/{fs → fjs}/module.f.js +1 -1
  109. package/{fs → fjs}/path/proof.f.js +27 -78
  110. package/{fs → fjs}/proof.f.js +2 -0
  111. package/{fs → fjs}/sul/id/proof.f.js +7 -21
  112. package/{fs → fjs}/sul/level/hash/proof.f.js +5 -5
  113. package/{fs → fjs}/sul/level/literal/proof.f.js +12 -26
  114. package/fjs/text/ascii/proof.f.d.ts +6 -0
  115. package/{fs → fjs}/text/ascii/proof.f.js +4 -14
  116. package/{fs → fjs}/text/code_point/module.f.js +10 -10
  117. package/{fs → fjs}/text/proof.f.js +4 -9
  118. package/{fs → fjs}/text/sgr/proof.f.js +6 -15
  119. package/{fs → fjs}/text/utf16/module.f.js +1 -1
  120. package/{fs → fjs}/text/utf16/proof.f.js +23 -66
  121. package/{fs → fjs}/text/utf8/proof.f.js +56 -125
  122. package/{fs → fjs}/types/array/proof.f.js +18 -52
  123. package/fjs/types/bigfloat/proof.f.js +217 -0
  124. package/{fs → fjs}/types/bigint/proof.f.js +49 -145
  125. package/{fs → fjs}/types/bit_vec/proof.f.js +72 -214
  126. package/{fs → fjs}/types/btree/find/proof.f.js +23 -66
  127. package/{fs → fjs}/types/btree/proof.f.js +5 -12
  128. package/{fs → fjs}/types/btree/remove/proof.f.d.ts +2 -0
  129. package/{fs → fjs}/types/btree/remove/proof.f.js +83 -230
  130. package/{fs → fjs}/types/btree/set/module.f.js +5 -2
  131. package/{fs → fjs}/types/btree/set/proof.f.js +35 -24
  132. package/{fs → fjs}/types/byte_set/proof.f.js +22 -63
  133. package/{fs → fjs}/types/function/compare/proof.f.js +13 -36
  134. package/{fs → fjs}/types/function/operator/proof.f.js +17 -48
  135. package/{fs → fjs}/types/function/proof.f.js +2 -3
  136. package/{fs → fjs}/types/list/proof.f.js +55 -163
  137. package/{fs → fjs}/types/map/proof.f.js +4 -12
  138. package/{fs → fjs}/types/nibble_set/proof.f.js +16 -45
  139. package/{fs → fjs}/types/nominal/proof.f.js +5 -10
  140. package/fjs/types/nullable/proof.f.js +29 -0
  141. package/{fs → fjs}/types/number/proof.f.js +9 -24
  142. package/{fs → fjs}/types/object/proof.f.js +3 -6
  143. package/{fs → fjs}/types/patricia_trie/proof.f.js +21 -21
  144. package/{fs → fjs}/types/prime_field/module.f.js +2 -7
  145. package/{fs → fjs}/types/range/module.f.d.ts +1 -1
  146. package/fjs/types/range/module.f.js +2 -0
  147. package/fjs/types/range/proof.f.js +9 -0
  148. package/{fs → fjs}/types/range_map/proof.f.js +28 -81
  149. package/{fs → fjs}/types/result/proof.f.d.ts +3 -2
  150. package/fjs/types/result/proof.f.js +31 -0
  151. package/{fs → fjs}/types/rtti/common/module.f.d.ts +36 -1
  152. package/{fs → fjs}/types/rtti/common/module.f.js +44 -0
  153. package/fjs/types/rtti/common/proof.f.d.ts +8 -0
  154. package/fjs/types/rtti/common/proof.f.js +51 -0
  155. package/{fs → fjs}/types/rtti/parse/module.f.js +13 -22
  156. package/{fs → fjs}/types/rtti/parse/proof.f.js +7 -18
  157. package/{fs → fjs}/types/rtti/ts/module.f.d.ts +10 -4
  158. package/{fs → fjs}/types/rtti/validate/module.f.js +8 -29
  159. package/{fs → fjs}/types/rtti/validate/proof.f.js +4 -9
  160. package/{fs → fjs}/types/sorted_list/proof.f.js +8 -21
  161. package/{fs → fjs}/types/sorted_set/proof.f.js +14 -39
  162. package/fjs/types/string/proof.f.js +77 -0
  163. package/fjs/types/string_set/proof.f.js +43 -0
  164. package/{fs → fjs}/types/ts/proof.f.js +15 -42
  165. package/{fs → fjs}/types/uint8array/module.f.js +7 -7
  166. package/{fs → fjs}/types/uint8array/proof.f.d.ts +4 -1
  167. package/{fs → fjs}/types/uint8array/proof.f.js +7 -7
  168. package/{fs → fjs}/website/proof.f.js +3 -6
  169. package/package.json +6 -6
  170. package/fs/asserts/module.f.d.ts +0 -4
  171. package/fs/asserts/module.f.js +0 -9
  172. package/fs/asserts/proof.f.d.ts +0 -8
  173. package/fs/asserts/proof.f.js +0 -51
  174. package/fs/bnf/data/module.f.d.ts +0 -30
  175. package/fs/bnf/descent/module.f.js +0 -119
  176. package/fs/bnf/proof.f.js +0 -104
  177. package/fs/cas/mcp/module.f.d.ts +0 -36
  178. package/fs/crypto/pow/proof.f.js +0 -161
  179. package/fs/djs/tokenizer/module.f.d.ts +0 -12
  180. package/fs/djs/tokenizer/module.f.js +0 -62
  181. package/fs/djs/tokenizer/proof.f.d.ts +0 -7
  182. package/fs/djs/tokenizer/proof.f.js +0 -543
  183. package/fs/djs/tokenizer-new/module.f.d.ts +0 -3
  184. package/fs/djs/tokenizer-new/module.f.js +0 -155
  185. package/fs/media/revision/proof.f.js +0 -119
  186. package/fs/text/ascii/proof.f.d.ts +0 -4
  187. package/fs/types/bigfloat/proof.f.js +0 -348
  188. package/fs/types/nullable/proof.f.js +0 -50
  189. package/fs/types/range/module.f.js +0 -2
  190. package/fs/types/range/proof.f.js +0 -18
  191. package/fs/types/result/proof.f.js +0 -52
  192. package/fs/types/string/proof.f.js +0 -118
  193. package/fs/types/string_set/proof.f.js +0 -82
  194. /package/{fs → fjs}/asn.1/module.f.d.ts +0 -0
  195. /package/{fs → fjs}/asn.1/module.f.js +0 -0
  196. /package/{fs → fjs}/asn.1/proof.f.d.ts +0 -0
  197. /package/{fs → fjs}/base_n/module.f.d.ts +0 -0
  198. /package/{fs → fjs}/base_n/module.f.js +0 -0
  199. /package/{fs → fjs}/base_n/proof.f.d.ts +0 -0
  200. /package/{fs → fjs}/basen/base128/module.f.d.ts +0 -0
  201. /package/{fs → fjs}/basen/base128/module.f.js +0 -0
  202. /package/{fs → fjs}/basen/base128/proof.f.d.ts +0 -0
  203. /package/{fs → fjs}/basen/base128/proof.f.js +0 -0
  204. /package/{fs → fjs}/basen/base64/module.f.d.ts +0 -0
  205. /package/{fs → fjs}/basen/base64/module.f.js +0 -0
  206. /package/{fs → fjs}/basen/cbase32/module.f.d.ts +0 -0
  207. /package/{fs → fjs}/basen/cbase32/module.f.js +0 -0
  208. /package/{fs → fjs}/basen/cbase32/proof.f.d.ts +0 -0
  209. /package/{fs → fjs}/bnf/proof.f.d.ts +0 -0
  210. /package/{fs → fjs}/bnf/testlib.f.d.ts +0 -0
  211. /package/{fs → fjs}/cas/cli/module.f.d.ts +0 -0
  212. /package/{fs → fjs}/cas/cli/module.f.js +0 -0
  213. /package/{fs → fjs}/ci/bun/module.f.d.ts +0 -0
  214. /package/{fs → fjs}/ci/bun/module.f.js +0 -0
  215. /package/{fs → fjs}/ci/common/module.f.d.ts +0 -0
  216. /package/{fs → fjs}/ci/common/module.f.js +0 -0
  217. /package/{fs → fjs}/ci/deno/module.f.d.ts +0 -0
  218. /package/{fs → fjs}/ci/deno/module.f.js +0 -0
  219. /package/{fs → fjs}/ci/module.f.d.ts +0 -0
  220. /package/{fs → fjs}/ci/module.f.js +0 -0
  221. /package/{fs → fjs}/ci/node/module.f.d.ts +0 -0
  222. /package/{fs → fjs}/ci/node/module.f.js +0 -0
  223. /package/{fs → fjs}/ci/playwright/module.f.d.ts +0 -0
  224. /package/{fs → fjs}/ci/playwright/module.f.js +0 -0
  225. /package/{fs → fjs}/ci/proof.f.d.ts +0 -0
  226. /package/{fs → fjs}/ci/rust/module.f.d.ts +0 -0
  227. /package/{fs → fjs}/cli/module.f.d.ts +0 -0
  228. /package/{fs → fjs}/cli/module.f.js +0 -0
  229. /package/{fs → fjs}/cli/proof.f.d.ts +0 -0
  230. /package/{fs → fjs}/common/monoid/module.f.d.ts +0 -0
  231. /package/{fs → fjs}/common/monoid/module.f.js +0 -0
  232. /package/{fs → fjs}/common/monoid/proof.f.d.ts +0 -0
  233. /package/{fs → fjs}/crypto/hmac/module.f.d.ts +0 -0
  234. /package/{fs → fjs}/crypto/hmac/module.f.js +0 -0
  235. /package/{fs → fjs}/crypto/hmac/proof.f.d.ts +0 -0
  236. /package/{fs → fjs}/crypto/pow/module.f.d.ts +0 -0
  237. /package/{fs → fjs}/crypto/pow/module.f.js +0 -0
  238. /package/{fs → fjs}/crypto/pow/proof.f.d.ts +0 -0
  239. /package/{fs → fjs}/crypto/secp/module.f.d.ts +0 -0
  240. /package/{fs → fjs}/crypto/secp/module.f.js +0 -0
  241. /package/{fs → fjs}/crypto/secp/proof.f.d.ts +0 -0
  242. /package/{fs → fjs}/crypto/sha2/module.f.d.ts +0 -0
  243. /package/{fs → fjs}/crypto/sha2/module.f.js +0 -0
  244. /package/{fs → fjs}/crypto/sha2/proof.f.d.ts +0 -0
  245. /package/{fs → fjs}/crypto/sign/proof.f.d.ts +0 -0
  246. /package/{fs → fjs}/crypto/vdf/module.f.d.ts +0 -0
  247. /package/{fs → fjs}/crypto/vdf/module.f.js +0 -0
  248. /package/{fs → fjs}/crypto/vdf/proof.f.d.ts +0 -0
  249. /package/{fs → fjs}/dev/module.f.d.ts +0 -0
  250. /package/{fs → fjs}/dev/module.f.js +0 -0
  251. /package/{fs → fjs}/dev/package_json/module.f.d.ts +0 -0
  252. /package/{fs → fjs}/dev/package_json/module.f.js +0 -0
  253. /package/{fs → fjs}/dev/package_json/proof.f.d.ts +0 -0
  254. /package/{fs → fjs}/dev/proof.f.d.ts +0 -0
  255. /package/{fs → fjs}/djs/ast/module.f.d.ts +0 -0
  256. /package/{fs → fjs}/djs/ast/module.f.js +0 -0
  257. /package/{fs → fjs}/djs/ast/proof.f.d.ts +0 -0
  258. /package/{fs → fjs}/djs/examples/input.f.d.ts +0 -0
  259. /package/{fs → fjs}/djs/examples/input.f.js +0 -0
  260. /package/{fs → fjs}/djs/examples/m.f.d.ts +0 -0
  261. /package/{fs → fjs}/djs/examples/m.f.js +0 -0
  262. /package/{fs → fjs}/djs/module.f.d.ts +0 -0
  263. /package/{fs → fjs}/djs/module.f.js +0 -0
  264. /package/{fs → fjs}/djs/parser/proof.f.d.ts +0 -0
  265. /package/{fs → fjs}/djs/proof.f.d.ts +0 -0
  266. /package/{fs → fjs}/djs/serializer/module.f.d.ts +0 -0
  267. /package/{fs → fjs}/djs/serializer/module.f.js +0 -0
  268. /package/{fs → fjs}/djs/serializer/proof.f.d.ts +0 -0
  269. /package/{fs → fjs}/djs/transpiler/module.f.d.ts +0 -0
  270. /package/{fs → fjs}/djs/transpiler/module.f.js +0 -0
  271. /package/{fs → fjs}/effects/list/module.f.d.ts +0 -0
  272. /package/{fs → fjs}/effects/list/module.f.js +0 -0
  273. /package/{fs → fjs}/effects/memory/module.f.d.ts +0 -0
  274. /package/{fs → fjs}/effects/memory/module.f.js +0 -0
  275. /package/{fs → fjs}/effects/memory/proof.f.d.ts +0 -0
  276. /package/{fs → fjs}/effects/mock/module.f.d.ts +0 -0
  277. /package/{fs → fjs}/effects/mock/module.f.js +0 -0
  278. /package/{fs → fjs}/effects/module.d.ts +0 -0
  279. /package/{fs → fjs}/effects/module.f.d.ts +0 -0
  280. /package/{fs → fjs}/effects/module.f.js +0 -0
  281. /package/{fs → fjs}/effects/module.js +0 -0
  282. /package/{fs → fjs}/effects/node/memory/module.d.ts +0 -0
  283. /package/{fs → fjs}/effects/node/memory/module.js +0 -0
  284. /package/{fs → fjs}/effects/node/memory/proof.d.ts +0 -0
  285. /package/{fs → fjs}/effects/node/module.f.js +0 -0
  286. /package/{fs → fjs}/effects/node/virtual/module.f.d.ts +0 -0
  287. /package/{fs → fjs}/effects/node/virtual/module.f.js +0 -0
  288. /package/{fs → fjs}/effects/proof.f.d.ts +0 -0
  289. /package/{fs → fjs}/emergent_testing/all.test.d.ts +0 -0
  290. /package/{fs → fjs}/emergent_testing/all.test.js +0 -0
  291. /package/{fs → fjs}/emergent_testing/example.f.d.ts +0 -0
  292. /package/{fs → fjs}/emergent_testing/example.f.js +0 -0
  293. /package/{fs → fjs}/emergent_testing/module.f.d.ts +0 -0
  294. /package/{fs → fjs}/emergent_testing/module.f.js +0 -0
  295. /package/{fs → fjs}/emergent_testing/proof.f.d.ts +0 -0
  296. /package/{fs → fjs}/emergent_testing/scenarios/all.d.ts +0 -0
  297. /package/{fs → fjs}/emergent_testing/scenarios/all.js +0 -0
  298. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -0
  299. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.js +0 -0
  300. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -0
  301. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.js +0 -0
  302. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.d.ts +0 -0
  303. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.js +0 -0
  304. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.d.ts +0 -0
  305. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.js +0 -0
  306. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.d.ts +0 -0
  307. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.js +0 -0
  308. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.d.ts +0 -0
  309. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.js +0 -0
  310. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.d.ts +0 -0
  311. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.js +0 -0
  312. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.d.ts +0 -0
  313. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.js +0 -0
  314. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.d.ts +0 -0
  315. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.js +0 -0
  316. /package/{fs → fjs}/fsc/bnf.f.d.ts +0 -0
  317. /package/{fs → fjs}/fsc/bnf.f.js +0 -0
  318. /package/{fs → fjs}/fsc/json.f.d.ts +0 -0
  319. /package/{fs → fjs}/fsc/json.f.js +0 -0
  320. /package/{fs → fjs}/fsc/module.f.d.ts +0 -0
  321. /package/{fs → fjs}/fsc/module.f.js +0 -0
  322. /package/{fs → fjs}/fsc/proof.f.d.ts +0 -0
  323. /package/{fs → fjs}/fsm/module.f.d.ts +0 -0
  324. /package/{fs → fjs}/fsm/module.f.js +0 -0
  325. /package/{fs → fjs}/fsm/proof.f.d.ts +0 -0
  326. /package/{fs → fjs}/js/tokenizer/module.f.d.ts +0 -0
  327. /package/{fs → fjs}/js/tokenizer/module.f.js +0 -0
  328. /package/{fs → fjs}/js/tokenizer/proof.f.d.ts +0 -0
  329. /package/{fs → fjs}/js/tokenizer/proof.f.js +0 -0
  330. /package/{fs → fjs}/mcp/proof.f.d.ts +0 -0
  331. /package/{fs → fjs}/mcp/stdio/proof.f.d.ts +0 -0
  332. /package/{fs → fjs}/mcp/stdio/proof.f.js +0 -0
  333. /package/{fs → fjs}/media/html/module.f.d.ts +0 -0
  334. /package/{fs → fjs}/media/html/module.f.js +0 -0
  335. /package/{fs → fjs}/media/html/proof.f.d.ts +0 -0
  336. /package/{fs → fjs}/media/json/module.f.d.ts +0 -0
  337. /package/{fs → fjs}/media/json/module.f.js +0 -0
  338. /package/{fs → fjs}/media/json/parser/proof.f.d.ts +0 -0
  339. /package/{fs → fjs}/media/json/proof.f.d.ts +0 -0
  340. /package/{fs → fjs}/media/json/proof.f.js +0 -0
  341. /package/{fs → fjs}/media/json/rpc/module.f.d.ts +0 -0
  342. /package/{fs → fjs}/media/json/rpc/proof.f.d.ts +0 -0
  343. /package/{fs → fjs}/media/json/rpc/proof.f.js +0 -0
  344. /package/{fs → fjs}/media/json/schema/proof.f.d.ts +0 -0
  345. /package/{fs → fjs}/media/json/serializer/module.f.d.ts +0 -0
  346. /package/{fs → fjs}/media/json/serializer/module.f.js +0 -0
  347. /package/{fs → fjs}/media/json/serializer/proof.f.d.ts +0 -0
  348. /package/{fs → fjs}/media/json/tokenizer/module.f.d.ts +0 -0
  349. /package/{fs → fjs}/media/json/tokenizer/module.f.js +0 -0
  350. /package/{fs → fjs}/media/json/tokenizer/proof.f.d.ts +0 -0
  351. /package/{fs → fjs}/media/json/tokenizer/proof.f.js +0 -0
  352. /package/{fs → fjs}/media/proof.f.d.ts +0 -0
  353. /package/{fs → fjs}/media/type/module.f.d.ts +0 -0
  354. /package/{fs → fjs}/media/type/module.f.js +0 -0
  355. /package/{fs → fjs}/media/type/proof.f.d.ts +0 -0
  356. /package/{fs → fjs}/module.d.ts +0 -0
  357. /package/{fs → fjs}/module.f.d.ts +0 -0
  358. /package/{fs → fjs}/module.js +0 -0
  359. /package/{fs → fjs}/path/module.f.d.ts +0 -0
  360. /package/{fs → fjs}/path/module.f.js +0 -0
  361. /package/{fs → fjs}/path/proof.f.d.ts +0 -0
  362. /package/{fs → fjs}/proof.f.d.ts +0 -0
  363. /package/{fs → fjs}/sul/id/module.f.d.ts +0 -0
  364. /package/{fs → fjs}/sul/id/module.f.js +0 -0
  365. /package/{fs → fjs}/sul/id/proof.f.d.ts +0 -0
  366. /package/{fs → fjs}/sul/level/hash/module.f.d.ts +0 -0
  367. /package/{fs → fjs}/sul/level/hash/module.f.js +0 -0
  368. /package/{fs → fjs}/sul/level/hash/proof.f.d.ts +0 -0
  369. /package/{fs → fjs}/sul/level/literal/module.f.d.ts +0 -0
  370. /package/{fs → fjs}/sul/level/literal/module.f.js +0 -0
  371. /package/{fs → fjs}/sul/level/literal/proof.f.d.ts +0 -0
  372. /package/{fs → fjs}/sul/module.f.d.ts +0 -0
  373. /package/{fs → fjs}/sul/module.f.js +0 -0
  374. /package/{fs → fjs}/sul/proof.f.d.ts +0 -0
  375. /package/{fs → fjs}/sul/proof.f.js +0 -0
  376. /package/{fs → fjs}/text/ascii/module.f.d.ts +0 -0
  377. /package/{fs → fjs}/text/ascii/module.f.js +0 -0
  378. /package/{fs → fjs}/text/code_point/module.f.d.ts +0 -0
  379. /package/{fs → fjs}/text/code_point/proof.f.d.ts +0 -0
  380. /package/{fs → fjs}/text/code_point/proof.f.js +0 -0
  381. /package/{fs → fjs}/text/module.f.d.ts +0 -0
  382. /package/{fs → fjs}/text/module.f.js +0 -0
  383. /package/{fs → fjs}/text/proof.f.d.ts +0 -0
  384. /package/{fs → fjs}/text/sgr/module.f.d.ts +0 -0
  385. /package/{fs → fjs}/text/sgr/module.f.js +0 -0
  386. /package/{fs → fjs}/text/sgr/proof.f.d.ts +0 -0
  387. /package/{fs → fjs}/text/utf16/module.f.d.ts +0 -0
  388. /package/{fs → fjs}/text/utf16/proof.f.d.ts +0 -0
  389. /package/{fs → fjs}/text/utf8/module.f.d.ts +0 -0
  390. /package/{fs → fjs}/text/utf8/module.f.js +0 -0
  391. /package/{fs → fjs}/text/utf8/proof.f.d.ts +0 -0
  392. /package/{fs → fjs}/types/array/module.f.d.ts +0 -0
  393. /package/{fs → fjs}/types/array/module.f.js +0 -0
  394. /package/{fs → fjs}/types/array/proof.f.d.ts +0 -0
  395. /package/{fs → fjs}/types/bigfloat/module.f.d.ts +0 -0
  396. /package/{fs → fjs}/types/bigfloat/module.f.js +0 -0
  397. /package/{fs → fjs}/types/bigfloat/proof.f.d.ts +0 -0
  398. /package/{fs → fjs}/types/bigint/module.f.d.ts +0 -0
  399. /package/{fs → fjs}/types/bigint/module.f.js +0 -0
  400. /package/{fs → fjs}/types/bigint/proof.f.d.ts +0 -0
  401. /package/{fs → fjs}/types/bit_vec/module.f.d.ts +0 -0
  402. /package/{fs → fjs}/types/bit_vec/module.f.js +0 -0
  403. /package/{fs → fjs}/types/bit_vec/proof.f.d.ts +0 -0
  404. /package/{fs → fjs}/types/btree/find/module.f.d.ts +0 -0
  405. /package/{fs → fjs}/types/btree/find/module.f.js +0 -0
  406. /package/{fs → fjs}/types/btree/find/proof.f.d.ts +0 -0
  407. /package/{fs → fjs}/types/btree/module.f.d.ts +0 -0
  408. /package/{fs → fjs}/types/btree/module.f.js +0 -0
  409. /package/{fs → fjs}/types/btree/proof.f.d.ts +0 -0
  410. /package/{fs → fjs}/types/btree/remove/module.f.d.ts +0 -0
  411. /package/{fs → fjs}/types/btree/remove/module.f.js +0 -0
  412. /package/{fs → fjs}/types/btree/set/module.f.d.ts +0 -0
  413. /package/{fs → fjs}/types/btree/set/proof.f.d.ts +0 -0
  414. /package/{fs → fjs}/types/btree/types/module.f.d.ts +0 -0
  415. /package/{fs → fjs}/types/btree/types/module.f.js +0 -0
  416. /package/{fs → fjs}/types/byte_set/module.f.d.ts +0 -0
  417. /package/{fs → fjs}/types/byte_set/module.f.js +0 -0
  418. /package/{fs → fjs}/types/byte_set/proof.f.d.ts +0 -0
  419. /package/{fs → fjs}/types/function/compare/module.f.d.ts +0 -0
  420. /package/{fs → fjs}/types/function/compare/module.f.js +0 -0
  421. /package/{fs → fjs}/types/function/compare/proof.f.d.ts +0 -0
  422. /package/{fs → fjs}/types/function/module.f.d.ts +0 -0
  423. /package/{fs → fjs}/types/function/module.f.js +0 -0
  424. /package/{fs → fjs}/types/function/operator/module.f.d.ts +0 -0
  425. /package/{fs → fjs}/types/function/operator/module.f.js +0 -0
  426. /package/{fs → fjs}/types/function/operator/proof.f.d.ts +0 -0
  427. /package/{fs → fjs}/types/function/proof.f.d.ts +0 -0
  428. /package/{fs → fjs}/types/list/module.f.d.ts +0 -0
  429. /package/{fs → fjs}/types/list/module.f.js +0 -0
  430. /package/{fs → fjs}/types/list/proof.f.d.ts +0 -0
  431. /package/{fs → fjs}/types/map/module.f.d.ts +0 -0
  432. /package/{fs → fjs}/types/map/module.f.js +0 -0
  433. /package/{fs → fjs}/types/map/proof.f.d.ts +0 -0
  434. /package/{fs → fjs}/types/nibble_set/module.f.d.ts +0 -0
  435. /package/{fs → fjs}/types/nibble_set/module.f.js +0 -0
  436. /package/{fs → fjs}/types/nibble_set/proof.f.d.ts +0 -0
  437. /package/{fs → fjs}/types/nominal/module.f.d.ts +0 -0
  438. /package/{fs → fjs}/types/nominal/module.f.js +0 -0
  439. /package/{fs → fjs}/types/nominal/proof.f.d.ts +0 -0
  440. /package/{fs → fjs}/types/nullable/module.f.d.ts +0 -0
  441. /package/{fs → fjs}/types/nullable/module.f.js +0 -0
  442. /package/{fs → fjs}/types/nullable/proof.f.d.ts +0 -0
  443. /package/{fs → fjs}/types/number/module.f.d.ts +0 -0
  444. /package/{fs → fjs}/types/number/module.f.js +0 -0
  445. /package/{fs → fjs}/types/number/proof.f.d.ts +0 -0
  446. /package/{fs → fjs}/types/object/module.f.d.ts +0 -0
  447. /package/{fs → fjs}/types/object/module.f.js +0 -0
  448. /package/{fs → fjs}/types/object/proof.f.d.ts +0 -0
  449. /package/{fs → fjs}/types/option/module.f.d.ts +0 -0
  450. /package/{fs → fjs}/types/option/module.f.js +0 -0
  451. /package/{fs → fjs}/types/ordered_map/module.f.d.ts +0 -0
  452. /package/{fs → fjs}/types/ordered_map/module.f.js +0 -0
  453. /package/{fs → fjs}/types/ordered_map/proof.f.d.ts +0 -0
  454. /package/{fs → fjs}/types/ordered_map/proof.f.js +0 -0
  455. /package/{fs → fjs}/types/patricia_trie/module.f.d.ts +0 -0
  456. /package/{fs → fjs}/types/patricia_trie/module.f.js +0 -0
  457. /package/{fs → fjs}/types/patricia_trie/proof.f.d.ts +0 -0
  458. /package/{fs → fjs}/types/phantom/module.f.d.ts +0 -0
  459. /package/{fs → fjs}/types/phantom/module.f.js +0 -0
  460. /package/{fs → fjs}/types/prime_field/module.f.d.ts +0 -0
  461. /package/{fs → fjs}/types/prime_field/proof.f.d.ts +0 -0
  462. /package/{fs → fjs}/types/prime_field/proof.f.js +0 -0
  463. /package/{fs → fjs}/types/range/proof.f.d.ts +0 -0
  464. /package/{fs → fjs}/types/range_map/module.f.d.ts +0 -0
  465. /package/{fs → fjs}/types/range_map/module.f.js +0 -0
  466. /package/{fs → fjs}/types/range_map/proof.f.d.ts +0 -0
  467. /package/{fs → fjs}/types/result/module.d.ts +0 -0
  468. /package/{fs → fjs}/types/result/module.f.d.ts +0 -0
  469. /package/{fs → fjs}/types/result/module.f.js +0 -0
  470. /package/{fs → fjs}/types/result/module.js +0 -0
  471. /package/{fs → fjs}/types/rtti/module.f.d.ts +0 -0
  472. /package/{fs → fjs}/types/rtti/module.f.js +0 -0
  473. /package/{fs → fjs}/types/rtti/parse/module.f.d.ts +0 -0
  474. /package/{fs → fjs}/types/rtti/parse/proof.f.d.ts +0 -0
  475. /package/{fs → fjs}/types/rtti/proof.f.d.ts +0 -0
  476. /package/{fs → fjs}/types/rtti/proof.f.js +0 -0
  477. /package/{fs → fjs}/types/rtti/ts/module.f.js +0 -0
  478. /package/{fs → fjs}/types/rtti/ts/proof.f.d.ts +0 -0
  479. /package/{fs → fjs}/types/rtti/ts/proof.f.js +0 -0
  480. /package/{fs → fjs}/types/rtti/validate/module.f.d.ts +0 -0
  481. /package/{fs → fjs}/types/rtti/validate/proof.f.d.ts +0 -0
  482. /package/{fs → fjs}/types/sorted_list/module.f.d.ts +0 -0
  483. /package/{fs → fjs}/types/sorted_list/module.f.js +0 -0
  484. /package/{fs → fjs}/types/sorted_list/proof.f.d.ts +0 -0
  485. /package/{fs → fjs}/types/sorted_set/module.f.d.ts +0 -0
  486. /package/{fs → fjs}/types/sorted_set/module.f.js +0 -0
  487. /package/{fs → fjs}/types/sorted_set/proof.f.d.ts +0 -0
  488. /package/{fs → fjs}/types/string/module.f.d.ts +0 -0
  489. /package/{fs → fjs}/types/string/module.f.js +0 -0
  490. /package/{fs → fjs}/types/string/proof.f.d.ts +0 -0
  491. /package/{fs → fjs}/types/string_set/module.f.d.ts +0 -0
  492. /package/{fs → fjs}/types/string_set/module.f.js +0 -0
  493. /package/{fs → fjs}/types/string_set/proof.f.d.ts +0 -0
  494. /package/{fs → fjs}/types/ts/module.f.d.ts +0 -0
  495. /package/{fs → fjs}/types/ts/module.f.js +0 -0
  496. /package/{fs → fjs}/types/ts/proof.f.d.ts +0 -0
  497. /package/{fs → fjs}/types/uint8array/module.f.d.ts +0 -0
  498. /package/{fs → fjs}/website/module.f.d.ts +0 -0
  499. /package/{fs → fjs}/website/module.f.js +0 -0
  500. /package/{fs → fjs}/website/proof.f.d.ts +0 -0
@@ -1,4 +1,5 @@
1
1
  import { at } from './module.f.js';
2
+ import { assertEq } from '../../asserts/module.f.js';
2
3
  export const proof = {
3
4
  stringMap: {
4
5
  infiniteIsOptional: true,
@@ -7,15 +8,11 @@ export const proof = {
7
8
  ctor: () => {
8
9
  const a = {};
9
10
  const value = at('constructor')(a);
10
- if (value !== null) {
11
- throw value;
12
- }
11
+ assertEq(value, null);
13
12
  },
14
13
  property: () => {
15
14
  const a = { constructor: 42 };
16
15
  const value = at('constructor')(a);
17
- if (value !== 42) {
18
- throw value;
19
- }
16
+ assertEq(value, 42);
20
17
  }
21
18
  };
@@ -1,4 +1,4 @@
1
- import { assert } from '../../asserts/module.f.js';
1
+ import { assert, assertEq } from '../../asserts/module.f.js';
2
2
  import { emptyState, patriciaTrie } from './module.f.js';
3
3
  const combine = (a, b) => a * 1000n + b;
4
4
  const create = (a, b, s) => {
@@ -14,53 +14,53 @@ const runExample = (inputs, expectedLeaves, expectedNodeCounts) => {
14
14
  const prevCount = state[0].length;
15
15
  state = push([x, x], state);
16
16
  const actual = leaves(state);
17
- assert(actual.length === expectedLeaves[i].length);
17
+ assertEq(actual.length, expectedLeaves[i].length);
18
18
  for (let j = 0; j < actual.length; j++) {
19
- assert(actual[j] === expectedLeaves[i][j]);
19
+ assertEq(actual[j], expectedLeaves[i][j]);
20
20
  }
21
21
  const newNodes = state[0].slice(prevCount);
22
- assert(newNodes.length === expectedNodeCounts[i]);
22
+ assertEq(newNodes.length, expectedNodeCounts[i]);
23
23
  for (const [l, r, h] of newNodes) {
24
- assert(h === combine(l, r));
24
+ assertEq(h, combine(l, r));
25
25
  }
26
26
  }
27
27
  const prevCount = state[0].length;
28
28
  const [root, finalStorage] = end(state);
29
29
  const finalNodes = finalStorage.slice(prevCount);
30
- assert(finalNodes.length === expectedLeaves[expectedLeaves.length - 1].length - 1);
30
+ assertEq(finalNodes.length, expectedLeaves[expectedLeaves.length - 1].length - 1);
31
31
  assert(root !== undefined);
32
32
  for (const [l, r, h] of finalNodes) {
33
- assert(h === combine(l, r));
33
+ assertEq(h, combine(l, r));
34
34
  }
35
35
  };
36
36
  const empty = () => {
37
37
  const [root, storage] = end(emptyState([]));
38
- assert(storage.length === 0);
39
- assert(root === undefined);
38
+ assertEq(storage.length, 0);
39
+ assertEq(root, undefined);
40
40
  };
41
41
  const singleLeaf = () => {
42
42
  const state = push([42n, 42n], emptyState([]));
43
- assert(state[0].length === 0);
44
- assert(leaves(state).length === 1);
45
- assert(leaves(state)[0] === 42n);
43
+ assertEq(state[0].length, 0);
44
+ assertEq(leaves(state).length, 1);
45
+ assertEq(leaves(state)[0], 42n);
46
46
  const [root, finalStorage] = end(state);
47
- assert(finalStorage.length === 0);
48
- assert(root === 42n);
47
+ assertEq(finalStorage.length, 0);
48
+ assertEq(root, 42n);
49
49
  };
50
50
  const twoLeaves = () => {
51
51
  const s1 = push([7n, 7n], emptyState([]));
52
52
  const prevCount = s1[0].length;
53
53
  const s2 = push([3n, 3n], s1);
54
- assert(s2[0].slice(prevCount).length === 0);
55
- assert(leaves(s2).length === 2);
54
+ assertEq(s2[0].slice(prevCount).length, 0);
55
+ assertEq(leaves(s2).length, 2);
56
56
  const prevCount2 = s2[0].length;
57
57
  const [root, finalStorage] = end(s2);
58
58
  const finalNodes = finalStorage.slice(prevCount2);
59
- assert(finalNodes.length === 1);
60
- assert(finalNodes[0][0] === 7n);
61
- assert(finalNodes[0][1] === 3n);
62
- assert(finalNodes[0][2] === combine(7n, 3n));
63
- assert(root === combine(7n, 3n));
59
+ assertEq(finalNodes.length, 1);
60
+ assertEq(finalNodes[0][0], 7n);
61
+ assertEq(finalNodes[0][1], 3n);
62
+ assertEq(finalNodes[0][2], combine(7n, 3n));
63
+ assertEq(root, combine(7n, 3n));
64
64
  };
65
65
  // example.md — descending
66
66
  // merges happen at: step 2 (1), 3 (1), 4 (1), 7 (2), 8 (2), A (1), C (2), F (1)
@@ -1,5 +1,5 @@
1
1
  import { repeat } from '../../common/monoid/module.f.js';
2
- import { assert } from '../../asserts/module.f.js';
2
+ import { assertNotNullish } from '../../asserts/module.f.js';
3
3
  /**
4
4
  * Creates a prime field with the specified prime modulus and associated operations.
5
5
  *
@@ -102,16 +102,11 @@ export const modSqrt = (field) => {
102
102
  return x => {
103
103
  const v = reduce(x);
104
104
  const r = sqrt_p(v);
105
- if (r !== null) {
106
- return r;
107
- }
108
105
  // For a prime `p ≡ 3 (mod 4)`, `−1` is a non-residue, so exactly one of
109
106
  // `±v` is a quadratic residue: if `v` has no root, `neg(v)` must — hence
110
107
  // `s` is non-null. `sqrt` already enforces `p ≡ 3 (mod 4)`, but primality
111
108
  // is never checked, so the only way to reach `s === null` is a *composite*
112
109
  // modulus (where the residue argument breaks).
113
- const s = sqrt_p(neg(v));
114
- assert(s !== null, 'modSqrt');
115
- return s;
110
+ return r !== null ? r : assertNotNullish(sqrt_p(neg(v)), 'modSqrt');
116
111
  };
117
112
  };
@@ -4,5 +4,5 @@
4
4
  * @module
5
5
  */
6
6
  export type Range = readonly [number, number];
7
- export declare const contains: (range: Range) => (i: number) => boolean;
7
+ export declare const contains: (...range: Range) => (i: number) => boolean;
8
8
  export declare const one: (i: number) => Range;
@@ -0,0 +1,2 @@
1
+ export const contains = (b, e) => i => b <= i && i <= e;
2
+ export const one = a => [a, a];
@@ -0,0 +1,9 @@
1
+ import { contains } from './module.f.js';
2
+ import { assert } from '../../asserts/module.f.js';
3
+ export const proof = () => {
4
+ assert(contains(0, 5)(1), 1);
5
+ assert(contains(0, 5)(0), 0);
6
+ assert(contains(0, 5)(5), 5);
7
+ assert(!(contains(0, 5)(-1)), -1);
8
+ assert(!(contains(0, 5)(6)), 6);
9
+ };
@@ -5,6 +5,7 @@ import { union } from '../sorted_set/module.f.js';
5
5
  import { equal, toArray } from '../list/module.f.js';
6
6
  import { strictEqual } from '../function/operator/module.f.js';
7
7
  import { cmp } from '../string/module.f.js';
8
+ import { assertEq } from '../../asserts/module.f.js';
8
9
  const str = stringify(sort);
9
10
  const op = {
10
11
  union: union(cmp),
@@ -25,31 +26,17 @@ export const proof = {
25
26
  const merged = toArray(rmOps.merge(range1)(range2));
26
27
  // Retrieve values from the merged range map
27
28
  //
28
- if (rmOps.get(-1)(merged) !== 0) {
29
- throw 'error';
30
- }
29
+ assertEq(rmOps.get(-1)(merged), 0, 'error');
31
30
  //
32
- if (rmOps.get(0)(merged) !== 2) {
33
- throw 'error';
34
- }
35
- if (rmOps.get(2)(merged) !== 2) {
36
- throw 'error';
37
- }
31
+ assertEq(rmOps.get(0)(merged), 2, 'error');
32
+ assertEq(rmOps.get(2)(merged), 2, 'error');
38
33
  // 2 | 5 = 7
39
- if (rmOps.get(7)(merged) !== 7) {
40
- throw 'error';
41
- }
34
+ assertEq(rmOps.get(7)(merged), 7, 'error');
42
35
  //
43
- if (rmOps.get(12)(merged) !== 5) {
44
- throw 'error';
45
- }
46
- if (rmOps.get(15)(merged) !== 5) {
47
- throw 'error';
48
- }
36
+ assertEq(rmOps.get(12)(merged), 5, 'error');
37
+ assertEq(rmOps.get(15)(merged), 5, 'error');
49
38
  //
50
- if (rmOps.get(16)(merged) !== 0) {
51
- throw 'error';
52
- }
39
+ assertEq(rmOps.get(16)(merged), 0, 'error');
53
40
  },
54
41
  merge: [
55
42
  () => {
@@ -57,63 +44,49 @@ export const proof = {
57
44
  const b = null;
58
45
  const merged = merge(op)(a)(b);
59
46
  const result = str(toArray(merged));
60
- if (result !== '[[["a"],1],[["b"],2]]') {
61
- throw result;
62
- }
47
+ assertEq(result, '[[["a"],1],[["b"],2]]');
63
48
  },
64
49
  () => {
65
50
  const a = null;
66
51
  const b = [[['a'], 1], [['b'], 2]];
67
52
  const merged = merge(op)(a)(b);
68
53
  const result = str(toArray(merged));
69
- if (result !== '[[["a"],1],[["b"],2]]') {
70
- throw result;
71
- }
54
+ assertEq(result, '[[["a"],1],[["b"],2]]');
72
55
  },
73
56
  () => {
74
57
  const a = [[['a'], 1], [['b'], 2]];
75
58
  const b = [[['a'], 1], [['b'], 2]];
76
59
  const merged = merge(op)(a)(b);
77
60
  const result = str(toArray(merged));
78
- if (result !== '[[["a"],1],[["b"],2]]') {
79
- throw result;
80
- }
61
+ assertEq(result, '[[["a"],1],[["b"],2]]');
81
62
  },
82
63
  () => {
83
64
  const a = [[['a'], 1], [['c'], 3]];
84
65
  const b = [[['b'], 2], [['d'], 4]];
85
66
  const merged = merge(op)(a)(b);
86
67
  const result = str(toArray(merged));
87
- if (result !== '[[["a","b"],1],[["b","c"],2],[["c","d"],3],[["d"],4]]') {
88
- throw result;
89
- }
68
+ assertEq(result, '[[["a","b"],1],[["b","c"],2],[["c","d"],3],[["d"],4]]');
90
69
  },
91
70
  () => {
92
71
  const a = [[['a'], 1], [['d'], 4]];
93
72
  const b = [[['b'], 2], [['c'], 3]];
94
73
  const merged = merge(op)(a)(b);
95
74
  const result = str(toArray(merged));
96
- if (result !== '[[["a","b"],1],[["b","d"],2],[["c","d"],3],[["d"],4]]') {
97
- throw result;
98
- }
75
+ assertEq(result, '[[["a","b"],1],[["b","d"],2],[["c","d"],3],[["d"],4]]');
99
76
  },
100
77
  () => {
101
78
  const a = [[['a'], 1], [['b'], 2]];
102
79
  const b = [[['b'], 1], [['a'], 2]];
103
80
  const merged = merge(op)(a)(b);
104
81
  const result = str(toArray(merged));
105
- if (result !== '[[["a","b"],2]]') {
106
- throw result;
107
- }
82
+ assertEq(result, '[[["a","b"],2]]');
108
83
  },
109
84
  () => {
110
85
  const a = [[['a'], 1], [['b'], 2], [['a'], 3]];
111
86
  const b = [[['a'], 5]];
112
87
  const merged = merge(op)(a)(b);
113
88
  const result = str(toArray(merged));
114
- if (result !== '[[["a"],1],[["a","b"],2],[["a"],5]]') {
115
- throw result;
116
- }
89
+ assertEq(result, '[[["a"],1],[["a","b"],2],[["a"],5]]');
117
90
  }
118
91
  ],
119
92
  get: () => {
@@ -123,58 +96,42 @@ export const proof = {
123
96
  () => {
124
97
  const rm = [[['a'], 10], [['b'], 20], [['c'], 30]];
125
98
  const result = str(at(5)(rm));
126
- if (result !== '["a"]') {
127
- throw result;
128
- }
99
+ assertEq(result, '["a"]');
129
100
  },
130
101
  () => {
131
102
  const rm = [[['a'], 10], [['b'], 20], [['c'], 30]];
132
103
  const result = str(at(10)(rm));
133
- if (result !== '["a"]') {
134
- throw result;
135
- }
104
+ assertEq(result, '["a"]');
136
105
  },
137
106
  () => {
138
107
  const rm = [[['a'], 10], [['b'], 20], [['c'], 30]];
139
108
  const result = str(at(15)(rm));
140
- if (result !== '["b"]') {
141
- throw result;
142
- }
109
+ assertEq(result, '["b"]');
143
110
  },
144
111
  () => {
145
112
  const rm = [[['a'], 10], [['b'], 20], [['c'], 30]];
146
113
  const result = str(at(20)(rm));
147
- if (result !== '["b"]') {
148
- throw result;
149
- }
114
+ assertEq(result, '["b"]');
150
115
  },
151
116
  () => {
152
117
  const rm = [[['a'], 10], [['b'], 20], [['c'], 30]];
153
118
  const result = str(at(25)(rm));
154
- if (result !== '["c"]') {
155
- throw result;
156
- }
119
+ assertEq(result, '["c"]');
157
120
  },
158
121
  () => {
159
122
  const rm = [[['a'], 10], [['b'], 20], [['c'], 30]];
160
123
  const result = str(at(30)(rm));
161
- if (result !== '["c"]') {
162
- throw result;
163
- }
124
+ assertEq(result, '["c"]');
164
125
  },
165
126
  () => {
166
127
  const rm = [[['a'], 10], [['b'], 20], [['c'], 30]];
167
128
  const result = str(at(35)(rm));
168
- if (result !== '[]') {
169
- throw result;
170
- }
129
+ assertEq(result, '[]');
171
130
  },
172
131
  () => {
173
132
  const rm = [];
174
133
  const result = str(at(10)(rm));
175
- if (result !== '[]') {
176
- throw result;
177
- }
134
+ assertEq(result, '[]');
178
135
  }
179
136
  ];
180
137
  },
@@ -184,33 +141,23 @@ export const proof = {
184
141
  return [
185
142
  () => {
186
143
  const result = get(def)(0)(rm);
187
- if (result !== -1) {
188
- throw result;
189
- }
144
+ assertEq(result, -1);
190
145
  },
191
146
  () => {
192
147
  const result = get(def)(1)(rm);
193
- if (result !== 42) {
194
- throw result;
195
- }
148
+ assertEq(result, 42);
196
149
  },
197
150
  () => {
198
151
  const result = get(def)(3)(rm);
199
- if (result !== 42) {
200
- throw result;
201
- }
152
+ assertEq(result, 42);
202
153
  },
203
154
  () => {
204
155
  const result = get(def)(7)(rm);
205
- if (result !== 42) {
206
- throw result;
207
- }
156
+ assertEq(result, 42);
208
157
  },
209
158
  () => {
210
159
  const result = get(def)(9)(rm);
211
- if (result !== -1) {
212
- throw result;
213
- }
160
+ assertEq(result, -1);
214
161
  },
215
162
  ];
216
163
  }
@@ -1,11 +1,12 @@
1
1
  declare const example: () => void;
2
2
  declare const invertTest: () => void;
3
- declare const unwrapError: () => void;
4
3
  declare const mapOkTest: () => void;
5
4
  export declare const proof: {
6
5
  example: typeof example;
7
6
  invertTest: typeof invertTest;
8
- unwrapError: typeof unwrapError;
9
7
  mapOkTest: typeof mapOkTest;
8
+ throw: {
9
+ unwrapError: () => string;
10
+ };
10
11
  };
11
12
  export {};
@@ -0,0 +1,31 @@
1
+ import { error, ok, unwrap, invert, mapOk } from "./module.f.js";
2
+ import { assert, assertEq } from '../../asserts/module.f.js';
3
+ const example = () => {
4
+ const success = ok(42);
5
+ const failure = error('Something went wrong');
6
+ assertEq(unwrap(success), 42, 'error');
7
+ const [kind, v] = failure;
8
+ assertEq(kind, 'error');
9
+ // `v` is inferred as `string` here
10
+ assertEq(v, 'Something went wrong', 'error');
11
+ };
12
+ const invertTest = () => {
13
+ const [k0, v0] = invert(ok(42));
14
+ assert(!(k0 !== 'error' || v0 !== 42), [k0, v0]);
15
+ const [k1, v1] = invert(error('oops'));
16
+ assert(!(k1 !== 'ok' || v1 !== 'oops'), [k1, v1]);
17
+ };
18
+ const mapOkTest = () => {
19
+ const [k0, v0] = mapOk((n) => n + 1)(ok(41));
20
+ assert(!(k0 !== 'ok' || v0 !== 42), [k0, v0]);
21
+ const [k1, v1] = mapOk((n) => n + 1)(error('oops'));
22
+ assert(!(k1 !== 'error' || v1 !== 'oops'), [k1, v1]);
23
+ };
24
+ export const proof = {
25
+ example,
26
+ invertTest,
27
+ mapOkTest,
28
+ throw: {
29
+ unwrapError: () => unwrap(error('oops')),
30
+ },
31
+ };
@@ -15,6 +15,11 @@
15
15
  * with one handler per variant; `visit(v)(rtti)` recognizes `rtti` and
16
16
  * calls the matching handler. Both consumers compose their top-level
17
17
  * function from a visitor.
18
+ * - `eachEntry`: the container entry loop (array/record/tuple/struct), shared
19
+ * by both consumers' container builders. Callers choose what (if anything)
20
+ * to accumulate, so `validate`'s pure pass/fail check pays no allocation.
21
+ * - `orVisit`: the shared `or` handler — try each variant's recursive walker,
22
+ * return the first match.
18
23
  *
19
24
  * Keeping the kernel here also removes `parse`'s incidental dependency on
20
25
  * `validate` and gives future schema-driven consumers (e.g. the data form
@@ -22,7 +27,7 @@
22
27
  *
23
28
  * @module
24
29
  */
25
- import type { Primitive, Unknown } from '../../../djs/module.f.ts';
30
+ import type { Primitive, Unknown } from '../ts/module.f.ts';
26
31
  import { type Info0, type Primitive0, type Struct, type Tag1, type Tuple, type Type } from '../module.f.ts';
27
32
  import { type Error, type Result as CommonResult } from '../../result/module.f.ts';
28
33
  import type { Ts } from '../ts/module.f.ts';
@@ -74,6 +79,36 @@ export type Container<K extends Tag1> = K extends 'array' ? ReadonlyArray<Unknow
74
79
  export declare const isArray: IsContainer<ReadonlyArray<Unknown>>;
75
80
  /** `IsContainer` guard for records/structs, shared by `validate` and `parse`. */
76
81
  export declare const isObject: IsContainer<StringMap<string, Unknown>>;
82
+ /**
83
+ * Runs `item` over each `[key, value]` entry, bailing out with the first
84
+ * error, path-prefixed with that entry's key. On success, folds each item's
85
+ * result into `acc` (starting from `init`) with `accumulate` and returns the
86
+ * final accumulator.
87
+ *
88
+ * Shared by `validate` and `parse`'s container builders (array/record/tuple/
89
+ * struct), which differ only in what `item` does with the value and what
90
+ * they accumulate: `validate` has nothing to collect — its entire schema is
91
+ * "did every entry succeed?" — so it passes `undefined`/`(acc) => acc` and
92
+ * pays no allocation per entry; `parse` needs the rebuilt `[key, value]`
93
+ * pairs, so it folds them into a `List` (see its call site) and converts to
94
+ * an array once at the end.
95
+ */
96
+ export declare const eachEntry: <V, R, A>(entries: ReadonlyArray<readonly [string, V]>, item: (k: string, v: V) => CommonResult<R, ValidationError>, init: A, accumulate: (acc: A, k: string, value: R) => A) => CommonResult<A, ValidationError>;
97
+ /** `Result` with the payload type erased; avoids instantiating `Ts<Type>`. */
98
+ export type ResultE = CommonResult<Unknown, ValidationError>;
99
+ /** A `Validate`-shaped function with the payload type erased. */
100
+ export type ValidateE = (value: Unknown) => ResultE;
101
+ /**
102
+ * First variant in `variants` that `recurse` accepts, else `verror('no match')`.
103
+ *
104
+ * Shared `or` handler for `validate` and `parse`: both try each variant
105
+ * against the value and return the first `'ok'` verbatim, differing only in
106
+ * which recursive function (`validate` or `parse`) walks each variant. `recurse`
107
+ * is typed over the erased `ValidateE` alias — annotating it as `(t: Type) =>
108
+ * Validate<Type>` would itself instantiate `Validate<Type>` and hit TS2589 —
109
+ * so each caller passes its recursive function through one boundary cast.
110
+ */
111
+ export declare const orVisit: (recurse: (t: Type) => ValidateE) => (variants: readonly Type[]) => (value: Unknown) => ResultE;
77
112
  /**
78
113
  * Visits a schema `Type` by dispatching to the matching handler in `v`.
79
114
  *
@@ -25,6 +25,50 @@ const visitConst = (v) => (c) => typeof c === 'object' && c !== null
25
25
  export const isArray = value => commonIsArray(value);
26
26
  /** `IsContainer` guard for records/structs, shared by `validate` and `parse`. */
27
27
  export const isObject = value => commonIsObject(value);
28
+ /**
29
+ * Runs `item` over each `[key, value]` entry, bailing out with the first
30
+ * error, path-prefixed with that entry's key. On success, folds each item's
31
+ * result into `acc` (starting from `init`) with `accumulate` and returns the
32
+ * final accumulator.
33
+ *
34
+ * Shared by `validate` and `parse`'s container builders (array/record/tuple/
35
+ * struct), which differ only in what `item` does with the value and what
36
+ * they accumulate: `validate` has nothing to collect — its entire schema is
37
+ * "did every entry succeed?" — so it passes `undefined`/`(acc) => acc` and
38
+ * pays no allocation per entry; `parse` needs the rebuilt `[key, value]`
39
+ * pairs, so it folds them into a `List` (see its call site) and converts to
40
+ * an array once at the end.
41
+ */
42
+ export const eachEntry = (entries, item, init, accumulate) => {
43
+ let acc = init;
44
+ for (const [k, v] of entries) {
45
+ const r = item(k, v);
46
+ if (r[0] === 'error') {
47
+ return prependPath(k, r);
48
+ }
49
+ acc = accumulate(acc, k, r[1]);
50
+ }
51
+ return ok(acc);
52
+ };
53
+ /**
54
+ * First variant in `variants` that `recurse` accepts, else `verror('no match')`.
55
+ *
56
+ * Shared `or` handler for `validate` and `parse`: both try each variant
57
+ * against the value and return the first `'ok'` verbatim, differing only in
58
+ * which recursive function (`validate` or `parse`) walks each variant. `recurse`
59
+ * is typed over the erased `ValidateE` alias — annotating it as `(t: Type) =>
60
+ * Validate<Type>` would itself instantiate `Validate<Type>` and hit TS2589 —
61
+ * so each caller passes its recursive function through one boundary cast.
62
+ */
63
+ export const orVisit = (recurse) => (variants) => (value) => {
64
+ for (const t of variants) {
65
+ const r = recurse(t)(value);
66
+ if (r[0] === 'ok') {
67
+ return r;
68
+ }
69
+ }
70
+ return verror('no match');
71
+ };
28
72
  /**
29
73
  * Visits a schema `Type` by dispatching to the matching handler in `v`.
30
74
  *
@@ -0,0 +1,8 @@
1
+ export declare const proof: {
2
+ empty: () => void;
3
+ allOk: () => void;
4
+ noAccumulate: () => void;
5
+ firstErrorWins: () => void;
6
+ shortCircuits: () => void;
7
+ pathPrefixed: () => void;
8
+ };
@@ -0,0 +1,51 @@
1
+ import { eachEntry } from './module.f.js';
2
+ import { error, ok } from '../../result/module.f.js';
3
+ import { assert, assertEq } from '../../../asserts/module.f.js';
4
+ const item = (k, v) => v < 0 ? error({ path: [], message: `negative at ${k}` }) : ok(v * 2);
5
+ /** Mirrors `parse`'s accumulate step, kept simple (a small test list, not a `List`). */
6
+ const collect = (acc, k, v) => [...acc, [k, v]];
7
+ export const proof = {
8
+ empty: () => {
9
+ const r = eachEntry([], item, [], collect);
10
+ assert(r[0] === 'ok');
11
+ assertEq(r[1].length, 0);
12
+ },
13
+ allOk: () => {
14
+ const r = eachEntry([['a', 1], ['b', 2]], item, [], collect);
15
+ assert(r[0] === 'ok');
16
+ assertEq(r[1].length, 2);
17
+ assertEq(r[1][0][0], 'a');
18
+ assertEq(r[1][0][1], 2);
19
+ assertEq(r[1][1][0], 'b');
20
+ assertEq(r[1][1][1], 4);
21
+ },
22
+ // Mirrors `validate`'s usage: nothing is collected, only pass/fail matters.
23
+ noAccumulate: () => {
24
+ const r = eachEntry([['a', 1]], item, undefined, () => undefined);
25
+ assert(r[0] === 'ok');
26
+ assertEq(r[1], undefined);
27
+ },
28
+ firstErrorWins: () => {
29
+ const r = eachEntry([['a', -1], ['b', -2]], item, [], collect);
30
+ assert(r[0] === 'error');
31
+ assertEq(r[1].message, 'negative at a');
32
+ },
33
+ shortCircuits: () => {
34
+ let calls = 0;
35
+ const counting = (k, v) => {
36
+ calls++;
37
+ return item(k, v);
38
+ };
39
+ const r = eachEntry([['a', -1], ['b', -2], ['c', -3]], counting, [], collect);
40
+ assert(r[0] === 'error');
41
+ assertEq(calls, 1);
42
+ },
43
+ pathPrefixed: () => {
44
+ const nested = (k, v) => v < 0 ? error({ path: ['inner'], message: 'bad' }) : ok(v);
45
+ const r = eachEntry([['outer', -1]], nested, [], collect);
46
+ assert(r[0] === 'error');
47
+ assertEq(r[1].path.length, 2);
48
+ assertEq(r[1].path[0], 'outer');
49
+ assertEq(r[1].path[1], 'inner');
50
+ },
51
+ };
@@ -28,18 +28,18 @@
28
28
  */
29
29
  import {} from '../module.f.js';
30
30
  import { ok } from '../../result/module.f.js';
31
- import { find, map as listMap } from '../../list/module.f.js';
32
- import { constPrimitiveValidate, isArray, isObject, prependPath, primitive0Validate, verror, visit, } from '../common/module.f.js';
31
+ import { reverse, toArray } from '../../list/module.f.js';
32
+ import { constPrimitiveValidate, eachEntry, isArray, isObject, orVisit, primitive0Validate, verror, visit, } from '../common/module.f.js';
33
33
  export {} from '../common/module.f.js';
34
34
  const { entries } = Object;
35
- const keyedFirstError = (results) => {
36
- const e = results.find(([, r]) => r[0] === 'error');
37
- return e === undefined ? null : [e[0], e[1]];
38
- };
39
35
  const arrayRebuild = entries => entries.map(([, v]) => v);
40
36
  const recordRebuild = entries => Object.fromEntries(entries);
41
- /** Drops the `'ok'` tag from each result, yielding the rebuild's `[key, value]` entries. */
42
- const okEntries = (results) => results.map(([k, r]) => [k, r[1]]);
37
+ /** `eachEntry`'s accumulator seed: entries are consed on in reverse as they parse. */
38
+ const emptyEntries = null;
39
+ /** `eachEntry`'s accumulate step: an O(1) prepend, unlike rebuilding an array on every entry. */
40
+ const consEntry = (acc, k, v) => ({ first: [k, v], tail: acc });
41
+ /** Restores forward order from `consEntry`'s reverse-order list, in one linear pass. */
42
+ const orderedEntries = (list) => toArray(reverse(list));
43
43
  /**
44
44
  * Builds a parser for `array` or `record` schemas. Mirrors `validate`'s
45
45
  * `containerValidate`, but rebuilds a fresh container from each item's parsed
@@ -56,11 +56,8 @@ const containerParse = (isContainer, rebuild) => (item) => value => {
56
56
  return ok(rebuild([]));
57
57
  }
58
58
  const itemParse = parse(item);
59
- const results = e.map(([k, v]) => [k, itemParse(v)]);
60
- const err = keyedFirstError(results);
61
- return err === null
62
- ? ok(rebuild(okEntries(results)))
63
- : prependPath(err[0], err[1]);
59
+ const r = eachEntry(e, (_k, v) => itemParse(v), emptyEntries, consEntry);
60
+ return r[0] === 'error' ? r : ok(rebuild(orderedEntries(r[1])));
64
61
  };
65
62
  const arrayParse = containerParse(isArray, arrayRebuild);
66
63
  const recordParse = containerParse(isObject, recordRebuild);
@@ -74,18 +71,12 @@ const constContainerParse = (isContainer, getItem, rebuild) => (rtti) => value =
74
71
  if (!isContainer(value)) {
75
72
  return verror('unexpected value');
76
73
  }
77
- const results = entries(rtti).map(([k, t]) => [k, parse(t)(getItem(value, k))]);
78
- const err = keyedFirstError(results);
79
- return err === null
80
- ? ok(rebuild(okEntries(results)))
81
- : prependPath(err[0], err[1]);
74
+ const r = eachEntry(entries(rtti), (k, t) => parse(t)(getItem(value, k)), emptyEntries, consEntry);
75
+ return r[0] === 'error' ? r : ok(rebuild(orderedEntries(r[1])));
82
76
  };
83
77
  const tupleParse = constContainerParse(isArray, (value, k) => value[Number(k)], arrayRebuild);
84
78
  const structParse = constContainerParse(isObject, (value, k) => value[k], recordRebuild);
85
- const findFirst = find(verror('no match'))((k) => k[0] === 'ok');
86
- const orParse = (rtti) =>
87
- // `parse(t)` where t: Type forces Ts<Type> evaluation → TS2589; cast keeps result as any.
88
- value => findFirst(listMap(t => parse(t)(value))(rtti));
79
+ const orParse = (rtti) => orVisit(parse)(rtti);
89
80
  /**
90
81
  * Creates a parser function for the given RTTI schema.
91
82
  *