functionalscript 0.36.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 (523) hide show
  1. package/README.md +1 -1
  2. package/{fs → fjs}/asn.1/module.f.js +1 -1
  3. package/{fs → fjs}/asn.1/proof.f.js +32 -94
  4. package/fjs/asserts/module.f.d.ts +36 -0
  5. package/fjs/asserts/module.f.js +39 -0
  6. package/fjs/asserts/proof.f.d.ts +11 -0
  7. package/fjs/asserts/proof.f.js +18 -0
  8. package/{fs → fjs}/base_n/module.f.js +3 -3
  9. package/{fs → fjs}/base_n/proof.f.js +15 -39
  10. package/{fs → fjs/basen}/base128/module.f.d.ts +1 -1
  11. package/{fs → fjs/basen}/base128/module.f.js +1 -1
  12. package/{fs → fjs/basen}/base128/proof.f.js +3 -3
  13. package/{fs → fjs/basen}/base64/module.f.d.ts +2 -2
  14. package/{fs → fjs/basen}/base64/module.f.js +25 -15
  15. package/{fs → fjs/basen}/base64/proof.f.d.ts +2 -0
  16. package/{fs → fjs/basen}/base64/proof.f.js +26 -6
  17. package/{fs → fjs/basen}/cbase32/module.f.d.ts +2 -2
  18. package/{fs → fjs/basen}/cbase32/module.f.js +2 -2
  19. package/{fs → fjs/basen}/cbase32/proof.f.js +16 -43
  20. package/fjs/bnf/data/module.f.d.ts +52 -0
  21. package/{fs → fjs}/bnf/data/module.f.js +56 -6
  22. package/{fs → fjs}/bnf/data/proof.f.d.ts +1 -0
  23. package/{fs → fjs}/bnf/data/proof.f.js +59 -24
  24. package/{fs → fjs}/bnf/descent/module.f.d.ts +4 -14
  25. package/fjs/bnf/descent/module.f.js +124 -0
  26. package/{fs → fjs}/bnf/descent/proof.f.d.ts +1 -0
  27. package/{fs → fjs}/bnf/descent/proof.f.js +59 -28
  28. package/{fs → fjs}/bnf/ll1/module.f.d.ts +4 -4
  29. package/{fs → fjs}/bnf/ll1/module.f.js +15 -13
  30. package/{fs → fjs}/bnf/ll1/proof.f.d.ts +1 -0
  31. package/{fs → fjs}/bnf/ll1/proof.f.js +33 -16
  32. package/{fs → fjs}/bnf/module.f.d.ts +19 -5
  33. package/{fs → fjs}/bnf/module.f.js +14 -15
  34. package/fjs/bnf/proof.f.js +69 -0
  35. package/{fs → fjs}/bnf/testlib.f.js +2 -2
  36. package/{fs → fjs}/cas/cli/module.f.js +7 -7
  37. package/{fs → fjs}/cas/cli/proof.f.d.ts +4 -1
  38. package/{fs → fjs}/cas/cli/proof.f.js +37 -74
  39. package/fjs/cas/evo/mcp/module.f.d.ts +19 -0
  40. package/fjs/cas/evo/mcp/module.f.js +56 -0
  41. package/fjs/cas/evo/mcp/proof.f.d.ts +9 -0
  42. package/fjs/cas/evo/mcp/proof.f.js +95 -0
  43. package/fjs/cas/evo/module.f.d.ts +138 -0
  44. package/fjs/cas/evo/module.f.js +309 -0
  45. package/fjs/cas/evo/proof.f.d.ts +32 -0
  46. package/fjs/cas/evo/proof.f.js +453 -0
  47. package/fjs/cas/mcp/module.f.d.ts +49 -0
  48. package/fjs/cas/mcp/module.f.js +267 -0
  49. package/{fs → fjs}/cas/mcp/proof.f.d.ts +7 -2
  50. package/{fs → fjs}/cas/mcp/proof.f.js +116 -60
  51. package/{fs → fjs}/cas/module.f.d.ts +10 -0
  52. package/{fs → fjs}/cas/module.f.js +36 -10
  53. package/{fs → fjs}/cas/proof.f.d.ts +8 -2
  54. package/{fs → fjs}/cas/proof.f.js +85 -94
  55. package/{fs → fjs}/ci/bun/module.f.js +2 -2
  56. package/{fs → fjs}/ci/common/module.f.d.ts +2 -2
  57. package/{fs → fjs}/ci/common/module.f.js +4 -4
  58. package/fjs/ci/config/module.f.d.ts +42 -0
  59. package/{fs → fjs}/ci/config/module.f.js +6 -8
  60. package/fjs/ci/deno/module.f.js +20 -0
  61. package/{fs → fjs}/ci/module.f.js +9 -9
  62. package/{fs → fjs}/ci/node/module.f.d.ts +1 -1
  63. package/{fs → fjs}/ci/node/module.f.js +3 -5
  64. package/{fs → fjs}/ci/playwright/module.f.js +3 -3
  65. package/{fs → fjs}/ci/proof.f.js +27 -22
  66. package/{fs → fjs}/ci/rust/module.f.js +11 -3
  67. package/{fs → fjs}/cli/module.f.js +3 -3
  68. package/{fs → fjs}/cli/proof.f.js +25 -66
  69. package/{fs/types → fjs/common}/monoid/module.f.d.ts +1 -1
  70. package/{fs/types → fjs/common}/monoid/proof.f.js +4 -9
  71. package/{fs → fjs}/crypto/hmac/module.f.js +2 -2
  72. package/{fs → fjs}/crypto/hmac/proof.f.js +9 -17
  73. package/{fs → fjs}/crypto/pow/module.f.js +3 -3
  74. package/fjs/crypto/pow/proof.f.js +111 -0
  75. package/{fs → fjs}/crypto/secp/module.f.js +2 -2
  76. package/{fs → fjs}/crypto/secp/proof.f.js +14 -35
  77. package/{fs → fjs}/crypto/sha2/module.f.js +2 -2
  78. package/{fs → fjs}/crypto/sha2/proof.f.js +23 -54
  79. package/{fs → fjs}/crypto/sign/module.f.d.ts +0 -5
  80. package/{fs → fjs}/crypto/sign/module.f.js +11 -8
  81. package/{fs → fjs}/crypto/sign/proof.f.js +36 -105
  82. package/{fs → fjs}/crypto/vdf/module.f.js +1 -1
  83. package/{fs → fjs}/crypto/vdf/proof.f.js +23 -64
  84. package/{fs → fjs}/dev/module.f.js +6 -6
  85. package/{fs → fjs}/dev/package_json/module.f.js +6 -6
  86. package/{fs → fjs}/dev/package_json/proof.f.js +9 -9
  87. package/{fs → fjs}/dev/proof.f.js +3 -5
  88. package/{fs → fjs}/djs/ast/module.f.js +2 -2
  89. package/{fs → fjs}/djs/ast/proof.f.js +8 -16
  90. package/fjs/djs/examples/m.f.d.ts +2 -0
  91. package/{fs → fjs}/djs/module.f.d.ts +1 -1
  92. package/{fs → fjs}/djs/module.f.js +5 -5
  93. package/{fs → fjs}/djs/parser/module.f.d.ts +5 -0
  94. package/{fs → fjs}/djs/parser/module.f.js +24 -4
  95. package/{fs → fjs}/djs/parser/proof.f.js +145 -407
  96. package/{fs → fjs}/djs/proof.f.js +16 -39
  97. package/{fs → fjs}/djs/serializer/module.f.js +6 -6
  98. package/{fs → fjs}/djs/serializer/proof.f.js +18 -43
  99. package/fjs/djs/tokenizer/module.f.d.ts +24 -0
  100. package/fjs/djs/tokenizer/module.f.js +472 -0
  101. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.d.ts +4 -3
  102. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.js +447 -446
  103. package/{fs → fjs}/djs/transpiler/module.f.d.ts +5 -0
  104. package/{fs → fjs}/djs/transpiler/module.f.js +21 -11
  105. package/{fs → fjs}/djs/transpiler/proof.f.d.ts +3 -0
  106. package/fjs/djs/transpiler/proof.f.js +67 -0
  107. package/{fs → fjs}/effects/memory/module.f.js +4 -4
  108. package/{fs → fjs}/effects/memory/proof.f.js +11 -24
  109. package/{fs → fjs}/effects/module.f.js +1 -1
  110. package/{fs → fjs}/effects/node/memory/module.js +2 -2
  111. package/{fs → fjs}/effects/node/memory/proof.js +8 -15
  112. package/{fs → fjs}/effects/node/module.d.ts +1 -1
  113. package/{fs → fjs}/effects/node/module.f.d.ts +1 -1
  114. package/{fs → fjs}/effects/node/module.f.js +7 -7
  115. package/{fs → fjs}/effects/node/module.js +13 -13
  116. package/{fs → fjs}/effects/node/proof.f.d.ts +1 -0
  117. package/{fs → fjs}/effects/node/proof.f.js +106 -292
  118. package/{fs → fjs}/effects/node/virtual/module.f.js +7 -7
  119. package/{fs → fjs}/effects/node/virtual/proof.f.d.ts +2 -0
  120. package/{fs → fjs}/effects/node/virtual/proof.f.js +44 -30
  121. package/{fs → fjs}/effects/proof.f.js +18 -47
  122. package/fjs/emergent_testing/all.test.js +4 -0
  123. package/{fs → fjs}/emergent_testing/example.f.d.ts +1 -1
  124. package/{fs → fjs}/emergent_testing/module.f.js +6 -6
  125. package/{fs → fjs}/emergent_testing/proof.f.d.ts +19 -17
  126. package/{fs → fjs}/emergent_testing/proof.f.js +14 -14
  127. package/fjs/emergent_testing/scenarios/all.js +1 -0
  128. package/{fs → fjs}/fsc/bnf.f.js +2 -2
  129. package/{fs → fjs}/fsc/json.f.js +1 -1
  130. package/{fs → fjs}/fsc/module.f.js +7 -7
  131. package/{fs → fjs}/fsc/proof.f.js +16 -38
  132. package/{fs → fjs}/fsm/module.f.js +9 -9
  133. package/{fs → fjs}/fsm/proof.f.js +12 -19
  134. package/{fs → fjs}/js/tokenizer/module.f.js +7 -7
  135. package/{fs → fjs}/js/tokenizer/proof.f.js +5 -5
  136. package/{fs → fjs}/mcp/module.f.d.ts +20 -13
  137. package/{fs → fjs}/mcp/module.f.js +16 -9
  138. package/{fs → fjs}/mcp/proof.f.js +17 -17
  139. package/{fs → fjs}/mcp/stdio/module.f.d.ts +4 -4
  140. package/{fs → fjs}/mcp/stdio/module.f.js +12 -12
  141. package/{fs → fjs}/mcp/stdio/proof.f.js +10 -10
  142. package/{fs → fjs/media}/html/module.f.d.ts +3 -3
  143. package/{fs → fjs/media}/html/module.f.js +9 -9
  144. package/{fs → fjs/media}/html/proof.f.js +12 -33
  145. package/fjs/media/json/module.f.d.ts +50 -0
  146. package/{fs → fjs/media}/json/module.f.js +7 -7
  147. package/{fs → fjs/media}/json/parser/module.f.d.ts +7 -2
  148. package/{fs → fjs/media}/json/parser/module.f.js +21 -7
  149. package/{fs → fjs/media}/json/parser/proof.f.js +45 -120
  150. package/{fs → fjs/media}/json/proof.f.js +4 -4
  151. package/fjs/media/json/rpc/module.f.d.ts +114 -0
  152. package/{fs → fjs/media}/json/rpc/module.f.js +4 -4
  153. package/{fs → fjs/media}/json/rpc/proof.f.js +4 -4
  154. package/fjs/media/json/schema/module.f.d.ts +78 -0
  155. package/{fs → fjs/media}/json/schema/module.f.js +25 -41
  156. package/{fs → fjs/media}/json/schema/proof.f.js +6 -9
  157. package/{fs → fjs/media}/json/serializer/module.f.d.ts +1 -1
  158. package/{fs → fjs/media}/json/serializer/module.f.js +2 -2
  159. package/{fs → fjs/media}/json/serializer/proof.f.js +12 -29
  160. package/{fs → fjs/media}/json/tokenizer/module.f.d.ts +2 -2
  161. package/{fs → fjs/media}/json/tokenizer/module.f.js +4 -4
  162. package/{fs → fjs/media}/json/tokenizer/proof.f.js +5 -5
  163. package/fjs/media/module.f.d.ts +37 -0
  164. package/fjs/media/module.f.js +23 -0
  165. package/fjs/media/proof.f.d.ts +9 -0
  166. package/fjs/media/proof.f.js +58 -0
  167. package/fjs/media/revision/module.f.d.ts +78 -0
  168. package/fjs/media/revision/module.f.js +122 -0
  169. package/fjs/media/revision/proof.f.d.ts +31 -0
  170. package/fjs/media/revision/proof.f.js +140 -0
  171. package/{fs/mime → fjs/media/type}/module.f.d.ts +6 -6
  172. package/{fs/mime → fjs/media/type}/module.f.js +6 -6
  173. package/{fs/mime → fjs/media/type}/proof.f.js +8 -12
  174. package/fjs/module.f.d.ts +2 -0
  175. package/{fs/fjs → fjs}/module.f.js +9 -9
  176. package/fjs/module.js +4 -0
  177. package/{fs → fjs}/path/module.f.js +2 -2
  178. package/{fs → fjs}/path/proof.f.js +27 -78
  179. package/{fs/fjs → fjs}/proof.f.js +6 -4
  180. package/{fs → fjs}/sul/id/module.f.js +9 -9
  181. package/{fs → fjs}/sul/id/proof.f.js +12 -26
  182. package/{fs → fjs}/sul/level/hash/module.f.js +3 -3
  183. package/{fs → fjs}/sul/level/hash/proof.f.js +8 -8
  184. package/{fs → fjs}/sul/level/literal/module.f.js +5 -5
  185. package/{fs → fjs}/sul/level/literal/proof.f.js +15 -29
  186. package/{fs → fjs}/sul/module.f.js +3 -3
  187. package/{fs → fjs}/sul/proof.f.js +3 -3
  188. package/fjs/text/ascii/proof.f.d.ts +6 -0
  189. package/fjs/text/ascii/proof.f.js +14 -0
  190. package/{fs → fjs}/text/code_point/module.f.js +12 -12
  191. package/{fs → fjs}/text/code_point/proof.f.js +1 -1
  192. package/{fs → fjs}/text/module.f.js +5 -5
  193. package/{fs → fjs}/text/proof.f.js +7 -12
  194. package/{fs → fjs}/text/sgr/module.f.js +2 -2
  195. package/{fs → fjs}/text/sgr/proof.f.js +8 -17
  196. package/{fs → fjs}/text/utf16/module.f.js +6 -6
  197. package/{fs → fjs}/text/utf16/proof.f.js +27 -70
  198. package/{fs → fjs}/text/utf8/module.f.js +22 -17
  199. package/{fs → fjs}/text/utf8/proof.f.js +59 -128
  200. package/{fs → fjs}/types/array/module.f.js +1 -1
  201. package/{fs → fjs}/types/array/proof.f.js +21 -55
  202. package/{fs → fjs}/types/bigfloat/module.f.js +1 -1
  203. package/fjs/types/bigfloat/proof.f.js +217 -0
  204. package/{fs → fjs}/types/bigint/module.f.js +2 -2
  205. package/{fs → fjs}/types/bigint/proof.f.js +51 -147
  206. package/{fs → fjs}/types/bit_vec/module.f.js +8 -8
  207. package/{fs → fjs}/types/bit_vec/proof.f.js +76 -218
  208. package/{fs → fjs}/types/btree/find/module.f.js +1 -1
  209. package/fjs/types/btree/find/proof.f.d.ts +3 -0
  210. package/fjs/types/btree/find/proof.f.js +108 -0
  211. package/{fs → fjs}/types/btree/module.f.js +2 -2
  212. package/fjs/types/btree/proof.f.d.ts +13 -0
  213. package/{fs → fjs}/types/btree/proof.f.js +12 -19
  214. package/{fs → fjs}/types/btree/remove/module.f.js +4 -4
  215. package/fjs/types/btree/remove/proof.f.d.ts +9 -0
  216. package/{fs → fjs}/types/btree/remove/proof.f.js +88 -235
  217. package/{fs → fjs}/types/btree/set/module.f.js +8 -5
  218. package/{fs → fjs}/types/btree/set/proof.f.js +39 -28
  219. package/{fs → fjs}/types/byte_set/module.f.js +2 -2
  220. package/fjs/types/byte_set/proof.f.js +79 -0
  221. package/{fs → fjs}/types/function/compare/proof.f.js +14 -37
  222. package/fjs/types/function/operator/proof.f.d.ts +23 -0
  223. package/{fs → fjs}/types/function/operator/proof.f.js +18 -49
  224. package/{fs → fjs}/types/function/proof.f.js +3 -4
  225. package/{fs → fjs}/types/list/module.f.js +2 -2
  226. package/fjs/types/list/proof.f.d.ts +30 -0
  227. package/{fs → fjs}/types/list/proof.f.js +59 -167
  228. package/{fs → fjs}/types/map/proof.f.js +6 -14
  229. package/fjs/types/nibble_set/proof.f.js +60 -0
  230. package/{fs → fjs}/types/nominal/proof.f.js +5 -10
  231. package/{fs → fjs}/types/nullable/module.f.js +2 -2
  232. package/fjs/types/nullable/proof.f.js +29 -0
  233. package/{fs → fjs}/types/number/module.f.js +5 -5
  234. package/{fs → fjs}/types/number/proof.f.js +10 -25
  235. package/{fs → fjs}/types/object/module.f.js +4 -4
  236. package/{fs → fjs}/types/object/proof.f.js +4 -7
  237. package/{fs → fjs}/types/ordered_map/module.f.js +6 -6
  238. package/{fs → fjs}/types/ordered_map/proof.f.js +3 -3
  239. package/fjs/types/patricia_trie/proof.f.d.ts +13 -0
  240. package/{fs → fjs}/types/patricia_trie/proof.f.js +22 -22
  241. package/{fs → fjs}/types/prime_field/module.f.js +3 -8
  242. package/{fs → fjs}/types/prime_field/proof.f.js +2 -2
  243. package/{fs → fjs}/types/range/module.f.d.ts +1 -1
  244. package/fjs/types/range/module.f.js +2 -0
  245. package/fjs/types/range/proof.f.js +9 -0
  246. package/{fs → fjs}/types/range_map/module.f.js +4 -4
  247. package/{fs → fjs}/types/range_map/proof.f.js +35 -88
  248. package/{fs → fjs}/types/result/module.js +1 -1
  249. package/fjs/types/result/proof.f.d.ts +12 -0
  250. package/fjs/types/result/proof.f.js +31 -0
  251. package/{fs → fjs}/types/rtti/common/module.f.d.ts +36 -1
  252. package/{fs → fjs}/types/rtti/common/module.f.js +48 -4
  253. package/fjs/types/rtti/common/proof.f.d.ts +8 -0
  254. package/fjs/types/rtti/common/proof.f.js +51 -0
  255. package/{fs → fjs}/types/rtti/module.f.d.ts +2 -2
  256. package/{fs → fjs}/types/rtti/module.f.js +1 -1
  257. package/{fs → fjs}/types/rtti/parse/module.f.js +16 -25
  258. package/{fs → fjs}/types/rtti/parse/proof.f.js +9 -20
  259. package/{fs → fjs}/types/rtti/ts/module.f.d.ts +10 -4
  260. package/{fs → fjs}/types/rtti/ts/module.f.js +1 -1
  261. package/{fs → fjs}/types/rtti/ts/proof.f.js +2 -2
  262. package/{fs → fjs}/types/rtti/validate/module.f.js +11 -32
  263. package/{fs → fjs}/types/rtti/validate/proof.f.js +6 -11
  264. package/{fs → fjs}/types/sorted_list/module.f.js +3 -3
  265. package/{fs → fjs}/types/sorted_list/proof.f.js +14 -27
  266. package/{fs → fjs}/types/sorted_set/module.f.js +1 -1
  267. package/{fs → fjs}/types/sorted_set/proof.f.js +20 -45
  268. package/{fs → fjs}/types/string/module.f.js +4 -4
  269. package/fjs/types/string/proof.f.js +77 -0
  270. package/{fs → fjs}/types/string_set/module.f.js +6 -6
  271. package/fjs/types/string_set/proof.f.js +43 -0
  272. package/{fs → fjs}/types/ts/proof.f.d.ts +18 -18
  273. package/{fs → fjs}/types/ts/proof.f.js +16 -43
  274. package/{fs → fjs}/types/uint8array/module.f.js +10 -10
  275. package/{fs → fjs}/types/uint8array/proof.f.d.ts +4 -1
  276. package/{fs → fjs}/types/uint8array/proof.f.js +11 -11
  277. package/{fs → fjs}/website/module.f.js +3 -3
  278. package/fjs/website/proof.f.js +13 -0
  279. package/package.json +8 -8
  280. package/fs/asserts/module.f.d.ts +0 -4
  281. package/fs/asserts/module.f.js +0 -9
  282. package/fs/asserts/proof.f.d.ts +0 -8
  283. package/fs/asserts/proof.f.js +0 -51
  284. package/fs/bnf/data/module.f.d.ts +0 -30
  285. package/fs/bnf/descent/module.f.js +0 -119
  286. package/fs/bnf/proof.f.js +0 -104
  287. package/fs/cas/mcp/module.f.d.ts +0 -36
  288. package/fs/cas/mcp/module.f.js +0 -249
  289. package/fs/ci/config/module.f.d.ts +0 -43
  290. package/fs/ci/deno/module.f.js +0 -16
  291. package/fs/crypto/pow/proof.f.js +0 -161
  292. package/fs/djs/examples/m.f.d.ts +0 -2
  293. package/fs/djs/tokenizer/module.f.d.ts +0 -12
  294. package/fs/djs/tokenizer/module.f.js +0 -62
  295. package/fs/djs/tokenizer/proof.f.d.ts +0 -7
  296. package/fs/djs/tokenizer/proof.f.js +0 -543
  297. package/fs/djs/tokenizer-new/module.f.d.ts +0 -3
  298. package/fs/djs/tokenizer-new/module.f.js +0 -155
  299. package/fs/djs/transpiler/proof.f.js +0 -68
  300. package/fs/emergent_testing/all.test.js +0 -4
  301. package/fs/emergent_testing/scenarios/all.js +0 -1
  302. package/fs/fjs/module.f.d.ts +0 -2
  303. package/fs/fjs/module.js +0 -4
  304. package/fs/json/module.f.d.ts +0 -50
  305. package/fs/json/rpc/module.f.d.ts +0 -114
  306. package/fs/json/schema/module.f.d.ts +0 -77
  307. package/fs/text/ascii/proof.f.d.ts +0 -4
  308. package/fs/text/ascii/proof.f.js +0 -24
  309. package/fs/types/bigfloat/proof.f.js +0 -348
  310. package/fs/types/btree/find/proof.f.js +0 -151
  311. package/fs/types/btree/proof.f.d.ts +0 -7
  312. package/fs/types/btree/remove/proof.f.d.ts +0 -4
  313. package/fs/types/byte_set/proof.f.js +0 -120
  314. package/fs/types/function/operator/proof.f.d.ts +0 -12
  315. package/fs/types/list/proof.f.d.ts +0 -22
  316. package/fs/types/nibble_set/proof.f.js +0 -89
  317. package/fs/types/nullable/proof.f.js +0 -50
  318. package/fs/types/patricia_trie/proof.f.d.ts +0 -7
  319. package/fs/types/range/module.f.js +0 -2
  320. package/fs/types/range/proof.f.d.ts +0 -1
  321. package/fs/types/range/proof.f.js +0 -18
  322. package/fs/types/result/proof.f.d.ts +0 -6
  323. package/fs/types/result/proof.f.js +0 -52
  324. package/fs/types/string/proof.f.js +0 -118
  325. package/fs/types/string_set/proof.f.js +0 -82
  326. package/fs/website/proof.f.js +0 -16
  327. /package/{fs → fjs}/asn.1/module.f.d.ts +0 -0
  328. /package/{fs → fjs}/asn.1/proof.f.d.ts +0 -0
  329. /package/{fs → fjs}/base_n/module.f.d.ts +0 -0
  330. /package/{fs → fjs}/base_n/proof.f.d.ts +0 -0
  331. /package/{fs → fjs/basen}/base128/proof.f.d.ts +0 -0
  332. /package/{fs → fjs/basen}/cbase32/proof.f.d.ts +0 -0
  333. /package/{fs → fjs}/bnf/proof.f.d.ts +0 -0
  334. /package/{fs → fjs}/bnf/testlib.f.d.ts +0 -0
  335. /package/{fs → fjs}/cas/cli/module.f.d.ts +0 -0
  336. /package/{fs → fjs}/ci/bun/module.f.d.ts +0 -0
  337. /package/{fs → fjs}/ci/deno/module.f.d.ts +0 -0
  338. /package/{fs → fjs}/ci/module.f.d.ts +0 -0
  339. /package/{fs → fjs}/ci/playwright/module.f.d.ts +0 -0
  340. /package/{fs → fjs}/ci/proof.f.d.ts +0 -0
  341. /package/{fs → fjs}/ci/rust/module.f.d.ts +0 -0
  342. /package/{fs → fjs}/cli/module.f.d.ts +0 -0
  343. /package/{fs → fjs}/cli/proof.f.d.ts +0 -0
  344. /package/{fs/types → fjs/common}/monoid/module.f.js +0 -0
  345. /package/{fs/types → fjs/common}/monoid/proof.f.d.ts +0 -0
  346. /package/{fs → fjs}/crypto/hmac/module.f.d.ts +0 -0
  347. /package/{fs → fjs}/crypto/hmac/proof.f.d.ts +0 -0
  348. /package/{fs → fjs}/crypto/pow/module.f.d.ts +0 -0
  349. /package/{fs → fjs}/crypto/pow/proof.f.d.ts +0 -0
  350. /package/{fs → fjs}/crypto/secp/module.f.d.ts +0 -0
  351. /package/{fs → fjs}/crypto/secp/proof.f.d.ts +0 -0
  352. /package/{fs → fjs}/crypto/sha2/module.f.d.ts +0 -0
  353. /package/{fs → fjs}/crypto/sha2/proof.f.d.ts +0 -0
  354. /package/{fs → fjs}/crypto/sign/proof.f.d.ts +0 -0
  355. /package/{fs → fjs}/crypto/vdf/module.f.d.ts +0 -0
  356. /package/{fs → fjs}/crypto/vdf/proof.f.d.ts +0 -0
  357. /package/{fs → fjs}/dev/module.f.d.ts +0 -0
  358. /package/{fs → fjs}/dev/package_json/module.f.d.ts +0 -0
  359. /package/{fs → fjs}/dev/package_json/proof.f.d.ts +0 -0
  360. /package/{fs → fjs}/dev/proof.f.d.ts +0 -0
  361. /package/{fs → fjs}/djs/ast/module.f.d.ts +0 -0
  362. /package/{fs → fjs}/djs/ast/proof.f.d.ts +0 -0
  363. /package/{fs → fjs}/djs/examples/input.f.d.ts +0 -0
  364. /package/{fs → fjs}/djs/examples/input.f.js +0 -0
  365. /package/{fs → fjs}/djs/examples/m.f.js +0 -0
  366. /package/{fs → fjs}/djs/parser/proof.f.d.ts +0 -0
  367. /package/{fs → fjs}/djs/proof.f.d.ts +0 -0
  368. /package/{fs → fjs}/djs/serializer/module.f.d.ts +0 -0
  369. /package/{fs → fjs}/djs/serializer/proof.f.d.ts +0 -0
  370. /package/{fs → fjs}/effects/list/module.f.d.ts +0 -0
  371. /package/{fs → fjs}/effects/list/module.f.js +0 -0
  372. /package/{fs → fjs}/effects/memory/module.f.d.ts +0 -0
  373. /package/{fs → fjs}/effects/memory/proof.f.d.ts +0 -0
  374. /package/{fs → fjs}/effects/mock/module.f.d.ts +0 -0
  375. /package/{fs → fjs}/effects/mock/module.f.js +0 -0
  376. /package/{fs → fjs}/effects/module.d.ts +0 -0
  377. /package/{fs → fjs}/effects/module.f.d.ts +0 -0
  378. /package/{fs → fjs}/effects/module.js +0 -0
  379. /package/{fs → fjs}/effects/node/memory/module.d.ts +0 -0
  380. /package/{fs → fjs}/effects/node/memory/proof.d.ts +0 -0
  381. /package/{fs → fjs}/effects/node/virtual/module.f.d.ts +0 -0
  382. /package/{fs → fjs}/effects/proof.f.d.ts +0 -0
  383. /package/{fs → fjs}/emergent_testing/all.test.d.ts +0 -0
  384. /package/{fs → fjs}/emergent_testing/example.f.js +0 -0
  385. /package/{fs → fjs}/emergent_testing/module.f.d.ts +0 -0
  386. /package/{fs → fjs}/emergent_testing/scenarios/all.d.ts +0 -0
  387. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -0
  388. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.js +0 -0
  389. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -0
  390. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.js +0 -0
  391. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.d.ts +0 -0
  392. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.js +0 -0
  393. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.d.ts +0 -0
  394. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.js +0 -0
  395. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.d.ts +0 -0
  396. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.js +0 -0
  397. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.d.ts +0 -0
  398. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.js +0 -0
  399. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.d.ts +0 -0
  400. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.js +0 -0
  401. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.d.ts +0 -0
  402. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.js +0 -0
  403. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.d.ts +0 -0
  404. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.js +0 -0
  405. /package/{fs → fjs}/fsc/bnf.f.d.ts +0 -0
  406. /package/{fs → fjs}/fsc/json.f.d.ts +0 -0
  407. /package/{fs → fjs}/fsc/module.f.d.ts +0 -0
  408. /package/{fs → fjs}/fsc/proof.f.d.ts +0 -0
  409. /package/{fs → fjs}/fsm/module.f.d.ts +0 -0
  410. /package/{fs → fjs}/fsm/proof.f.d.ts +0 -0
  411. /package/{fs → fjs}/js/tokenizer/module.f.d.ts +0 -0
  412. /package/{fs → fjs}/js/tokenizer/proof.f.d.ts +0 -0
  413. /package/{fs → fjs}/mcp/proof.f.d.ts +0 -0
  414. /package/{fs → fjs}/mcp/stdio/proof.f.d.ts +0 -0
  415. /package/{fs → fjs/media}/html/proof.f.d.ts +0 -0
  416. /package/{fs → fjs/media}/json/parser/proof.f.d.ts +0 -0
  417. /package/{fs → fjs/media}/json/proof.f.d.ts +0 -0
  418. /package/{fs → fjs/media}/json/rpc/proof.f.d.ts +0 -0
  419. /package/{fs → fjs/media}/json/schema/proof.f.d.ts +0 -0
  420. /package/{fs → fjs/media}/json/serializer/proof.f.d.ts +0 -0
  421. /package/{fs → fjs/media}/json/tokenizer/proof.f.d.ts +0 -0
  422. /package/{fs/mime → fjs/media/type}/proof.f.d.ts +0 -0
  423. /package/{fs/fjs → fjs}/module.d.ts +0 -0
  424. /package/{fs → fjs}/path/module.f.d.ts +0 -0
  425. /package/{fs → fjs}/path/proof.f.d.ts +0 -0
  426. /package/{fs/fjs → fjs}/proof.f.d.ts +0 -0
  427. /package/{fs → fjs}/sul/id/module.f.d.ts +0 -0
  428. /package/{fs → fjs}/sul/id/proof.f.d.ts +0 -0
  429. /package/{fs → fjs}/sul/level/hash/module.f.d.ts +0 -0
  430. /package/{fs → fjs}/sul/level/hash/proof.f.d.ts +0 -0
  431. /package/{fs → fjs}/sul/level/literal/module.f.d.ts +0 -0
  432. /package/{fs → fjs}/sul/level/literal/proof.f.d.ts +0 -0
  433. /package/{fs → fjs}/sul/module.f.d.ts +0 -0
  434. /package/{fs → fjs}/sul/proof.f.d.ts +0 -0
  435. /package/{fs → fjs}/text/ascii/module.f.d.ts +0 -0
  436. /package/{fs → fjs}/text/ascii/module.f.js +0 -0
  437. /package/{fs → fjs}/text/code_point/module.f.d.ts +0 -0
  438. /package/{fs → fjs}/text/code_point/proof.f.d.ts +0 -0
  439. /package/{fs → fjs}/text/module.f.d.ts +0 -0
  440. /package/{fs → fjs}/text/proof.f.d.ts +0 -0
  441. /package/{fs → fjs}/text/sgr/module.f.d.ts +0 -0
  442. /package/{fs → fjs}/text/sgr/proof.f.d.ts +0 -0
  443. /package/{fs → fjs}/text/utf16/module.f.d.ts +0 -0
  444. /package/{fs → fjs}/text/utf16/proof.f.d.ts +0 -0
  445. /package/{fs → fjs}/text/utf8/module.f.d.ts +0 -0
  446. /package/{fs → fjs}/text/utf8/proof.f.d.ts +0 -0
  447. /package/{fs → fjs}/types/array/module.f.d.ts +0 -0
  448. /package/{fs → fjs}/types/array/proof.f.d.ts +0 -0
  449. /package/{fs → fjs}/types/bigfloat/module.f.d.ts +0 -0
  450. /package/{fs → fjs}/types/bigfloat/proof.f.d.ts +0 -0
  451. /package/{fs → fjs}/types/bigint/module.f.d.ts +0 -0
  452. /package/{fs → fjs}/types/bigint/proof.f.d.ts +0 -0
  453. /package/{fs → fjs}/types/bit_vec/module.f.d.ts +0 -0
  454. /package/{fs → fjs}/types/bit_vec/proof.f.d.ts +0 -0
  455. /package/{fs → fjs}/types/btree/find/module.f.d.ts +0 -0
  456. /package/{fs → fjs}/types/btree/module.f.d.ts +0 -0
  457. /package/{fs → fjs}/types/btree/remove/module.f.d.ts +0 -0
  458. /package/{fs → fjs}/types/btree/set/module.f.d.ts +0 -0
  459. /package/{fs → fjs}/types/btree/set/proof.f.d.ts +0 -0
  460. /package/{fs → fjs}/types/btree/types/module.f.d.ts +0 -0
  461. /package/{fs → fjs}/types/btree/types/module.f.js +0 -0
  462. /package/{fs → fjs}/types/byte_set/module.f.d.ts +0 -0
  463. /package/{fs → fjs}/types/byte_set/proof.f.d.ts +0 -0
  464. /package/{fs → fjs}/types/function/compare/module.f.d.ts +0 -0
  465. /package/{fs → fjs}/types/function/compare/module.f.js +0 -0
  466. /package/{fs/types/btree/find → fjs/types/function/compare}/proof.f.d.ts +0 -0
  467. /package/{fs → fjs}/types/function/module.f.d.ts +0 -0
  468. /package/{fs → fjs}/types/function/module.f.js +0 -0
  469. /package/{fs → fjs}/types/function/operator/module.f.d.ts +0 -0
  470. /package/{fs → fjs}/types/function/operator/module.f.js +0 -0
  471. /package/{fs/types/function/compare → fjs/types/function}/proof.f.d.ts +0 -0
  472. /package/{fs → fjs}/types/list/module.f.d.ts +0 -0
  473. /package/{fs → fjs}/types/map/module.f.d.ts +0 -0
  474. /package/{fs → fjs}/types/map/module.f.js +0 -0
  475. /package/{fs → fjs}/types/map/proof.f.d.ts +0 -0
  476. /package/{fs → fjs}/types/nibble_set/module.f.d.ts +0 -0
  477. /package/{fs → fjs}/types/nibble_set/module.f.js +0 -0
  478. /package/{fs → fjs}/types/nibble_set/proof.f.d.ts +0 -0
  479. /package/{fs → fjs}/types/nominal/module.f.d.ts +0 -0
  480. /package/{fs → fjs}/types/nominal/module.f.js +0 -0
  481. /package/{fs → fjs}/types/nominal/proof.f.d.ts +0 -0
  482. /package/{fs → fjs}/types/nullable/module.f.d.ts +0 -0
  483. /package/{fs → fjs}/types/nullable/proof.f.d.ts +0 -0
  484. /package/{fs → fjs}/types/number/module.f.d.ts +0 -0
  485. /package/{fs → fjs}/types/number/proof.f.d.ts +0 -0
  486. /package/{fs → fjs}/types/object/module.f.d.ts +0 -0
  487. /package/{fs → fjs}/types/object/proof.f.d.ts +0 -0
  488. /package/{fs → fjs}/types/option/module.f.d.ts +0 -0
  489. /package/{fs → fjs}/types/option/module.f.js +0 -0
  490. /package/{fs → fjs}/types/ordered_map/module.f.d.ts +0 -0
  491. /package/{fs → fjs}/types/ordered_map/proof.f.d.ts +0 -0
  492. /package/{fs → fjs}/types/patricia_trie/module.f.d.ts +0 -0
  493. /package/{fs → fjs}/types/patricia_trie/module.f.js +0 -0
  494. /package/{fs → fjs}/types/phantom/module.f.d.ts +0 -0
  495. /package/{fs → fjs}/types/phantom/module.f.js +0 -0
  496. /package/{fs → fjs}/types/prime_field/module.f.d.ts +0 -0
  497. /package/{fs → fjs}/types/prime_field/proof.f.d.ts +0 -0
  498. /package/{fs/types/function → fjs/types/range}/proof.f.d.ts +0 -0
  499. /package/{fs → fjs}/types/range_map/module.f.d.ts +0 -0
  500. /package/{fs → fjs}/types/range_map/proof.f.d.ts +0 -0
  501. /package/{fs → fjs}/types/result/module.d.ts +0 -0
  502. /package/{fs → fjs}/types/result/module.f.d.ts +0 -0
  503. /package/{fs → fjs}/types/result/module.f.js +0 -0
  504. /package/{fs → fjs}/types/rtti/parse/module.f.d.ts +0 -0
  505. /package/{fs → fjs}/types/rtti/parse/proof.f.d.ts +0 -0
  506. /package/{fs → fjs}/types/rtti/proof.f.d.ts +0 -0
  507. /package/{fs → fjs}/types/rtti/proof.f.js +0 -0
  508. /package/{fs → fjs}/types/rtti/ts/proof.f.d.ts +0 -0
  509. /package/{fs → fjs}/types/rtti/validate/module.f.d.ts +0 -0
  510. /package/{fs → fjs}/types/rtti/validate/proof.f.d.ts +0 -0
  511. /package/{fs → fjs}/types/sorted_list/module.f.d.ts +0 -0
  512. /package/{fs → fjs}/types/sorted_list/proof.f.d.ts +0 -0
  513. /package/{fs → fjs}/types/sorted_set/module.f.d.ts +0 -0
  514. /package/{fs → fjs}/types/sorted_set/proof.f.d.ts +0 -0
  515. /package/{fs → fjs}/types/string/module.f.d.ts +0 -0
  516. /package/{fs → fjs}/types/string/proof.f.d.ts +0 -0
  517. /package/{fs → fjs}/types/string_set/module.f.d.ts +0 -0
  518. /package/{fs → fjs}/types/string_set/proof.f.d.ts +0 -0
  519. /package/{fs → fjs}/types/ts/module.f.d.ts +0 -0
  520. /package/{fs → fjs}/types/ts/module.f.js +0 -0
  521. /package/{fs → fjs}/types/uint8array/module.f.d.ts +0 -0
  522. /package/{fs → fjs}/website/module.f.d.ts +0 -0
  523. /package/{fs → fjs}/website/proof.f.d.ts +0 -0
@@ -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
+ };
@@ -9,7 +9,7 @@ export type ConstObject = Struct | Tuple;
9
9
  export type Struct = StringMap<string, Type>;
10
10
  /** A tuple schema: readonly array whose elements are nested `Type`s. */
11
11
  export type Tuple = readonly Type[];
12
- declare const primitive0List: readonly ["bigint", "boolean", "number", "string"];
12
+ declare const primitive0List: readonly ['bigint', 'boolean', 'number', 'string'];
13
13
  export type Primitive0 = typeof primitive0List[number];
14
14
  export declare const tag0List: readonly ["bigint", "boolean", "number", "string", "unknown"];
15
15
  /** Tags for nullary (zero-parameter) type schemas. */
@@ -40,7 +40,7 @@ export declare const bigint: Bigint;
40
40
  export type Unknown = Type0<'unknown'>;
41
41
  /** Schema that validates any DJS-compatible value. */
42
42
  export declare const unknown: Unknown;
43
- declare const tag1List: readonly ["array", "record"];
43
+ declare const tag1List: readonly ['array', 'record'];
44
44
  export declare const isTag1: Includes<string, typeof tag1List>;
45
45
  /** Tags for unary (one-parameter) type schemas. */
46
46
  export type Tag1 = typeof tag1List[number];
@@ -1,4 +1,4 @@
1
- import { includes } from "../array/module.f.js";
1
+ import { includes } from '../array/module.f.js';
2
2
  const primitive0List = ['bigint', 'boolean', 'number', 'string'];
3
3
  export const tag0List = [...primitive0List, 'unknown'];
4
4
  const type0 = (tag) => () => [tag];
@@ -26,20 +26,20 @@
26
26
  *
27
27
  * @module
28
28
  */
29
- import {} from "../module.f.js";
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";
33
- export {} from "../common/module.f.js";
29
+ import {} from '../module.f.js';
30
+ import { ok } from '../../result/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
+ 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
  *
@@ -1,21 +1,14 @@
1
- import { parse } from "./module.f.js";
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
- } };
1
+ import { parse } from './module.f.js';
2
+ import { boolean, number, string, bigint, unknown, array, record, or, option } from '../module.f.js';
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
@@ -7,7 +7,7 @@
7
7
  * The runtime `toTs` function mirrors `Ts<T>` at value level, returning a TypeScript
8
8
  * type expression string for a given RTTI schema.
9
9
  */
10
- import { primitive, union, printer as tsPrinter } from "../../ts/module.f.js";
10
+ import { primitive, union, printer as tsPrinter } from '../../ts/module.f.js';
11
11
  /**
12
12
  * Creates a printer that converts an RTTI schema `Type` to its TypeScript type expression as a string.
13
13
  *
@@ -1,5 +1,5 @@
1
- import { printer } from "./module.f.js";
2
- import { boolean, number, string, bigint, unknown, array, record, or, option, never } from "../module.f.js";
1
+ import { printer } from './module.f.js';
2
+ import { boolean, number, string, bigint, unknown, array, record, or, option, never } from '../module.f.js';
3
3
  const toTs = printer();
4
4
  const toTsMut = printer(true);
5
5
  const eqMut = (rtti, expected) => {
@@ -1,8 +1,10 @@
1
- import {} from "../module.f.js";
2
- import { ok } from "../../result/module.f.js";
3
- import { constPrimitiveValidate, isArray, isObject, prependPath, primitive0Validate, verror, visit, } from "../common/module.f.js";
4
- export { constPrimitiveValidate, prependPath, primitive0Validate, verror, } from "../common/module.f.js";
1
+ import {} from '../module.f.js';
2
+ import { ok } from '../../result/module.f.js';
3
+ import { constPrimitiveValidate, eachEntry, isArray, isObject, orVisit, primitive0Validate, verror, visit, } from '../common/module.f.js';
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
- import { validate } from "./module.f.js";
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
- } };
1
+ import { validate } from './module.f.js';
2
+ import { boolean, number, string, bigint, unknown, array, record, or, option } from '../module.f.js';
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}`;
@@ -3,9 +3,9 @@
3
3
  *
4
4
  * @module
5
5
  */
6
- import { bsearch } from "../function/compare/module.f.js";
7
- import { next } from "../list/module.f.js";
8
- import { identity } from "../function/module.f.js";
6
+ import { bsearch } from '../function/compare/module.f.js';
7
+ import { next } from '../list/module.f.js';
8
+ import { identity } from '../function/module.f.js';
9
9
  /**
10
10
  * Two-way sorted-list merge.
11
11
  * `reduceOp` returns `[output, sign, nextState]` where sign `-1` advances `a`, `1` advances `b`, `0` advances both; `null` output skips emission.
@@ -1,59 +1,46 @@
1
- import { find, merge } from "./module.f.js";
2
- import { stringify } from "../../json/module.f.js";
3
- import { sort } from "../object/module.f.js";
4
- import { toArray, countdown, length } from "../list/module.f.js";
5
- import { flip } from "../function/module.f.js";
6
- import { cmp } from "../number/module.f.js";
1
+ import { find, merge } from './module.f.js';
2
+ import { stringify } from '../../media/json/module.f.js';
3
+ import { sort } from '../object/module.f.js';
4
+ import { toArray, countdown, length } from '../list/module.f.js';
5
+ import { flip } from '../function/module.f.js';
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
  };
@@ -1,5 +1,5 @@
1
1
  import { toArray } from "../list/module.f.js";
2
- import { merge, intersect as listIntersect, find } from "../sorted_list/module.f.js";
2
+ import { merge, intersect as listIntersect, find } from '../sorted_list/module.f.js';
3
3
  export const union = cmp => a => b => toArray(merge(cmp)(a)(b));
4
4
  export const intersect = cmp => a => b => toArray(listIntersect(cmp)(a)(b));
5
5
  export const has = cmp => value => set => find(cmp)(value)(set) === value;
@@ -1,9 +1,10 @@
1
- import { has, intersect, union } from "./module.f.js";
2
- import { stringify } from "../../json/module.f.js";
3
- import { sort } from "../object/module.f.js";
4
- import { toArray, countdown, length } from "../list/module.f.js";
5
- import { flip } from "../function/module.f.js";
6
- import { cmp } from "../number/module.f.js";
1
+ import { has, intersect, union } from './module.f.js';
2
+ import { stringify } from '../../media/json/module.f.js';
3
+ import { sort } from '../object/module.f.js';
4
+ import { toArray, countdown, length } from '../list/module.f.js';
5
+ import { flip } from '../function/module.f.js';
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
  };
@@ -15,10 +15,10 @@
15
15
  * cmp('apple')('banana') // -1
16
16
  * ```
17
17
  */
18
- import { reduce as listReduce, repeat as listRepeat } from "../list/module.f.js";
19
- import { compose } from "../function/module.f.js";
20
- import { cmp as uCmp } from "../function/compare/module.f.js";
21
- import { join as joinOp, concat as concatOp } from "../function/operator/module.f.js";
18
+ import { reduce as listReduce, repeat as listRepeat } from '../list/module.f.js';
19
+ import { compose } from '../function/module.f.js';
20
+ import { cmp as uCmp } from '../function/compare/module.f.js';
21
+ import { join as joinOp, concat as concatOp } from '../function/operator/module.f.js';
22
22
  const reduce = o => listReduce(o)('');
23
23
  export const join = compose(joinOp)(reduce);
24
24
  export const concat = reduce(concatOp);
@@ -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
+ };