functionalscript 0.44.0 → 0.45.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 (453) hide show
  1. package/fjs/asn.1/proof.f.d.mts +5 -0
  2. package/fjs/asn.1/proof.f.mjs +15 -3
  3. package/fjs/asserts/module.f.d.mts +14 -0
  4. package/fjs/asserts/module.f.mjs +20 -0
  5. package/fjs/asserts/proof.f.d.mts +3 -0
  6. package/fjs/asserts/proof.f.mjs +15 -1
  7. package/fjs/basen/base128/proof.f.d.mts +3 -1
  8. package/fjs/basen/base128/proof.f.mjs +3 -1
  9. package/fjs/basen/base64/module.f.mjs +7 -3
  10. package/fjs/basen/base64/proof.f.d.mts +3 -1
  11. package/fjs/basen/base64/proof.f.mjs +7 -4
  12. package/fjs/basen/cbase32/proof.f.d.mts +3 -1
  13. package/fjs/basen/cbase32/proof.f.mjs +3 -1
  14. package/fjs/bnf/data/proof.f.mjs +0 -1
  15. package/fjs/bnf/descent/module.f.d.mts +17 -2
  16. package/fjs/bnf/descent/module.f.mjs +118 -41
  17. package/fjs/bnf/descent/proof.f.d.mts +1 -0
  18. package/fjs/bnf/descent/proof.f.mjs +77 -1
  19. package/fjs/bnf/descent/types.d.ts +12 -4
  20. package/fjs/bnf/ll1/module.f.d.mts +28 -2
  21. package/fjs/bnf/ll1/module.f.mjs +180 -38
  22. package/fjs/bnf/ll1/proof.f.d.mts +2 -0
  23. package/fjs/bnf/ll1/proof.f.mjs +62 -1
  24. package/fjs/bnf/ll1/types.d.ts +14 -8
  25. package/fjs/bnf/module.f.d.mts +15 -6
  26. package/fjs/bnf/module.f.mjs +52 -11
  27. package/fjs/bnf/proof.f.d.mts +2 -0
  28. package/fjs/bnf/proof.f.mjs +79 -3
  29. package/fjs/bnf/token_symbol/module.f.d.mts +4 -3
  30. package/fjs/bnf/token_symbol/module.f.mjs +7 -6
  31. package/fjs/bnf/token_symbol/proof.f.mjs +5 -2
  32. package/fjs/bnf/token_symbol/types.d.ts +2 -2
  33. package/fjs/bnf/types.d.ts +10 -3
  34. package/fjs/cas/cli/proof.f.d.mts +3 -1
  35. package/fjs/cas/cli/proof.f.mjs +3 -1
  36. package/fjs/cas/evo/module.f.d.mts +7 -13
  37. package/fjs/cas/evo/module.f.mjs +103 -96
  38. package/fjs/cas/evo/proof.f.mjs +6 -3
  39. package/fjs/cas/module.f.mjs +96 -109
  40. package/fjs/ci/common/module.f.d.mts +1 -1
  41. package/fjs/ci/common/module.f.mjs +1 -0
  42. package/fjs/ci/config/module.f.d.mts +2 -2
  43. package/fjs/ci/config/module.f.mjs +2 -2
  44. package/fjs/ci/nix/proof.f.d.mts +2 -0
  45. package/fjs/ci/nix/proof.f.mjs +2 -2
  46. package/fjs/ci/proof.f.d.mts +4 -2
  47. package/fjs/ci/proof.f.mjs +4 -3
  48. package/fjs/cli/proof.f.d.mts +4 -2
  49. package/fjs/cli/proof.f.mjs +4 -2
  50. package/fjs/common/monoid/module.f.d.mts +70 -12
  51. package/fjs/common/monoid/module.f.mjs +177 -14
  52. package/fjs/common/monoid/proof.f.d.mts +12 -1
  53. package/fjs/common/monoid/proof.f.mjs +88 -4
  54. package/fjs/common/monoid/types.d.ts +23 -0
  55. package/fjs/crypto/secp/proof.f.d.mts +3 -1
  56. package/fjs/crypto/secp/proof.f.mjs +3 -1
  57. package/fjs/crypto/sha2/proof.f.d.mts +3 -1
  58. package/fjs/crypto/sha2/proof.f.mjs +3 -1
  59. package/fjs/crypto/vdf/module.f.d.mts +23 -4
  60. package/fjs/crypto/vdf/module.f.mjs +6 -4
  61. package/fjs/dev/module.f.d.mts +5 -2
  62. package/fjs/dev/module.f.mjs +5 -4
  63. package/fjs/dev/package_json/module.f.d.mts +7 -0
  64. package/fjs/dev/package_json/module.f.mjs +10 -7
  65. package/fjs/dev/update/module.f.d.mts +3 -0
  66. package/fjs/dev/update/module.f.mjs +3 -2
  67. package/fjs/dev/update/proof.f.d.mts +3 -0
  68. package/fjs/dev/update/proof.f.mjs +1 -2
  69. package/fjs/djs/parser/module.f.d.mts +3 -0
  70. package/fjs/djs/parser/module.f.mjs +18 -0
  71. package/fjs/djs/parser/proof.f.d.mts +3 -0
  72. package/fjs/djs/parser/proof.f.mjs +13 -1
  73. package/fjs/djs/proof.f.d.mts +3 -0
  74. package/fjs/djs/proof.f.mjs +4 -1
  75. package/fjs/djs/serializer/module.f.mjs +5 -4
  76. package/fjs/djs/tokenizer/module.f.mjs +21 -13
  77. package/fjs/djs/tokenizer/proof.f.d.mts +3 -0
  78. package/fjs/djs/tokenizer/proof.f.mjs +14 -2
  79. package/fjs/djs/transpiler/module.f.d.mts +1 -12
  80. package/fjs/djs/transpiler/module.f.mjs +1 -20
  81. package/fjs/djs/transpiler/types.d.ts +25 -0
  82. package/fjs/effects/eff/module.f.d.mts +10 -0
  83. package/fjs/effects/eff/module.f.mjs +4 -2
  84. package/fjs/effects/eff/proof.f.d.mts +3 -0
  85. package/fjs/effects/eff/proof.f.mjs +4 -1
  86. package/fjs/effects/list/module.f.d.mts +10 -2
  87. package/fjs/effects/list/module.f.mjs +4 -2
  88. package/fjs/effects/memory/module.f.d.mts +4 -2
  89. package/fjs/effects/memory/module.f.mjs +4 -3
  90. package/fjs/effects/memory/proof.f.d.mts +4 -0
  91. package/fjs/effects/memory/proof.f.mjs +5 -2
  92. package/fjs/effects/mock/module.f.d.mts +10 -2
  93. package/fjs/effects/mock/module.f.mjs +4 -2
  94. package/fjs/effects/module.d.mts +8 -0
  95. package/fjs/effects/module.f.d.mts +6 -4
  96. package/fjs/effects/module.f.mjs +6 -5
  97. package/fjs/effects/module.mjs +9 -1
  98. package/fjs/effects/node/memory/module.d.mts +3 -0
  99. package/fjs/effects/node/memory/module.mjs +3 -2
  100. package/fjs/effects/node/memory/proof.d.mts +2 -0
  101. package/fjs/effects/node/memory/proof.mjs +2 -1
  102. package/fjs/effects/node/module.d.mts +5 -0
  103. package/fjs/effects/node/module.f.d.mts +17 -12
  104. package/fjs/effects/node/module.f.mjs +6 -12
  105. package/fjs/effects/node/module.mjs +5 -17
  106. package/fjs/effects/node/virtual/module.f.d.mts +6 -3
  107. package/fjs/effects/node/virtual/module.f.mjs +6 -5
  108. package/fjs/effects/node/virtual/proof.f.d.mts +4 -1
  109. package/fjs/effects/node/virtual/proof.f.mjs +13 -1
  110. package/fjs/effects/proof.f.d.mts +3 -0
  111. package/fjs/effects/proof.f.mjs +4 -1
  112. package/fjs/emergent_testing/all.test.d.mts +8 -0
  113. package/fjs/emergent_testing/all.test.mjs +14 -0
  114. package/fjs/emergent_testing/module.f.d.mts +6 -1
  115. package/fjs/emergent_testing/module.f.mjs +40 -66
  116. package/fjs/emergent_testing/proof.f.mjs +5 -5
  117. package/fjs/fsc/bnf.f.d.mts +3 -0
  118. package/fjs/fsc/bnf.f.mjs +4 -1
  119. package/fjs/fsc/json.f.d.mts +3 -0
  120. package/fjs/fsc/json.f.mjs +4 -1
  121. package/fjs/fsc/module.f.d.mts +9 -0
  122. package/fjs/fsc/module.f.mjs +5 -3
  123. package/fjs/fsm/proof.f.d.mts +3 -0
  124. package/fjs/fsm/proof.f.mjs +4 -1
  125. package/fjs/js/tokenizer/module.f.d.mts +7 -0
  126. package/fjs/js/tokenizer/module.f.mjs +19 -55
  127. package/fjs/mcp/module.f.d.mts +36 -1
  128. package/fjs/mcp/module.f.mjs +9 -7
  129. package/fjs/mcp/proof.f.d.mts +11 -1
  130. package/fjs/mcp/proof.f.mjs +11 -18
  131. package/fjs/media/html/module.f.d.mts +12 -0
  132. package/fjs/media/html/module.f.mjs +6 -4
  133. package/fjs/media/html/proof.f.d.mts +3 -0
  134. package/fjs/media/html/proof.f.mjs +4 -1
  135. package/fjs/media/json/parser/module.f.d.mts +1 -1
  136. package/fjs/media/json/parser/module.f.mjs +25 -8
  137. package/fjs/media/json/parser/types.d.ts +5 -0
  138. package/fjs/media/json/rtti/proof.f.d.mts +3 -0
  139. package/fjs/media/json/rtti/proof.f.mjs +3 -3
  140. package/fjs/media/json/schema/module.f.d.mts +61 -27
  141. package/fjs/media/json/schema/module.f.mjs +228 -63
  142. package/fjs/media/json/schema/proof.f.d.mts +41 -0
  143. package/fjs/media/json/schema/proof.f.mjs +219 -7
  144. package/fjs/media/json/serializer/module.f.d.mts +13 -0
  145. package/fjs/media/json/serializer/module.f.mjs +7 -7
  146. package/fjs/media/json/tokenizer/module.f.d.mts +8 -0
  147. package/fjs/media/json/tokenizer/module.f.mjs +24 -5
  148. package/fjs/media/nix/module.f.d.mts +13 -0
  149. package/fjs/media/nix/module.f.mjs +4 -2
  150. package/fjs/media/nix/proof.f.d.mts +3 -0
  151. package/fjs/media/nix/proof.f.mjs +4 -1
  152. package/fjs/media/revision/module.f.d.mts +5 -0
  153. package/fjs/media/revision/module.f.mjs +8 -11
  154. package/fjs/media/revision/proof.f.d.mts +4 -0
  155. package/fjs/media/revision/proof.f.mjs +5 -2
  156. package/fjs/media/type/module.f.d.mts +28 -11
  157. package/fjs/media/type/module.f.mjs +69 -85
  158. package/fjs/media/type/proof.f.d.mts +16 -0
  159. package/fjs/media/type/proof.f.mjs +44 -4
  160. package/fjs/module.d.mts +5 -0
  161. package/fjs/module.f.d.mts +8 -0
  162. package/fjs/module.f.mjs +4 -2
  163. package/fjs/module.mjs +6 -0
  164. package/fjs/path/module.f.d.mts +8 -0
  165. package/fjs/path/module.f.mjs +4 -2
  166. package/fjs/proof.f.d.mts +4 -0
  167. package/fjs/proof.f.mjs +5 -2
  168. package/fjs/protocol/json_rpc/module.f.d.mts +1 -1
  169. package/fjs/protocol/json_rpc/module.f.mjs +7 -4
  170. package/fjs/protocol/json_rpc/proof.f.d.mts +6 -0
  171. package/fjs/protocol/json_rpc/proof.f.mjs +22 -1
  172. package/fjs/protocol/mcp/proof.f.d.mts +4 -0
  173. package/fjs/protocol/mcp/proof.f.mjs +47 -24
  174. package/fjs/protocol/mcp/stdio/module.f.d.mts +2 -4
  175. package/fjs/protocol/mcp/stdio/module.f.mjs +1 -8
  176. package/fjs/protocol/mcp/stdio/proof.f.d.mts +1 -1
  177. package/fjs/protocol/mcp/stdio/proof.f.mjs +1 -1
  178. package/fjs/protocol/mcp/stdio/types.d.ts +14 -0
  179. package/fjs/sul/id/module.f.d.mts +5 -0
  180. package/fjs/sul/id/module.f.mjs +5 -4
  181. package/fjs/sul/level/hash/module.f.d.mts +4 -1
  182. package/fjs/sul/level/hash/module.f.mjs +4 -3
  183. package/fjs/sul/level/hash/proof.f.d.mts +4 -0
  184. package/fjs/sul/level/hash/proof.f.mjs +5 -2
  185. package/fjs/sul/level/literal/module.f.d.mts +4 -1
  186. package/fjs/sul/level/literal/module.f.mjs +4 -3
  187. package/fjs/sul/level/literal/proof.f.d.mts +3 -0
  188. package/fjs/sul/level/literal/proof.f.mjs +4 -1
  189. package/fjs/sul/module.f.d.mts +5 -3
  190. package/fjs/sul/module.f.mjs +5 -4
  191. package/fjs/sul/proof.f.d.mts +4 -0
  192. package/fjs/sul/proof.f.mjs +5 -2
  193. package/fjs/text/ascii/module.f.d.mts +26 -0
  194. package/fjs/text/ascii/module.f.mjs +49 -1
  195. package/fjs/text/ascii/proof.f.d.mts +10 -0
  196. package/fjs/text/ascii/proof.f.mjs +33 -1
  197. package/fjs/text/code_point/module.f.d.mts +21 -3
  198. package/fjs/text/code_point/module.f.mjs +24 -8
  199. package/fjs/text/code_point/proof.f.d.mts +1 -0
  200. package/fjs/text/code_point/proof.f.mjs +28 -0
  201. package/fjs/text/module.f.d.mts +4 -2
  202. package/fjs/text/module.f.mjs +4 -3
  203. package/fjs/text/proof.f.d.mts +3 -0
  204. package/fjs/text/proof.f.mjs +4 -1
  205. package/fjs/text/sgr/module.f.d.mts +4 -1
  206. package/fjs/text/sgr/module.f.mjs +4 -3
  207. package/fjs/text/sgr/proof.f.d.mts +3 -0
  208. package/fjs/text/sgr/proof.f.mjs +4 -1
  209. package/fjs/text/utf16/module.f.d.mts +5 -1
  210. package/fjs/text/utf16/module.f.mjs +31 -33
  211. package/fjs/text/utf16/proof.f.d.mts +3 -1
  212. package/fjs/text/utf16/proof.f.mjs +18 -1
  213. package/fjs/text/utf8/module.f.d.mts +9 -5
  214. package/fjs/text/utf8/module.f.mjs +16 -18
  215. package/fjs/types/array/module.f.d.mts +2 -1
  216. package/fjs/types/array/module.f.mjs +2 -2
  217. package/fjs/types/bigfloat/module.f.d.mts +21 -1
  218. package/fjs/types/bigfloat/module.f.mjs +33 -7
  219. package/fjs/types/bigfloat/proof.f.d.mts +1 -0
  220. package/fjs/types/bigfloat/proof.f.mjs +46 -0
  221. package/fjs/types/bigint/module.f.d.mts +4 -0
  222. package/fjs/types/bigint/module.f.mjs +4 -3
  223. package/fjs/types/bit_vec/module.f.d.mts +10 -14
  224. package/fjs/types/bit_vec/module.f.mjs +61 -71
  225. package/fjs/types/bit_vec/proof.f.d.mts +6 -0
  226. package/fjs/types/bit_vec/proof.f.mjs +29 -3
  227. package/fjs/types/btree/find/module.f.d.mts +5 -1
  228. package/fjs/types/btree/find/module.f.mjs +5 -5
  229. package/fjs/types/btree/find/proof.f.d.mts +5 -1
  230. package/fjs/types/btree/find/proof.f.mjs +5 -3
  231. package/fjs/types/btree/module.f.d.mts +3 -0
  232. package/fjs/types/btree/module.f.mjs +3 -2
  233. package/fjs/types/btree/proof.f.d.mts +5 -1
  234. package/fjs/types/btree/proof.f.mjs +5 -3
  235. package/fjs/types/btree/remove/module.f.d.mts +11 -0
  236. package/fjs/types/btree/remove/module.f.mjs +9 -9
  237. package/fjs/types/btree/remove/proof.f.d.mts +3 -0
  238. package/fjs/types/btree/remove/proof.f.mjs +4 -1
  239. package/fjs/types/btree/set/module.f.d.mts +9 -0
  240. package/fjs/types/btree/set/module.f.mjs +5 -6
  241. package/fjs/types/btree/set/proof.f.d.mts +3 -0
  242. package/fjs/types/btree/set/proof.f.mjs +4 -1
  243. package/fjs/types/btree/types/module.f.d.mts +2 -1
  244. package/fjs/types/btree/types/module.f.mjs +2 -1
  245. package/fjs/types/byte_set/module.f.d.mts +10 -1
  246. package/fjs/types/byte_set/module.f.mjs +5 -3
  247. package/fjs/types/byte_set/proof.f.d.mts +3 -1
  248. package/fjs/types/byte_set/proof.f.mjs +3 -1
  249. package/fjs/types/function/compare/module.f.d.mts +3 -2
  250. package/fjs/types/function/compare/module.f.mjs +3 -2
  251. package/fjs/types/function/module.f.d.mts +8 -1
  252. package/fjs/types/function/module.f.mjs +8 -1
  253. package/fjs/types/function/operator/module.f.d.mts +2 -1
  254. package/fjs/types/function/operator/module.f.mjs +2 -2
  255. package/fjs/types/list/module.f.d.mts +9 -2
  256. package/fjs/types/list/module.f.mjs +5 -3
  257. package/fjs/types/list/proof.f.d.mts +4 -1
  258. package/fjs/types/list/proof.f.mjs +4 -2
  259. package/fjs/types/nibble_set/module.f.d.mts +2 -1
  260. package/fjs/types/nibble_set/module.f.mjs +2 -2
  261. package/fjs/types/nominal/module.f.d.mts +2 -1
  262. package/fjs/types/nominal/module.f.mjs +2 -1
  263. package/fjs/types/nullable/module.f.d.mts +8 -2
  264. package/fjs/types/nullable/module.f.mjs +4 -2
  265. package/fjs/types/number/module.f.d.mts +4 -0
  266. package/fjs/types/number/module.f.mjs +4 -3
  267. package/fjs/types/object/module.f.d.mts +14 -2
  268. package/fjs/types/object/module.f.mjs +15 -6
  269. package/fjs/types/object/proof.f.d.mts +5 -2
  270. package/fjs/types/object/proof.f.mjs +6 -3
  271. package/fjs/types/object/structurally_same/module.f.d.mts +39 -0
  272. package/fjs/types/object/structurally_same/module.f.mjs +59 -0
  273. package/fjs/types/object/structurally_same/proof.f.d.mts +6 -0
  274. package/fjs/types/object/structurally_same/proof.f.mjs +73 -0
  275. package/fjs/types/ordered_map/module.f.d.mts +5 -0
  276. package/fjs/types/ordered_map/module.f.mjs +5 -4
  277. package/fjs/types/ordered_map/proof.f.d.mts +3 -0
  278. package/fjs/types/ordered_map/proof.f.mjs +4 -1
  279. package/fjs/types/patricia_trie/module.f.d.mts +2 -1
  280. package/fjs/types/patricia_trie/module.f.mjs +2 -2
  281. package/fjs/types/patricia_trie/proof.f.d.mts +3 -0
  282. package/fjs/types/patricia_trie/proof.f.mjs +4 -1
  283. package/fjs/types/prime_field/module.f.d.mts +3 -1
  284. package/fjs/types/prime_field/module.f.mjs +3 -2
  285. package/fjs/types/range/module.f.d.mts +2 -1
  286. package/fjs/types/range/module.f.mjs +2 -2
  287. package/fjs/types/range_map/module.f.d.mts +6 -0
  288. package/fjs/types/range_map/module.f.mjs +6 -9
  289. package/fjs/types/range_map/proof.f.d.mts +5 -1
  290. package/fjs/types/range_map/proof.f.mjs +5 -3
  291. package/fjs/types/range_set/module.f.d.mts +5 -0
  292. package/fjs/types/range_set/module.f.mjs +1 -0
  293. package/fjs/types/range_set/proof.f.d.mts +3 -0
  294. package/fjs/types/range_set/proof.f.mjs +4 -1
  295. package/fjs/types/result/module.d.mts +8 -0
  296. package/fjs/types/result/module.f.d.mts +37 -7
  297. package/fjs/types/result/module.f.mjs +38 -8
  298. package/fjs/types/result/module.mjs +9 -1
  299. package/fjs/types/result/proof.f.d.mts +5 -0
  300. package/fjs/types/result/proof.f.mjs +22 -2
  301. package/fjs/types/rtti/common/module.f.d.mts +35 -2
  302. package/fjs/types/rtti/common/module.f.mjs +9 -7
  303. package/fjs/types/rtti/common/proof.f.d.mts +4 -0
  304. package/fjs/types/rtti/common/proof.f.mjs +5 -2
  305. package/fjs/types/rtti/data/module.f.d.mts +120 -0
  306. package/fjs/types/rtti/data/module.f.mjs +1030 -0
  307. package/fjs/types/rtti/data/proof.f.d.mts +75 -0
  308. package/fjs/types/rtti/data/proof.f.mjs +566 -0
  309. package/fjs/types/rtti/data/types.d.ts +83 -0
  310. package/fjs/types/rtti/module.f.d.mts +12 -5
  311. package/fjs/types/rtti/module.f.mjs +7 -5
  312. package/fjs/types/rtti/parse/module.f.d.mts +38 -0
  313. package/fjs/types/rtti/parse/module.f.mjs +9 -7
  314. package/fjs/types/rtti/parse/proof.f.mjs +18 -38
  315. package/fjs/types/rtti/proof.f.d.mts +3 -1
  316. package/fjs/types/rtti/proof.f.mjs +3 -1
  317. package/fjs/types/rtti/ts/module.f.d.mts +68 -9
  318. package/fjs/types/rtti/ts/module.f.mjs +262 -30
  319. package/fjs/types/rtti/ts/proof.f.d.mts +44 -0
  320. package/fjs/types/rtti/ts/proof.f.mjs +152 -4
  321. package/fjs/types/rtti/ts/types.d.ts +11 -0
  322. package/fjs/types/rtti/types.d.ts +40 -0
  323. package/fjs/types/rtti/validate/module.f.d.mts +36 -1
  324. package/fjs/types/rtti/validate/module.f.mjs +6 -4
  325. package/fjs/types/sorted_list/module.f.d.mts +4 -1
  326. package/fjs/types/sorted_list/module.f.mjs +21 -12
  327. package/fjs/types/sorted_list/proof.f.d.mts +3 -1
  328. package/fjs/types/sorted_list/proof.f.mjs +3 -1
  329. package/fjs/types/sorted_set/module.f.d.mts +31 -1
  330. package/fjs/types/sorted_set/module.f.mjs +4 -2
  331. package/fjs/types/sorted_set/proof.f.d.mts +3 -1
  332. package/fjs/types/sorted_set/proof.f.mjs +3 -1
  333. package/fjs/types/string/module.f.d.mts +4 -0
  334. package/fjs/types/string/module.f.mjs +4 -3
  335. package/fjs/types/string_set/module.f.d.mts +3 -1
  336. package/fjs/types/string_set/module.f.mjs +3 -2
  337. package/fjs/types/ts/module.f.d.mts +2 -0
  338. package/fjs/types/ts/module.f.mjs +3 -3
  339. package/fjs/types/ts/proof.f.d.mts +1 -0
  340. package/fjs/types/ts/proof.f.mjs +5 -0
  341. package/fjs/types/ts/types.d.ts +6 -1
  342. package/fjs/types/uint8array/module.f.d.mts +13 -2
  343. package/fjs/types/uint8array/module.f.mjs +20 -15
  344. package/fjs/website/module.f.d.mts +3 -0
  345. package/fjs/website/module.f.mjs +3 -2
  346. package/package.json +3 -3
  347. package/fjs/asn.1/types.js +0 -6
  348. package/fjs/asserts/types.js +0 -6
  349. package/fjs/basen/types.js +0 -6
  350. package/fjs/bnf/data/types.js +0 -6
  351. package/fjs/bnf/descent/types.js +0 -6
  352. package/fjs/bnf/ll1/types.js +0 -6
  353. package/fjs/bnf/token_symbol/types.js +0 -6
  354. package/fjs/bnf/types.js +0 -6
  355. package/fjs/cas/evo/types.js +0 -7
  356. package/fjs/cas/types.js +0 -6
  357. package/fjs/ci/common/types.js +0 -1
  358. package/fjs/ci/nix/types.js +0 -6
  359. package/fjs/ci/types.js +0 -6
  360. package/fjs/cli/types.js +0 -6
  361. package/fjs/common/monoid/types.js +0 -6
  362. package/fjs/crypto/pow/types.js +0 -6
  363. package/fjs/crypto/secp/types.js +0 -6
  364. package/fjs/crypto/sha2/types.js +0 -6
  365. package/fjs/crypto/sign/types.js +0 -6
  366. package/fjs/crypto/vdf/types.js +0 -6
  367. package/fjs/dev/types.js +0 -6
  368. package/fjs/djs/ast/types.js +0 -8
  369. package/fjs/djs/parser/types.js +0 -7
  370. package/fjs/djs/tokenizer/types.js +0 -7
  371. package/fjs/djs/types.js +0 -7
  372. package/fjs/effects/eff/types.js +0 -6
  373. package/fjs/effects/list/types.js +0 -6
  374. package/fjs/effects/memory/types.js +0 -6
  375. package/fjs/effects/mock/types.js +0 -6
  376. package/fjs/effects/node/types.js +0 -6
  377. package/fjs/effects/node/virtual/types.js +0 -7
  378. package/fjs/effects/types.js +0 -6
  379. package/fjs/emergent_testing/all.test.d.ts +0 -1
  380. package/fjs/emergent_testing/all.test.js +0 -5
  381. package/fjs/emergent_testing/scenarios/all.d.ts +0 -1
  382. package/fjs/emergent_testing/scenarios/all.js +0 -1
  383. package/fjs/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -6
  384. package/fjs/emergent_testing/scenarios/async-subtests.fail.js +0 -9
  385. package/fjs/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -6
  386. package/fjs/emergent_testing/scenarios/async-subtests.pass.js +0 -9
  387. package/fjs/emergent_testing/scenarios/async.fail.d.ts +0 -3
  388. package/fjs/emergent_testing/scenarios/async.fail.js +0 -6
  389. package/fjs/emergent_testing/scenarios/async.pass.d.ts +0 -3
  390. package/fjs/emergent_testing/scenarios/async.pass.js +0 -5
  391. package/fjs/emergent_testing/scenarios/fail.fail.d.ts +0 -3
  392. package/fjs/emergent_testing/scenarios/fail.fail.js +0 -3
  393. package/fjs/emergent_testing/scenarios/return-value.pass.d.ts +0 -3
  394. package/fjs/emergent_testing/scenarios/return-value.pass.js +0 -4
  395. package/fjs/emergent_testing/scenarios/thenable.pass.d.ts +0 -5
  396. package/fjs/emergent_testing/scenarios/thenable.pass.js +0 -11
  397. package/fjs/emergent_testing/scenarios/thenable2.pass.d.ts +0 -5
  398. package/fjs/emergent_testing/scenarios/thenable2.pass.js +0 -3
  399. package/fjs/emergent_testing/scenarios/throw.pass.d.ts +0 -5
  400. package/fjs/emergent_testing/scenarios/throw.pass.js +0 -3
  401. package/fjs/emergent_testing/types.js +0 -6
  402. package/fjs/js/tokenizer/types.js +0 -6
  403. package/fjs/media/html/types.js +0 -6
  404. package/fjs/media/json/parser/types.js +0 -6
  405. package/fjs/media/json/tokenizer/types.js +0 -6
  406. package/fjs/media/json/types.js +0 -13
  407. package/fjs/media/nix/types.js +0 -6
  408. package/fjs/media/revision/types.js +0 -8
  409. package/fjs/media/type/types.js +0 -6
  410. package/fjs/media/types.js +0 -7
  411. package/fjs/nanvm/types.js +0 -11
  412. package/fjs/protocol/json_rpc/types.js +0 -8
  413. package/fjs/protocol/mcp/types.js +0 -8
  414. package/fjs/sul/id/types.js +0 -6
  415. package/fjs/sul/level/hash/types.js +0 -6
  416. package/fjs/sul/level/literal/types.js +0 -6
  417. package/fjs/sul/types.js +0 -6
  418. package/fjs/text/sgr/types.js +0 -6
  419. package/fjs/text/types.js +0 -6
  420. package/fjs/text/utf16/types.js +0 -6
  421. package/fjs/text/utf8/types.js +0 -6
  422. package/fjs/types/array/types.js +0 -6
  423. package/fjs/types/bigfloat/types.js +0 -6
  424. package/fjs/types/bigint/types.js +0 -6
  425. package/fjs/types/bit_vec/types.js +0 -6
  426. package/fjs/types/btree/find/types.js +0 -6
  427. package/fjs/types/btree/types/types.js +0 -6
  428. package/fjs/types/byte_set/types.js +0 -6
  429. package/fjs/types/function/compare/types.js +0 -6
  430. package/fjs/types/function/operator/types.js +0 -6
  431. package/fjs/types/function/types.js +0 -6
  432. package/fjs/types/list/types.js +0 -6
  433. package/fjs/types/nibble_set/types.js +0 -6
  434. package/fjs/types/nominal/types.js +0 -6
  435. package/fjs/types/nullable/types.js +0 -6
  436. package/fjs/types/object/types.js +0 -8
  437. package/fjs/types/option/types.js +0 -6
  438. package/fjs/types/ordered_map/types.js +0 -6
  439. package/fjs/types/patricia_trie/types.js +0 -6
  440. package/fjs/types/phantom/types.js +0 -11
  441. package/fjs/types/prime_field/types.js +0 -6
  442. package/fjs/types/range/types.js +0 -6
  443. package/fjs/types/range_map/types.js +0 -6
  444. package/fjs/types/result/types.js +0 -6
  445. package/fjs/types/rtti/common/types.js +0 -1
  446. package/fjs/types/rtti/parse/types.js +0 -1
  447. package/fjs/types/rtti/ts/types.js +0 -1
  448. package/fjs/types/rtti/types.js +0 -1
  449. package/fjs/types/rtti/validate/types.js +0 -1
  450. package/fjs/types/sorted_list/types.js +0 -6
  451. package/fjs/types/sorted_set/types.js +0 -6
  452. package/fjs/types/string_set/types.js +0 -6
  453. package/fjs/types/ts/types.js +0 -8
@@ -34,6 +34,12 @@
34
34
  * //
35
35
  * if (get(16) !== 0) { throw 'error' }
36
36
  * ```
37
+ *
38
+ * @import { TailReduce, ReduceOp } from '../sorted_list/types.ts'
39
+ * @import { Nullable } from '../nullable/types.ts'
40
+ * @import { Equal } from '../function/operator/types.ts'
41
+ * @import { Range } from '../range/types.ts'
42
+ * @import { Entry, Properties, RangeMapArray, RangeMapOp, RangeMerge, } from './types.ts'
37
43
  */
38
44
  import type { Nullable } from '../nullable/types.ts';
39
45
  import type { Range } from '../range/types.ts';
@@ -34,21 +34,18 @@
34
34
  * //
35
35
  * if (get(16) !== 0) { throw 'error' }
36
36
  * ```
37
+ *
38
+ * @import { TailReduce, ReduceOp } from '../sorted_list/types.ts'
39
+ * @import { Nullable } from '../nullable/types.ts'
40
+ * @import { Equal } from '../function/operator/types.ts'
41
+ * @import { Range } from '../range/types.ts'
42
+ * @import { Entry, Properties, RangeMapArray, RangeMapOp, RangeMerge, } from './types.ts'
37
43
  */
38
44
 
39
45
  import { genericMerge } from '../sorted_list/module.f.mjs'
40
- /** @import { TailReduce, ReduceOp } from '../sorted_list/types.ts' */
41
46
  import { next } from '../list/module.f.mjs'
42
- /** @import { Nullable } from '../nullable/types.ts' */
43
47
  import { cmp } from '../number/module.f.mjs'
44
48
  import { bsearch } from '../function/compare/module.f.mjs'
45
- /** @import { Equal } from '../function/operator/types.ts' */
46
- /** @import { Range } from '../range/types.ts' */
47
- /**
48
- * @import {
49
- * Entry, Properties, RangeMapArray, RangeMapOp, RangeMerge,
50
- * } from './types.ts'
51
- */
52
49
 
53
50
  /** @template T @typedef {Nullable<Entry<T>>} _RangeState */
54
51
 
@@ -1,4 +1,8 @@
1
- /** @import { Unknown } from '../../media/json/types.ts' */
1
+ /**
2
+ * @import { Unknown } from '../../media/json/types.ts'
3
+ * @import { RangeMapArray, Properties, RangeMap } from './types.ts'
4
+ * @import { SortedSet } from '../sorted_set/types.ts'
5
+ */
2
6
  export declare const proof: {
3
7
  example: () => void;
4
8
  merge: (() => void)[];
@@ -1,11 +1,13 @@
1
- /** @import { Unknown } from '../../media/json/types.ts' */
1
+ /**
2
+ * @import { Unknown } from '../../media/json/types.ts'
3
+ * @import { RangeMapArray, Properties, RangeMap } from './types.ts'
4
+ * @import { SortedSet } from '../sorted_set/types.ts'
5
+ */
2
6
 
3
- /** @import { RangeMapArray, Properties, RangeMap } from './types.ts' */
4
7
  import { get, merge, fromRange, rangeMap } from './module.f.mjs'
5
8
  import { stringify } from '../../media/json/module.f.mjs'
6
9
  import { sort } from '../object/module.f.mjs'
7
10
  import { union } from '../sorted_set/module.f.mjs'
8
- /** @import { SortedSet } from '../sorted_set/types.ts' */
9
11
  import { equal, toArray } from '../list/module.f.mjs'
10
12
  import { strictEqual } from '../function/operator/module.f.mjs'
11
13
  import { cmp } from '../string/module.f.mjs'
@@ -1,3 +1,8 @@
1
+ /**
2
+ * A set of numeric ranges, represented as a `range_map` of `boolean`.
3
+ *
4
+ * @module
5
+ */
1
6
  /**
2
7
  * Constructs a range set containing a single numeric range.
3
8
  */
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * @module
5
5
  */
6
+
6
7
  import { rangeMap } from '../range_map/module.f.mjs'
7
8
 
8
9
  const map = rangeMap({
@@ -1 +1,4 @@
1
+ /**
2
+ * @import { Range } from '../range/types.ts'
3
+ */
1
4
  export declare const proof: () => void;
@@ -1,7 +1,10 @@
1
+ /**
2
+ * @import { Range } from '../range/types.ts'
3
+ */
4
+
1
5
  import { assert } from '../../asserts/module.f.mjs'
2
6
  import { toArray } from '../list/module.f.mjs'
3
7
  import { fromRange, merge, get } from './module.f.mjs'
4
- /** @import { Range } from '../range/types.ts' */
5
8
 
6
9
  /** @type {(a: string) => number} */
7
10
  const c = a => a.charCodeAt(0)
@@ -1,3 +1,11 @@
1
+ /**
2
+ * Impure `Result` companions: capture thrown exceptions as `Result` values,
3
+ * since `try`/`catch` is not allowed in FunctionalScript itself.
4
+ *
5
+ * @module
6
+ *
7
+ * @import { Result } from './types.ts'
8
+ */
1
9
  import type { Result } from './types.ts';
2
10
  /** @type {<T>(f: () => T) => Result<T, unknown>} */
3
11
  export declare const tryCatch: <T>(f: () => T) => Result<T, unknown>;
@@ -5,21 +5,25 @@
5
5
  *
6
6
  * @example
7
7
  *
8
- * ```ts
9
- * import { error, ok, unwrap, type Result } from './module.f.ts'
8
+ * ```js
9
+ * import { error, ok, okThen, unwrap } from './module.f.mjs'
10
10
  *
11
- * const success: Result<number, string> = ok(42)
12
- * const failure: Result<number, string> = error('Something went wrong')
11
+ * const success = ok(42)
12
+ * const failure = error('Something went wrong')
13
13
  *
14
14
  * if (unwrap(success) !== 42) { throw 'error' }
15
15
  * const [kind, v] = failure
16
16
  * if (kind !== 'error') { throw 'error' }
17
- * // `v` is inferred as `string` here
18
- * if (v !== 'Something went wrong') { throw 'error' }
17
+ * // `v` is `'Something went wrong'` here
18
+ *
19
+ * // `okThen` chains; an `error` skips the rest of the chain unchanged.
20
+ * const half = n => n % 2 === 0 ? ok(n / 2) : error('odd')
21
+ * if (unwrap(okThen(half)(success)) !== 21) { throw 'error' }
19
22
  * ```
23
+ *
24
+ * @import { Ok, Error, Result } from './types.ts'
20
25
  */
21
26
  import type { Ok, Error, Result } from './types.ts';
22
- /** @import { Ok, Error, Result } from './types.ts' */
23
27
  /**
24
28
  * Creates a successful result.
25
29
  *
@@ -57,3 +61,29 @@ export declare const invert: <T, E>([k, v]: Result<T, E>) => Result<E, T>;
57
61
  * @type {<T, R>(f: (value: T) => R) => <E>(r: Result<T, E>) => Result<R, E>}
58
62
  */
59
63
  export declare const mapOk: <T, R>(f: (value: T) => R) => <E>(r: Result<T, E>) => Result<R, E>;
64
+ /**
65
+ * Chains a `Result`-returning step onto a `Result`, passing an `error` through
66
+ * unchanged. The monadic bind to {@link mapOk}'s functor map, and the pure
67
+ * sibling of `fjs/effects`' `okStep` — which is the same combinator for a step
68
+ * that also performs operations.
69
+ *
70
+ * The two error types are **unioned, not unified**. A validation chain
71
+ * typically widens its error as it goes — a JSON parse failure (`string`)
72
+ * followed by an rtti schema failure (`ValidationError`) — and the hand-written
73
+ * form expressed that by rebuilding the incoming error with `error(v)` purely
74
+ * to retag it into the wider type. `E | F` states the widening in the type
75
+ * instead, so neither side has to be pre-widened and the passed-through
76
+ * `error` stays the very tuple it arrived as.
77
+ *
78
+ * `F` binds on the second arrow, as in {@link mapOk}: `f` alone determines the
79
+ * value types, so one `okThen(f)` applies to results carrying any error type.
80
+ *
81
+ * Reach for it when the step needs **only** the value it is handed. A chain
82
+ * whose later steps also read an earlier one's value would have to nest a
83
+ * closure per link to keep those values in scope, which AGENTS.md §6.4 rules
84
+ * out for the same reason it rules out nested `step`; write those as a flat
85
+ * sequence of guards.
86
+ *
87
+ * @type {<T, R, E>(f: (value: T) => Result<R, E>) => <F>(r: Result<T, F>) => Result<R, E | F>}
88
+ */
89
+ export declare const okThen: <T, R, E>(f: (value: T) => Result<R, E>) => <F>(r: Result<T, F>) => Result<R, E | F>;
@@ -5,22 +5,25 @@
5
5
  *
6
6
  * @example
7
7
  *
8
- * ```ts
9
- * import { error, ok, unwrap, type Result } from './module.f.ts'
8
+ * ```js
9
+ * import { error, ok, okThen, unwrap } from './module.f.mjs'
10
10
  *
11
- * const success: Result<number, string> = ok(42)
12
- * const failure: Result<number, string> = error('Something went wrong')
11
+ * const success = ok(42)
12
+ * const failure = error('Something went wrong')
13
13
  *
14
14
  * if (unwrap(success) !== 42) { throw 'error' }
15
15
  * const [kind, v] = failure
16
16
  * if (kind !== 'error') { throw 'error' }
17
- * // `v` is inferred as `string` here
18
- * if (v !== 'Something went wrong') { throw 'error' }
17
+ * // `v` is `'Something went wrong'` here
18
+ *
19
+ * // `okThen` chains; an `error` skips the rest of the chain unchanged.
20
+ * const half = n => n % 2 === 0 ? ok(n / 2) : error('odd')
21
+ * if (unwrap(okThen(half)(success)) !== 21) { throw 'error' }
19
22
  * ```
23
+ *
24
+ * @import { Ok, Error, Result } from './types.ts'
20
25
  */
21
26
 
22
- /** @import { Ok, Error, Result } from './types.ts' */
23
-
24
27
  /**
25
28
  * Creates a successful result.
26
29
  *
@@ -65,3 +68,30 @@ export const invert = ([k, v]) => k === 'ok' ? error(v) : ok(v)
65
68
  * @type {<T, R>(f: (value: T) => R) => <E>(r: Result<T, E>) => Result<R, E>}
66
69
  */
67
70
  export const mapOk = f => r => r[0] === 'ok' ? ok(f(r[1])) : r
71
+
72
+ /**
73
+ * Chains a `Result`-returning step onto a `Result`, passing an `error` through
74
+ * unchanged. The monadic bind to {@link mapOk}'s functor map, and the pure
75
+ * sibling of `fjs/effects`' `okStep` — which is the same combinator for a step
76
+ * that also performs operations.
77
+ *
78
+ * The two error types are **unioned, not unified**. A validation chain
79
+ * typically widens its error as it goes — a JSON parse failure (`string`)
80
+ * followed by an rtti schema failure (`ValidationError`) — and the hand-written
81
+ * form expressed that by rebuilding the incoming error with `error(v)` purely
82
+ * to retag it into the wider type. `E | F` states the widening in the type
83
+ * instead, so neither side has to be pre-widened and the passed-through
84
+ * `error` stays the very tuple it arrived as.
85
+ *
86
+ * `F` binds on the second arrow, as in {@link mapOk}: `f` alone determines the
87
+ * value types, so one `okThen(f)` applies to results carrying any error type.
88
+ *
89
+ * Reach for it when the step needs **only** the value it is handed. A chain
90
+ * whose later steps also read an earlier one's value would have to nest a
91
+ * closure per link to keep those values in scope, which AGENTS.md §6.4 rules
92
+ * out for the same reason it rules out nested `step`; write those as a flat
93
+ * sequence of guards.
94
+ *
95
+ * @type {<T, R, E>(f: (value: T) => Result<R, E>) => <F>(r: Result<T, F>) => Result<R, E | F>}
96
+ */
97
+ export const okThen = f => r => r[0] === 'error' ? r : f(r[1])
@@ -1,4 +1,12 @@
1
- /** @import { Result } from './types.ts' */
1
+ /**
2
+ * Impure `Result` companions: capture thrown exceptions as `Result` values,
3
+ * since `try`/`catch` is not allowed in FunctionalScript itself.
4
+ *
5
+ * @module
6
+ *
7
+ * @import { Result } from './types.ts'
8
+ */
9
+
2
10
  import { ok, error } from './module.f.mjs'
3
11
 
4
12
  /** @type {<T>(f: () => T) => Result<T, unknown>} */
@@ -1,10 +1,15 @@
1
+ /**
2
+ * @import { Result } from './types.ts'
3
+ */
1
4
  declare const example: () => void;
2
5
  declare const invertTest: () => void;
3
6
  declare const mapOkTest: () => void;
7
+ declare const okThenTest: () => void;
4
8
  export declare const proof: {
5
9
  example: typeof example;
6
10
  invertTest: typeof invertTest;
7
11
  mapOkTest: typeof mapOkTest;
12
+ okThenTest: typeof okThenTest;
8
13
  throw: {
9
14
  unwrapError: () => string;
10
15
  };
@@ -1,5 +1,8 @@
1
- import { error, ok, unwrap, invert, mapOk } from './module.f.mjs'
2
- /** @import { Result } from './types.ts' */
1
+ /**
2
+ * @import { Result } from './types.ts'
3
+ */
4
+
5
+ import { error, ok, unwrap, invert, mapOk, okThen } from './module.f.mjs'
3
6
  import { assert, assertEq } from '../../asserts/module.f.mjs'
4
7
 
5
8
  const example = () => {
@@ -31,10 +34,27 @@ const mapOkTest = () => {
31
34
  assert(!(k1 !== 'error' || v1 !== 'oops'), [k1, v1])
32
35
  }
33
36
 
37
+ const okThenTest = () => {
38
+ /** @type {(n: number) => Result<string, string>} */
39
+ const half = n => n % 2 === 0 ? ok(`${n / 2}`) : error('odd')
40
+ const [k0, v0] = okThen(half)(ok(42))
41
+ assert(!(k0 !== 'ok' || v0 !== '21'), [k0, v0])
42
+ // `f` itself failing: the chain reports `f`'s own error.
43
+ const [k1, v1] = okThen(half)(ok(41))
44
+ assert(!(k1 !== 'error' || v1 !== 'odd'), [k1, v1])
45
+ // An incoming `error` skips `f` and passes through unchanged, keeping its
46
+ // own error type: the result is `Result<string, string | number>`.
47
+ /** @type {Result<number, number>} */
48
+ const incoming = error(7)
49
+ const [k2, v2] = okThen(half)(incoming)
50
+ assert(!(k2 !== 'error' || v2 !== 7), [k2, v2])
51
+ }
52
+
34
53
  export const proof = {
35
54
  example,
36
55
  invertTest,
37
56
  mapOkTest,
57
+ okThenTest,
38
58
  throw: {
39
59
  unwrapError: () => unwrap(error('oops')),
40
60
  },
@@ -1,10 +1,43 @@
1
+ /**
2
+ * Shared kernel for RTTI consumers (`validate`, `parse`).
3
+ *
4
+ * Both consumers traverse the same schema shape and produce the same
5
+ * `Result<T, ValidationError>` outcome. Only the per-variant handling differs
6
+ * — `validate` keeps the original value, `parse` constructs a fresh one.
7
+ *
8
+ * This module hosts the parts that do not differ:
9
+ *
10
+ * - The error shape (`ValidationError`, `Path`) and path bookkeeping
11
+ * (`verror`, `prependPath`).
12
+ * - Primitive checks (`primitive0Validate`, `constPrimitiveValidate`).
13
+ * - The `Validate<T>`/`Result<T>` signatures — `parse` uses the same shape.
14
+ * - `visit`: a visitor over the `Type` ADT. Callers supply a `Visitor<R>`
15
+ * with one handler per variant; `visit(v)(rtti)` recognizes `rtti` and
16
+ * calls the matching handler. Both consumers compose their top-level
17
+ * function from a visitor.
18
+ * - `eachEntry`: the container entry loop (array/record/tuple/struct), shared
19
+ * by both consumers' container builders. Callers choose what (if anything)
20
+ * to accumulate, so `validate`'s pure pass/fail check pays no allocation.
21
+ * - `orVisit`: the shared `or` handler — try each variant's recursive walker,
22
+ * return the first match.
23
+ *
24
+ * Keeping the kernel here also removes `parse`'s incidental dependency on
25
+ * `validate` and gives schema-driven consumers (e.g. the data form in
26
+ * `../data/module.f.mjs`) a stable shared base.
27
+ *
28
+ * @module
29
+ *
30
+ * @import { Primitive, Unknown } from '../ts/types.ts'
31
+ * @import { Const, Info0, Primitive0, Struct, Tag1, Tuple, Type } from '../types.ts'
32
+ * @import { Error, Result as CommonResult } from '../../result/types.ts'
33
+ * @import { StringMap } from '../../object/types.ts'
34
+ * @import { Validate, Visitor, IsContainer, Container, ResultE, ValidateE, ValidationError } from './types.ts'
35
+ */
1
36
  import type { Primitive, Unknown } from '../ts/types.ts';
2
37
  import type { Info0, Primitive0, Type } from '../types.ts';
3
38
  import type { Error, Result as CommonResult } from '../../result/types.ts';
4
39
  import type { StringMap } from '../../object/types.ts';
5
40
  import type { Validate, Visitor, IsContainer, ResultE, ValidateE, ValidationError } from './types.ts';
6
- /** @import { StringMap } from '../../object/types.ts' */
7
- /** @import { Validate, Visitor, IsContainer, Container, ResultE, ValidateE, ValidationError } from './types.ts' */
8
41
  /** Builds an error result with empty path and the given message. */
9
42
  /** @type {(message: string) => Error<ValidationError>} */
10
43
  export declare const verror: (message: string) => Error<ValidationError>;
@@ -22,19 +22,21 @@
22
22
  * return the first match.
23
23
  *
24
24
  * Keeping the kernel here also removes `parse`'s incidental dependency on
25
- * `validate` and gives future schema-driven consumers (e.g. the data form
26
- * sketched in [i143](../../../../issues/README.md)) a stable shared base.
25
+ * `validate` and gives schema-driven consumers (e.g. the data form in
26
+ * `../data/module.f.mjs`) a stable shared base.
27
27
  *
28
28
  * @module
29
+ *
30
+ * @import { Primitive, Unknown } from '../ts/types.ts'
31
+ * @import { Const, Info0, Primitive0, Struct, Tag1, Tuple, Type } from '../types.ts'
32
+ * @import { Error, Result as CommonResult } from '../../result/types.ts'
33
+ * @import { StringMap } from '../../object/types.ts'
34
+ * @import { Validate, Visitor, IsContainer, Container, ResultE, ValidateE, ValidationError } from './types.ts'
29
35
  */
30
- /** @import { Primitive, Unknown } from '../ts/types.ts' */
31
- /** @import { Const, Info0, Primitive0, Struct, Tag1, Tuple, Type } from '../types.ts' */
32
- /** @import { Error, Result as CommonResult } from '../../result/types.ts' */
36
+
33
37
  import { error, ok } from '../../result/module.f.mjs'
34
38
  import { isArray as commonIsArray } from '../../array/module.f.mjs'
35
39
  import { isObject as commonIsObject } from '../../object/module.f.mjs'
36
- /** @import { StringMap } from '../../object/types.ts' */
37
- /** @import { Validate, Visitor, IsContainer, Container, ResultE, ValidateE, ValidationError } from './types.ts' */
38
40
 
39
41
  /** Builds an error result with empty path and the given message. */
40
42
  /** @type {(message: string) => Error<ValidationError>} */
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @import { Result } from '../../result/types.ts'
3
+ * @import { ValidationError } from './types.ts'
4
+ */
1
5
  export type _Entries = ReadonlyArray<readonly [string, number]>;
2
6
  export declare const proof: {
3
7
  empty: () => void;
@@ -1,7 +1,10 @@
1
+ /**
2
+ * @import { Result } from '../../result/types.ts'
3
+ * @import { ValidationError } from './types.ts'
4
+ */
5
+
1
6
  import { eachEntry } from './module.f.mjs'
2
- /** @import { Result } from '../../result/types.ts' */
3
7
  import { error, ok } from '../../result/module.f.mjs'
4
- /** @import { ValidationError } from './types.ts' */
5
8
  import { assert, assertEq } from '../../../asserts/module.f.mjs'
6
9
 
7
10
  /** @typedef {ReadonlyArray<readonly [string, number]>} _Entries */
@@ -0,0 +1,120 @@
1
+ /**
2
+ * The serializable RTTI data form and the {@link toData} conversion from the
3
+ * thunk form.
4
+ *
5
+ * A schema denotes a set of values. The data form partitions that set into
6
+ * six disjoint kinds — unit values (`null`, `undefined`, `false`, `true`),
7
+ * numbers, strings, bigints, arrays and objects — so that all schema algebra
8
+ * (union normalization, coverage collapse, {@link equal}, {@link subset},
9
+ * canonical ordering via {@link cmp}) reduces to kind-wise set operations.
10
+ * {@link toData} is the single bridge from the thunk form; {@link validate}
11
+ * is the data-driven counterpart of `../validate`. The form serializes as
12
+ * DJS — plain JSON when no `bigint` literals are involved. See `./README.md`
13
+ * for the design rationale and serialization notes, and `./types.ts` for the
14
+ * type-level API.
15
+ *
16
+ * @module
17
+ *
18
+ * @import { Const, ConstObject, Type } from '../types.ts'
19
+ * @import { Primitive, Unknown } from '../ts/types.ts'
20
+ * @import { ResultE } from '../common/types.ts'
21
+ * @import { StringMap } from '../../object/types.ts'
22
+ * @import { ArraySet, Data, KindSet, Node, ObjectSet, RuleSet, UnionSet } from './types.ts'
23
+ */
24
+ import type { Const, Type } from '../types.ts';
25
+ import type { Primitive, Unknown } from '../ts/types.ts';
26
+ import type { ResultE } from '../common/types.ts';
27
+ import type { StringMap } from '../../object/types.ts';
28
+ import type { Data, Node, RuleSet, UnionSet } from './types.ts';
29
+ /**
30
+ * The unit kind's enumeration: bit `1 << i` of a {@link UnionSet}'s `unit`
31
+ * bitset stands for `unitList[i]`.
32
+ */
33
+ export declare const unitList: readonly ['null', 'undefined', 'false', 'true'];
34
+ /**
35
+ * The `unit` bit of one unit value.
36
+ *
37
+ * @type {(v: null | undefined | boolean) => number}
38
+ */
39
+ export declare const unitBit: (v: null | undefined | boolean) => number;
40
+ /**
41
+ * The data form of the empty set — rtti `never`.
42
+ *
43
+ * @type {UnionSet}
44
+ */
45
+ export declare const never: UnionSet;
46
+ /**
47
+ * The data form of the set of all values — rtti `unknown`.
48
+ *
49
+ * @type {UnionSet}
50
+ */
51
+ export declare const unknown: UnionSet;
52
+ /**
53
+ * Total order over the data form: negative, zero or positive, with zero
54
+ * exactly on structural identity. {@link toData} output is canonical, so two
55
+ * conversions of equivalent thunk schemas compare equal — this is what makes
56
+ * the data form comparable and sortable.
57
+ *
58
+ * @type {(a: Data) => (b: Data) => number}
59
+ */
60
+ export declare const cmp: (a: Data) => (b: Data) => number;
61
+ /**
62
+ * Structural equality of canonical forms: `equal(toData(a))(toData(b))`
63
+ * holds exactly when `a` and `b` normalize to the same data — e.g.
64
+ * `or(a, b)` and `or(b, a)` are equal. Recursive definitions compare by
65
+ * their rule names, which are derived from the defining functions' names.
66
+ *
67
+ * @type {(a: Data) => (b: Data) => boolean}
68
+ */
69
+ export declare const equal: (a: Data) => (b: Data) => boolean;
70
+ export type _Ctx = readonly [RuleSet, RuleSet];
71
+ export type _Assumed = StringMap<StringMap<true>>;
72
+ export type _Keyed = readonly [Node, string | undefined];
73
+ /**
74
+ * Sound subset test: `true` means every value of `a` is a value of `b`.
75
+ * Kind-wise on unions, pattern-wise on arrays/objects, coinductive on
76
+ * reference cycles. Incomplete in the known-hard corners of semantic
77
+ * subtyping (see `./README.md`): it may answer `false` for an inclusion
78
+ * that only holds by distributing a union across positions, or one whose
79
+ * left side is a non-syntactic empty set — never `true` for a non-inclusion.
80
+ *
81
+ * @type {(a: Data) => (b: Data) => boolean}
82
+ */
83
+ export declare const subset: (a: Data) => (b: Data) => boolean;
84
+ export type _NodeMap = (n: Node) => Node;
85
+ export type _Thunk = Exclude<Type, Const>;
86
+ export type _Key = Exclude<Type, Primitive>;
87
+ export type _State = {
88
+ readonly converting: readonly _Thunk[];
89
+ readonly names: readonly (readonly [_Thunk, string])[];
90
+ readonly done: readonly (readonly [_Key, UnionSet])[];
91
+ readonly deferred: readonly (readonly [_Thunk, _Thunk])[];
92
+ };
93
+ /**
94
+ * Converts a thunk-form schema into its canonical data form.
95
+ *
96
+ * Runs once per consumer need; schemas that are built but never consumed pay
97
+ * nothing. The output is normalized — unions are flattened and merged
98
+ * kind-wise, literals are sorted and deduplicated, subsumed array/object
99
+ * patterns are dropped, rules are pruned to the reachable set and sorted,
100
+ * and a union equal to a rule's body reads back as a reference — so schema
101
+ * identity is a property of this form: `toData(or(a, b))` and
102
+ * `toData(or(b, a))` are structurally identical even though the two thunks
103
+ * are distinct, and `or` is idempotent on recursive schemas.
104
+ *
105
+ * Only recursive definitions become named rules (named after their defining
106
+ * functions), everything else is inlined; a schema with no reference cycles
107
+ * converts to `[{}, unionSet]`.
108
+ *
109
+ * @type {(t: Type) => Data}
110
+ */
111
+ export declare const toData: (t: Type) => Data;
112
+ /**
113
+ * Data-driven validation — the counterpart of `../validate` that consumes a
114
+ * {@link Data} produced by {@link toData} instead of walking the thunk
115
+ * graph. Returns the original value on success, or the first
116
+ * `{ path, message }` error.
117
+ *
118
+ * @type {(data: Data) => (value: Unknown) => ResultE}
119
+ */
120
+ export declare const validate: (data: Data) => (value: Unknown) => ResultE;