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,21 +1,14 @@
1
1
  import { parse } from './module.f.js';
2
2
  import { boolean, number, string, bigint, unknown, array, record, or, option } from '../module.f.js';
3
- const assertOk = ([k]) => { if (k !== 'ok') {
4
- throw 'expected ok';
5
- } };
6
- const assertError = ([k]) => { if (k !== 'error') {
7
- throw 'expected error';
8
- } };
3
+ import { assert, assertEq } from '../../../asserts/module.f.js';
4
+ const assertOk = ([k]) => { assertEq(k, 'ok', 'expected ok'); };
5
+ const assertError = ([k]) => { assertEq(k, 'error', 'expected error'); };
9
6
  const unwrap = (r) => {
10
- if (r[0] !== 'ok') {
11
- throw 'expected ok';
12
- }
7
+ assert(r[0] === 'ok', 'expected ok');
13
8
  return r[1];
14
9
  };
15
10
  const assertErrorPath = (expected) => (r) => {
16
- if (r[0] !== 'error') {
17
- throw 'expected error';
18
- }
11
+ assert(r[0] === 'error', 'expected error');
19
12
  const e = r[1];
20
13
  if (e.path.length !== expected.length) {
21
14
  throw `path length ${e.path.length} != ${expected.length}`;
@@ -207,9 +200,7 @@ export const proof = {
207
200
  freshArray: () => {
208
201
  const input = [1, 2, 3];
209
202
  const out = unwrap(parse(array(number))(input));
210
- if (out === input) {
211
- throw 'expected a fresh array';
212
- }
203
+ assert(out !== input, 'expected a fresh array');
213
204
  assertDeepEqual(out, [1, 2, 3]);
214
205
  },
215
206
  error: () => {
@@ -236,9 +227,7 @@ export const proof = {
236
227
  freshRecord: () => {
237
228
  const input = { a: 1, b: 2 };
238
229
  const out = unwrap(parse(record(number))(input));
239
- if (out === input) {
240
- throw 'expected a fresh record';
241
- }
230
+ assert(out !== input, 'expected a fresh record');
242
231
  assertDeepEqual(out, { a: 1, b: 2 });
243
232
  },
244
233
  error: () => {
@@ -11,9 +11,15 @@ export type Primitive = null | boolean | number | string | undefined | bigint;
11
11
  * The TypeScript type that rtti's `unknown` schema validates — any value that
12
12
  * an rtti schema can represent: a primitive, an array, or an object.
13
13
  *
14
- * Currently equivalent to `djs.Unknown`, but defined here to keep `rtti` free
15
- * of `djs` dependencies. May be extended to include functions or other
16
- * non-JSON-primitives in the future.
14
+ * This is the single source of truth for the rtti value domain: every rtti
15
+ * module (`common`, `validate`, `parse`, …) imports `Unknown`/`Primitive`
16
+ * from here, not from `djs`, keeping `rtti` free of a `djs` dependency (djs
17
+ * depends on rtti, not the other way around).
18
+ *
19
+ * The relationship to djs is a subset one — `djs.Unknown ⊆ rtti.Unknown` — not
20
+ * equality: the two happen to coincide today, but `rtti.Unknown` may widen to
21
+ * admit values djs cannot represent (e.g. functions) without djs following.
22
+ * Do not re-point rtti imports at `djs.Unknown` on the assumption they match.
17
23
  */
18
24
  export type Unknown = Primitive | Array | Object;
19
25
  /** A read-only array of {@link Unknown} values. */
@@ -54,7 +60,7 @@ export type StructTs<T extends Struct> = (keyof OptionalFields<T> extends never
54
60
  *
55
61
  * **Recursive schemas and TS2589:** when a schema is self-referential, `StructTs` would
56
62
  * expand infinitely and TypeScript raises TS2589. Break the cycle by annotating the
57
- * schema value with `Phantom<typeof myThunk, MyType>` from `fs/types/phantom/module.f.ts`.
63
+ * schema value with `Phantom<typeof myThunk, MyType>` from `fjs/types/phantom/module.f.ts`.
58
64
  * `Ts<>` detects the phantom key and returns `MyType` directly without recursing:
59
65
  *
60
66
  * ```ts
@@ -1,8 +1,10 @@
1
1
  import {} from '../module.f.js';
2
2
  import { ok } from '../../result/module.f.js';
3
- import { constPrimitiveValidate, isArray, isObject, prependPath, primitive0Validate, verror, visit, } from '../common/module.f.js';
3
+ import { constPrimitiveValidate, eachEntry, isArray, isObject, orVisit, primitive0Validate, verror, visit, } from '../common/module.f.js';
4
4
  export { constPrimitiveValidate, prependPath, primitive0Validate, verror, } from '../common/module.f.js';
5
5
  const { entries } = Object;
6
+ /** `validate` has nothing to collect from a successful entry — only pass/fail matters. */
7
+ const noAccumulate = () => undefined;
6
8
  /**
7
9
  * Builds a validator for `array` or `record` schemas.
8
10
  * The inner item validator is instantiated lazily (only when the container is
@@ -19,15 +21,10 @@ const containerValidate = (isContainer) => (item) => value => {
19
21
  // Note: we shouldn't instantiate `itemValidate` until we make sure `entries` is not empty.
20
22
  // Otherwise, we can get infinite recursion on empty arrays and objects
21
23
  const itemValidate = validate(item);
22
- for (const [k, v] of e) {
23
- const r = itemValidate(v);
24
- if (r[0] === 'error') {
25
- return prependPath(k, r);
26
- }
27
- }
24
+ const r = eachEntry(e, (_k, v) => itemValidate(v), undefined, noAccumulate);
28
25
  // `value` is Container<K>, but Ts<Info1<K,I>> = readonly Ts<I>[] | Record<string,Ts<I>>.
29
26
  // TypeScript can't narrow the container's element types through the validation loop.
30
- return ok(value);
27
+ return r[0] === 'error' ? r : ok(value);
31
28
  };
32
29
  const arrayValidate = containerValidate(isArray);
33
30
  const recordValidate = containerValidate(isObject);
@@ -40,32 +37,14 @@ const constContainerValidate = (isContainer, getItem) => (rtti) => value => {
40
37
  if (!isContainer(value)) {
41
38
  return verror('unexpected value');
42
39
  }
43
- for (const [k, v] of Object.entries(rtti)) {
44
- const item = getItem(value, k);
45
- const r = validate(v)(item);
46
- if (r[0] === 'error') {
47
- return prependPath(k, r);
48
- }
49
- }
40
+ const r = eachEntry(Object.entries(rtti), (k, v) => validate(v)(getItem(value, k)), undefined, noAccumulate);
50
41
  // `value` is C (Unknown container), but Ts<T> for T extends Tuple|Struct is not
51
42
  // structurally equivalent to C — TypeScript can't narrow element types through the loop.
52
- return ok(value);
43
+ return r[0] === 'error' ? r : ok(value);
53
44
  };
54
45
  const tupleValidate = constContainerValidate(isArray, (value, k) => value[Number(k)]);
55
46
  const structValidate = constContainerValidate(isObject, (value, k) => value[k]);
56
- const orValidate = (rtti) => {
57
- const all = rtti.map(r => validate(r));
58
- return value => {
59
- for (const i of all) {
60
- // `i` is Validate<Type>; calling without cast forces Ts<Type> evaluation → TS2589.
61
- const r = i(value);
62
- if (r[0] === 'ok') {
63
- return r;
64
- }
65
- }
66
- return verror('no match');
67
- };
68
- };
47
+ const orValidate = (rtti) => orVisit(validate)(rtti);
69
48
  /**
70
49
  * Creates a validator function for the given RTTI schema.
71
50
  *
@@ -1,15 +1,10 @@
1
1
  import { validate } from './module.f.js';
2
2
  import { boolean, number, string, bigint, unknown, array, record, or, option } from '../module.f.js';
3
- const assertOk = ([k]) => { if (k !== 'ok') {
4
- throw 'expected ok';
5
- } };
6
- const assertError = ([k]) => { if (k !== 'error') {
7
- throw 'expected error';
8
- } };
3
+ import { assert, assertEq } from '../../../asserts/module.f.js';
4
+ const assertOk = ([k]) => { assertEq(k, 'ok', 'expected ok'); };
5
+ const assertError = ([k]) => { assertEq(k, 'error', 'expected error'); };
9
6
  const assertErrorPath = (expected) => (r) => {
10
- if (r[0] !== 'error') {
11
- throw 'expected error';
12
- }
7
+ assert(r[0] === 'error', 'expected error');
13
8
  const e = r[1];
14
9
  if (e.path.length !== expected.length) {
15
10
  throw `path length ${e.path.length} != ${expected.length}`;
@@ -4,56 +4,43 @@ import { sort } from '../object/module.f.js';
4
4
  import { toArray, countdown, length } from '../list/module.f.js';
5
5
  import { flip } from '../function/module.f.js';
6
6
  import { cmp } from '../number/module.f.js';
7
+ import { assert, assertEq } from '../../asserts/module.f.js';
7
8
  const str = stringify(sort);
8
9
  const reverseCmp = flip(cmp);
9
10
  export const proof = {
10
11
  sortedMergre: [
11
12
  () => {
12
13
  const result = str(toArray(merge(cmp)([2, 3, 4])([1, 3, 5])));
13
- if (result !== '[1,2,3,4,5]') {
14
- throw result;
15
- }
14
+ assertEq(result, '[1,2,3,4,5]');
16
15
  },
17
16
  () => {
18
17
  const result = str(toArray(merge(cmp)([1, 2, 3])([])));
19
- if (result !== '[1,2,3]') {
20
- throw result;
21
- }
18
+ assertEq(result, '[1,2,3]');
22
19
  },
23
20
  () => {
24
21
  const n = 10_000;
25
22
  const list = countdown(n);
26
23
  const result = merge(reverseCmp)(list)(list);
27
24
  const len = length(result);
28
- if (len != n) {
29
- throw result;
30
- }
25
+ assert(len == n, result);
31
26
  }
32
27
  ],
33
28
  find: [
34
29
  () => {
35
30
  const result = find(cmp)(0)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
36
- if (result !== 0) {
37
- throw result;
38
- }
31
+ assertEq(result, 0);
39
32
  },
40
33
  () => {
41
34
  const result = find(cmp)(3)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
42
- if (result !== null) {
43
- throw result;
44
- }
35
+ assertEq(result, null);
45
36
  },
46
37
  () => {
47
38
  const result = find(cmp)(77)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
48
- if (result !== null) {
49
- throw result;
50
- }
39
+ assertEq(result, null);
51
40
  },
52
41
  () => {
53
42
  const result = find(cmp)(80)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
54
- if (result !== 80) {
55
- throw result;
56
- }
43
+ assertEq(result, 80);
57
44
  }
58
45
  ]
59
46
  };
@@ -4,6 +4,7 @@ import { sort } from '../object/module.f.js';
4
4
  import { toArray, countdown, length } from '../list/module.f.js';
5
5
  import { flip } from '../function/module.f.js';
6
6
  import { cmp } from '../number/module.f.js';
7
+ import { assert, assertEq } from '../../asserts/module.f.js';
7
8
  const str = a => stringify(sort)(a);
8
9
  const reverseCmp = flip(cmp);
9
10
  export const proof = {
@@ -12,81 +13,55 @@ export const proof = {
12
13
  const setA = [1, 3, 5];
13
14
  const setB = [3, 4, 5];
14
15
  const unionSet = union(cmp)(setA)(setB); // [1, 3, 4, 5]
15
- if (str(unionSet) !== '[1,3,4,5]') {
16
- throw 0;
17
- }
16
+ assertEq(str(unionSet), '[1,3,4,5]', 0);
18
17
  const intersectionSet = intersect(cmp)(setA)(setB); // [3, 5]
19
- if (str(intersectionSet) !== '[3,5]') {
20
- throw 1;
21
- }
22
- if (!has(cmp)(3)(setA)) {
23
- throw 2;
24
- }
25
- if (has(cmp)(2)(setA)) {
26
- throw 3;
27
- }
18
+ assertEq(str(intersectionSet), '[3,5]', 1);
19
+ assert(has(cmp)(3)(setA), 2);
20
+ assert(!(has(cmp)(2)(setA)), 3);
28
21
  },
29
22
  union: [
30
23
  () => {
31
24
  const result = str(toArray(union(cmp)([2, 3, 4])([1, 3, 5])));
32
- if (result !== '[1,2,3,4,5]') {
33
- throw result;
34
- }
25
+ assertEq(result, '[1,2,3,4,5]');
35
26
  },
36
27
  () => {
37
28
  const result = str(toArray(union(cmp)([1, 2, 3])([])));
38
- if (result !== '[1,2,3]') {
39
- throw result;
40
- }
29
+ assertEq(result, '[1,2,3]');
41
30
  },
42
31
  () => {
43
32
  const n = 10_000;
44
33
  const sortedSet = toArray(countdown(n));
45
34
  const result = union(reverseCmp)(sortedSet)(sortedSet);
46
35
  const len = length(result);
47
- if (len != n) {
48
- throw result;
49
- }
36
+ assert(len == n, result);
50
37
  }
51
38
  ],
52
39
  intersect: [
53
40
  () => {
54
41
  const result = str(toArray(intersect(cmp)([2, 3, 4])([1, 3, 5])));
55
- if (result !== '[3]') {
56
- throw result;
57
- }
42
+ assertEq(result, '[3]');
58
43
  },
59
44
  () => {
60
45
  const result = str(toArray(intersect(cmp)([1, 2, 3])([])));
61
- if (result !== '[]') {
62
- throw result;
63
- }
46
+ assertEq(result, '[]');
64
47
  }
65
48
  ],
66
49
  has: [
67
50
  () => {
68
51
  const result = has(cmp)(0)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
69
- if (!result) {
70
- throw result;
71
- }
52
+ assert(result, result);
72
53
  },
73
54
  () => {
74
55
  const result = has(cmp)(3)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
75
- if (result) {
76
- throw result;
77
- }
56
+ assert(!(result), result);
78
57
  },
79
58
  () => {
80
59
  const result = has(cmp)(77)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
81
- if (result) {
82
- throw result;
83
- }
60
+ assert(!(result), result);
84
61
  },
85
62
  () => {
86
63
  const result = has(cmp)(80)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
87
- if (!result) {
88
- throw result;
89
- }
64
+ assert(result, result);
90
65
  }
91
66
  ]
92
67
  };
@@ -0,0 +1,77 @@
1
+ import { join, concat, repeat, cmp, splitAt } from './module.f.js';
2
+ import { repeat as repeatList } from '../list/module.f.js';
3
+ import { assert, assertEq } from '../../asserts/module.f.js';
4
+ export const proof = {
5
+ example: () => {
6
+ const words = ['hello', 'world'];
7
+ assertEq(join(' ')(words), 'hello world', 0);
8
+ assertEq(concat(words), 'helloworld', 1);
9
+ assertEq(repeat('abc')(3), 'abcabcabc', 2);
10
+ assertEq(cmp('apple')('banana'), -1, 3);
11
+ },
12
+ join: {
13
+ 0: () => {
14
+ const result = join('/')([]);
15
+ assertEq(result, '');
16
+ },
17
+ 1: () => {
18
+ const result = join('/')(['']);
19
+ assertEq(result, '');
20
+ },
21
+ 3: () => {
22
+ const result = join(' ')(['hello', 'world', '!']);
23
+ assertEq(result, 'hello world !');
24
+ }
25
+ },
26
+ concat: () => {
27
+ const result = concat(['hello', 'world']);
28
+ assertEq(result, 'helloworld');
29
+ },
30
+ repeatList: {
31
+ 0: () => {
32
+ const s = join('.')(repeatList('x')(0));
33
+ assert(s == '', s);
34
+ },
35
+ 5: () => {
36
+ const s = join('.')(repeatList('x')(5));
37
+ assert(s == 'x.x.x.x.x', s);
38
+ }
39
+ },
40
+ repeat: () => {
41
+ const s = repeat('x')(5);
42
+ if (s != 'xxxxx') {
43
+ throw s;
44
+ }
45
+ },
46
+ cmp: () => {
47
+ const result = cmp('3')('4');
48
+ assertEq(result, -1);
49
+ },
50
+ splitAt: {
51
+ middle: () => {
52
+ const [a, b] = splitAt(3)('hello');
53
+ assertEq(a, 'hel');
54
+ assertEq(b, 'lo');
55
+ },
56
+ zero: () => {
57
+ const [a, b] = splitAt(0)('hello');
58
+ assertEq(a, '');
59
+ assertEq(b, 'hello');
60
+ },
61
+ full: () => {
62
+ const [a, b] = splitAt(5)('hello');
63
+ assertEq(a, 'hello');
64
+ assertEq(b, '');
65
+ },
66
+ beyond: () => {
67
+ const [a, b] = splitAt(10)('hello');
68
+ assertEq(a, 'hello');
69
+ assertEq(b, '');
70
+ },
71
+ empty: () => {
72
+ const [a, b] = splitAt(0)('');
73
+ assertEq(a, '');
74
+ assertEq(b, '');
75
+ },
76
+ }
77
+ };
@@ -0,0 +1,43 @@
1
+ import { contains, fromValues, remove, set } from './module.f.js';
2
+ import { assert, assertEq } from '../../asserts/module.f.js';
3
+ export const proof = {
4
+ example: () => {
5
+ let mySet = fromValues(['apple', 'banana', 'cherry']);
6
+ assert(contains('banana')(mySet), '1');
7
+ assert(!(contains('date')(mySet)), '2');
8
+ mySet = set('date')(mySet);
9
+ assert(contains('date')(mySet), '3');
10
+ mySet = remove('banana')(mySet);
11
+ assert(!(contains('banana')(mySet)), '4');
12
+ },
13
+ contains: () => {
14
+ const r = set('hello')(null);
15
+ assert(contains('hello')(r), r);
16
+ assert(!(contains('hello1')(r)), r);
17
+ },
18
+ remove: () => {
19
+ let r = set('hello')(null);
20
+ r = set('world')(r);
21
+ r = set('HELLO')(r);
22
+ r = set('WORLD!')(r);
23
+ assert(contains('hello')(r), r);
24
+ assert(!(contains('hello1')(r)), r);
25
+ assert(contains('HELLO')(r), r);
26
+ assert(!(contains('WORLD')(r)), r);
27
+ assert(contains('world')(r), r);
28
+ assert(!(contains('world!')(r)), r);
29
+ assert(contains('WORLD!')(r), r);
30
+ //
31
+ r = remove('hello')(r);
32
+ assert(!(contains('hello')(r)), r);
33
+ assert(contains('world')(r), r);
34
+ r = remove('world')(r);
35
+ assert(!(contains('world')(r)), r);
36
+ assert(contains('HELLO')(r), r);
37
+ r = remove('HELLO')(r);
38
+ assert(!(contains('HELLO')(r)), r);
39
+ assert(contains('WORLD!')(r), r);
40
+ r = remove('WORLD!')(r);
41
+ assertEq(r, null);
42
+ }
43
+ };
@@ -1,71 +1,50 @@
1
1
  import { printer, primitive, union } from './module.f.js';
2
+ import { assertEq } from '../../asserts/module.f.js';
2
3
  const ro = printer();
3
4
  const mut = printer(true);
4
5
  export const primitiveNull = () => {
5
6
  const r = primitive(null);
6
- if (r !== 'null') {
7
- throw r;
8
- }
7
+ assertEq(r, 'null');
9
8
  };
10
9
  export const primitiveBigint = () => {
11
10
  const r = primitive(42n);
12
- if (r !== '42n') {
13
- throw r;
14
- }
11
+ assertEq(r, '42n');
15
12
  };
16
13
  export const primitiveString = () => {
17
14
  const r = primitive('hello');
18
- if (r !== '"hello"') {
19
- throw r;
20
- }
15
+ assertEq(r, '"hello"');
21
16
  };
22
17
  export const primitiveNumberFinite = () => {
23
18
  const r = primitive(3.14);
24
- if (r !== '3.14') {
25
- throw r;
26
- }
19
+ assertEq(r, '3.14');
27
20
  };
28
21
  export const primitiveNumberInfinite = () => {
29
22
  const r = primitive(Infinity);
30
- if (r !== 'number') {
31
- throw r;
32
- }
23
+ assertEq(r, 'number');
33
24
  };
34
25
  export const primitiveUndefined = () => {
35
26
  const r = primitive(undefined);
36
- if (r !== 'undefined') {
37
- throw r;
38
- }
27
+ assertEq(r, 'undefined');
39
28
  };
40
29
  export const primitiveBoolean = () => {
41
30
  const r = primitive(true);
42
- if (r !== 'true') {
43
- throw r;
44
- }
31
+ assertEq(r, 'true');
45
32
  };
46
33
  export const unionEmpty = () => {
47
34
  const r = union([]);
48
- if (r !== 'never') {
49
- throw r;
50
- }
35
+ assertEq(r, 'never');
51
36
  };
52
37
  export const unionSingle = () => {
53
38
  const r = union(['string']);
54
- if (r !== 'string') {
55
- throw r;
56
- }
39
+ assertEq(r, 'string');
57
40
  };
58
41
  export const unionMulti = () => {
59
42
  const r = union(['string', 'number']);
60
- if (r !== 'string|number') {
61
- throw r;
62
- }
43
+ assertEq(r, 'string|number');
63
44
  };
64
45
  export const printerReadonlyTuple = () => {
65
46
  const r = ro.tuple(['string', 'number']);
66
- if (r !== 'readonly[string,number]') {
67
- throw r;
68
- }
47
+ assertEq(r, 'readonly[string,number]');
69
48
  };
70
49
  export const printerReadonlyStruct = () => {
71
50
  const r = ro.struct([['x', 'number'], ['y', 'string']]);
@@ -75,9 +54,7 @@ export const printerReadonlyStruct = () => {
75
54
  };
76
55
  export const printerReadonlyArray = () => {
77
56
  const r = ro.array('string');
78
- if (r !== 'readonly(string)[]') {
79
- throw r;
80
- }
57
+ assertEq(r, 'readonly(string)[]');
81
58
  };
82
59
  export const printerReadonlyRecord = () => {
83
60
  const r = ro.record('number');
@@ -87,9 +64,7 @@ export const printerReadonlyRecord = () => {
87
64
  };
88
65
  export const printerMutableTuple = () => {
89
66
  const r = mut.tuple(['string', 'number']);
90
- if (r !== '[string,number]') {
91
- throw r;
92
- }
67
+ assertEq(r, '[string,number]');
93
68
  };
94
69
  export const printerMutableStruct = () => {
95
70
  const r = mut.struct([['x', 'number']]);
@@ -99,9 +74,7 @@ export const printerMutableStruct = () => {
99
74
  };
100
75
  export const printerMutableArray = () => {
101
76
  const r = mut.array('string');
102
- if (r !== '(string)[]') {
103
- throw r;
104
- }
77
+ assertEq(r, '(string)[]');
105
78
  };
106
79
  export const printerMutableRecord = () => {
107
80
  const r = mut.record('number');
@@ -2,30 +2,30 @@
2
2
  * Conversions between `Uint8Array` values and bit vectors.
3
3
  *
4
4
  * @deprecated FunctionalScript represents byte data as `bigint`-based bit
5
- * vectors (`Vec` from `fs/types/bit_vec`). Use `utf8`/`utf8ToString` from
6
- * `fs/text` for string encoding, and the `bit_vec` module directly for raw
5
+ * vectors (`Vec` from `fjs/types/bit_vec`). Use `utf8`/`utf8ToString` from
6
+ * `fjs/text` for string encoding, and the `bit_vec` module directly for raw
7
7
  * byte manipulation. `Uint8Array` interop belongs at Node.js boundaries only
8
8
  * (e.g. `fromVec`/`toVec` when reading or writing files).
9
9
  *
10
10
  * @module
11
11
  */
12
+ import { assert, assertNotNullish } from '../../asserts/module.f.js';
12
13
  import { utf8, utf8ToString } from '../../text/module.f.js';
13
- import { maxLengthBytes, msb, u8List, u8ListToVec } from '../bit_vec/module.f.js';
14
+ import { maxLengthBytes, msb, tryU8ListToVec, u8List, u8ListToVec } from '../bit_vec/module.f.js';
14
15
  import { compose } from '../function/module.f.js';
15
16
  import { flat, fromArrayLike, iterable, map } from '../list/module.f.js';
16
17
  const u8ListToVecMsb = u8ListToVec(msb);
18
+ const tryU8ListToVecMsb = tryU8ListToVec(msb);
17
19
  const u8ListMsb = u8List(msb);
18
20
  /**
19
21
  * Converts a Uint8Array into an MSB-first bit vector.
20
22
  */
21
23
  export const toVec = (input) => {
22
- if (input.length > maxLengthBytes) {
23
- throw "the array is too big";
24
- }
24
+ assert(input.length <= maxLengthBytes, "the array is too big");
25
25
  return u8ListToVecMsb(fromArrayLike(input));
26
26
  };
27
27
  const m = map(fromArrayLike);
28
- export const listToVec = (input) => u8ListToVecMsb(flat(m(input)));
28
+ export const listToVec = (input) => assertNotNullish(tryU8ListToVecMsb(flat(m(input))), "the array is too big");
29
29
  /**
30
30
  * Converts an MSB-first bit vector into a Uint8Array.
31
31
  */
@@ -10,5 +10,8 @@ export declare const proof: {
10
10
  utf8RoundTrip: () => void;
11
11
  listToVec: () => void;
12
12
  maxLength: () => import("../bit_vec/module.f.ts").Vec;
13
- throw: () => import("../bit_vec/module.f.ts").Vec;
13
+ throw: {
14
+ toVec: () => import("../bit_vec/module.f.ts").Vec;
15
+ listToVec: () => import("../bit_vec/module.f.ts").Vec;
16
+ };
14
17
  };
@@ -2,15 +2,12 @@ import { maxLength, maxLengthBytes, vec } from '../bit_vec/module.f.js';
2
2
  import { toVec, fromVec, listToVec, decodeUtf8, encodeUtf8 } from './module.f.js';
3
3
  import { strictEqual } from '../function/operator/module.f.js';
4
4
  import { equal, fromArrayLike } from '../list/module.f.js';
5
+ import { assert } from '../../asserts/module.f.js';
5
6
  const assertEq = (a, b) => {
6
- if (a !== b) {
7
- throw [a, b];
8
- }
7
+ assert(a === b, [a, b]);
9
8
  };
10
9
  const assertArrayEq = (a, b) => {
11
- if (!equal(strictEqual)(fromArrayLike(a))(fromArrayLike(b))) {
12
- throw [a, b];
13
- }
10
+ assert(equal(strictEqual)(fromArrayLike(a))(fromArrayLike(b)), [a, b]);
14
11
  };
15
12
  export const proof = {
16
13
  empty: () => {
@@ -60,5 +57,8 @@ export const proof = {
60
57
  assertArrayEq(fromVec(result), Uint8Array.from([1, 2, 3]));
61
58
  },
62
59
  maxLength: () => toVec(new Uint8Array(Number(maxLengthBytes))),
63
- throw: () => toVec(new Uint8Array(Number(maxLengthBytes) + 1)),
60
+ throw: {
61
+ toVec: () => toVec(new Uint8Array(Number(maxLengthBytes) + 1)),
62
+ listToVec: () => listToVec([new Uint8Array(Number(maxLengthBytes)), Uint8Array.from([0])]),
63
+ },
64
64
  };