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
@@ -29,16 +29,14 @@
29
29
  *
30
30
  * @module
31
31
  *
32
- * @import { Unknown } from '../../../media/json/types.ts'
33
32
  * @import { Effect, Operation } from '../../../effects/types.ts'
34
33
  * @import { IoResult, Read, Write } from '../../../effects/node/types.ts'
35
34
  * @import { Response } from '../../json_rpc/types.ts'
35
+ * @import { Step } from './types.ts'
36
36
  */
37
- import type { Unknown } from '../../../media/json/types.ts';
38
37
  import type { Effect, Operation } from '../../../effects/types.ts';
39
38
  import type { Read, Write } from '../../../effects/node/types.ts';
40
- import type { Response } from '../../json_rpc/types.ts';
41
- export type Step<O extends Operation> = (value: Unknown) => Effect<O, Response | null>;
39
+ import type { Step } from './types.ts';
42
40
  /**
43
41
  * Drives the read-parse-dispatch-write loop for `handler` over stdin/stdout.
44
42
  *
@@ -29,10 +29,10 @@
29
29
  *
30
30
  * @module
31
31
  *
32
- * @import { Unknown } from '../../../media/json/types.ts'
33
32
  * @import { Effect, Operation } from '../../../effects/types.ts'
34
33
  * @import { IoResult, Read, Write } from '../../../effects/node/types.ts'
35
34
  * @import { Response } from '../../json_rpc/types.ts'
35
+ * @import { Step } from './types.ts'
36
36
  */
37
37
 
38
38
  import { pure, step } from '../../../effects/module.f.mjs'
@@ -43,13 +43,6 @@ import { sort } from '../../../types/object/module.f.mjs'
43
43
  import { internalError, jsonrpc, parseError } from '../../json_rpc/module.f.mjs'
44
44
  import { error, ok } from '../../../types/result/module.f.mjs'
45
45
 
46
- /**
47
- * A transport step: maps one parsed JSON-RPC message to a response, or `null`
48
- * for a notification that needs no reply. The shape of `mcpStep(config)(handlers)(key)`.
49
- * @template {Operation} O
50
- * @typedef {(value: Unknown) => Effect<O, Response | null>} Step
51
- */
52
-
53
46
  const stringifyJson = stringify(sort)
54
47
 
55
48
  /** The parse-error response (`-32700`, `id: null`) for a malformed input line. */
@@ -3,7 +3,7 @@
3
3
  * @import { Effect } from '../../../effects/types.ts'
4
4
  * @import { State } from '../../../effects/node/virtual/types.ts'
5
5
  * @import { Id, Response } from '../../json_rpc/types.ts'
6
- * @import { Step } from './module.f.mjs'
6
+ * @import { Step } from './types.ts'
7
7
  */
8
8
  export declare const proof: {
9
9
  eofImmediately: () => void;
@@ -3,7 +3,7 @@
3
3
  * @import { Effect } from '../../../effects/types.ts'
4
4
  * @import { State } from '../../../effects/node/virtual/types.ts'
5
5
  * @import { Id, Response } from '../../json_rpc/types.ts'
6
- * @import { Step } from './module.f.mjs'
6
+ * @import { Step } from './types.ts'
7
7
  */
8
8
 
9
9
  import { assertEq } from '../../../asserts/module.f.mjs'
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Types for the stdio transport of JSON-RPC / MCP servers.
3
+ *
4
+ * @module
5
+ */
6
+ import type { Unknown } from '../../../media/json/types.ts';
7
+ import type { Effect, Operation } from '../../../effects/types.ts';
8
+ import type { Response } from '../../json_rpc/types.ts';
9
+ /**
10
+ * A transport step: maps one parsed JSON-RPC message to a response, or `null`
11
+ * for a notification that needs no reply. The shape of
12
+ * `mcpStep(config)(handlers)(key)`.
13
+ */
14
+ export type Step<O extends Operation> = (value: Unknown) => Effect<O, Response | null>;
@@ -5,6 +5,11 @@
5
5
  * See `./types.ts` for the `Id` type.
6
6
  *
7
7
  * @module
8
+ *
9
+ * @import { Vec } from '../../types/bit_vec/types.ts'
10
+ * @import { Point2D } from '../../crypto/secp/types.ts'
11
+ * @import { V8 } from '../../crypto/sha2/types.ts'
12
+ * @import { Id } from './types.ts'
8
13
  */
9
14
  import type { Vec } from '../../types/bit_vec/types.ts';
10
15
  import type { Id } from './types.ts';
@@ -5,21 +5,22 @@
5
5
  * See `./types.ts` for the `Id` type.
6
6
  *
7
7
  * @module
8
+ *
9
+ * @import { Vec } from '../../types/bit_vec/types.ts'
10
+ * @import { Point2D } from '../../crypto/secp/types.ts'
11
+ * @import { V8 } from '../../crypto/sha2/types.ts'
12
+ * @import { Id } from './types.ts'
8
13
  */
9
14
 
10
15
  import { toArray } from '../../types/list/module.f.mjs'
11
- /** @import { Vec } from '../../types/bit_vec/types.ts' */
12
16
  import { length, msb, uint, uintChunkList, unpack, vec } from '../../types/bit_vec/module.f.mjs'
13
17
  import { assertEq } from '../../asserts/module.f.mjs'
14
18
  import { utf8 } from '../../text/module.f.mjs'
15
- /** @import { Point2D } from '../../crypto/secp/types.ts' */
16
19
  import { secp256r1 } from '../../crypto/secp/module.f.mjs'
17
- /** @import { V8 } from '../../crypto/sha2/types.ts' */
18
20
  import { base32 } from '../../crypto/sha2/module.f.mjs'
19
21
  import { literal3ToVec } from '../level/literal/module.f.mjs'
20
22
  import { log2 } from '../../types/bigint/module.f.mjs'
21
23
  import { asBase, asNominal } from '../../types/nominal/module.f.mjs'
22
- /** @import { Id } from './types.ts' */
23
24
 
24
25
  // 32 bytes = 256 bits.
25
26
  //
@@ -3,10 +3,13 @@
3
3
  * See `./types.ts` for the `Add`/`EncodeState` type-level API.
4
4
  *
5
5
  * @module
6
+ *
7
+ * @import { Create } from '../../../types/patricia_trie/types.ts'
8
+ * @import { Id } from '../../id/types.ts'
9
+ * @import { Add, EncodeState } from './types.ts'
6
10
  */
7
11
  import type { Id } from '../../id/types.ts';
8
12
  import type { Add, EncodeState } from './types.ts';
9
- /** @import { Add, EncodeState } from './types.ts' */
10
13
  /**
11
14
  * Returns a streaming encoder for hash-level symbols.
12
15
  *
@@ -3,14 +3,15 @@
3
3
  * See `./types.ts` for the `Add`/`EncodeState` type-level API.
4
4
  *
5
5
  * @module
6
+ *
7
+ * @import { Create } from '../../../types/patricia_trie/types.ts'
8
+ * @import { Id } from '../../id/types.ts'
9
+ * @import { Add, EncodeState } from './types.ts'
6
10
  */
7
11
 
8
- /** @import { Create } from '../../../types/patricia_trie/types.ts' */
9
12
  import { emptyState, patriciaTrie } from '../../../types/patricia_trie/module.f.mjs'
10
13
  import { compress } from '../../id/module.f.mjs'
11
- /** @import { Id } from '../../id/types.ts' */
12
14
  import { asBase } from '../../../types/nominal/module.f.mjs'
13
- /** @import { Add, EncodeState } from './types.ts' */
14
15
 
15
16
  /**
16
17
  * Returns a streaming encoder for hash-level symbols.
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @import { Id } from '../../id/types.ts'
3
+ * @import { EncodeState } from './types.ts'
4
+ */
1
5
  import type { Id } from '../../id/types.ts';
2
6
  export type _NodeList = readonly (readonly [Id, Id, Id, boolean])[];
3
7
  export declare const proof: {
@@ -1,8 +1,11 @@
1
+ /**
2
+ * @import { Id } from '../../id/types.ts'
3
+ * @import { EncodeState } from './types.ts'
4
+ */
5
+
1
6
  import { assert, assertEq } from '../../../asserts/module.f.mjs'
2
7
  import { compress, level3Id } from '../../id/module.f.mjs'
3
- /** @import { Id } from '../../id/types.ts' */
4
8
  import { emptyEncodeState, encode } from './module.f.mjs'
5
- /** @import { EncodeState } from './types.ts' */
6
9
 
7
10
  /** @typedef {readonly (readonly [Id, Id, Id, boolean])[]} _NodeList */
8
11
 
@@ -4,11 +4,14 @@
4
4
  * `Word`/`EncodeState`/`Level`/`PipelineState`/`LiteralToVec` type-level API.
5
5
  *
6
6
  * @module
7
+ *
8
+ * @import { Equal, StateScan } from '../../../types/function/operator/types.ts'
9
+ * @import { List } from '../../../types/list/types.ts'
10
+ * @import { EncodeState, Level, LiteralToVec, PipelineState } from './types.ts'
7
11
  */
8
12
  import type { Equal, StateScan } from '../../../types/function/operator/types.ts';
9
13
  import type { List } from '../../../types/list/types.ts';
10
14
  import type { EncodeState, Level, LiteralToVec, PipelineState } from './types.ts';
11
- /** @import { EncodeState, Level, LiteralToVec, PipelineState } from './types.ts' */
12
15
  /** @type {(s: bigint) => string} */
13
16
  export declare const symbolToString: (s: bigint) => string;
14
17
  /** @type {(word: List<bigint>) => string} */
@@ -4,16 +4,17 @@
4
4
  * `Word`/`EncodeState`/`Level`/`PipelineState`/`LiteralToVec` type-level API.
5
5
  *
6
6
  * @module
7
+ *
8
+ * @import { Equal, StateScan } from '../../../types/function/operator/types.ts'
9
+ * @import { List } from '../../../types/list/types.ts'
10
+ * @import { EncodeState, Level, LiteralToVec, PipelineState } from './types.ts'
7
11
  */
8
12
 
9
13
  import { log2 } from '../../../types/bigint/module.f.mjs'
10
14
  import { msb, vec } from '../../../types/bit_vec/module.f.mjs'
11
- /** @import { Equal, StateScan } from '../../../types/function/operator/types.ts' */
12
15
  import { strictEqual } from '../../../types/function/operator/module.f.mjs'
13
- /** @import { List } from '../../../types/list/types.ts' */
14
16
  import { equal, map } from '../../../types/list/module.f.mjs'
15
17
  import { join } from '../../../types/string/module.f.mjs'
16
- /** @import { EncodeState, Level, LiteralToVec, PipelineState } from './types.ts' */
17
18
 
18
19
  /** @type {(s: bigint) => string} */
19
20
  export const symbolToString = s => s.toString(16)
@@ -1,3 +1,6 @@
1
+ /**
2
+ * @import { Vec } from '../../../types/bit_vec/types.ts'
3
+ */
1
4
  export declare const proof: {
2
5
  x2: () => void;
3
6
  x5: () => void;
@@ -1,4 +1,7 @@
1
- /** @import { Vec } from '../../../types/bit_vec/types.ts' */
1
+ /**
2
+ * @import { Vec } from '../../../types/bit_vec/types.ts'
3
+ */
4
+
2
5
  import { chunkList, msb, vec } from '../../../types/bit_vec/module.f.mjs'
3
6
  import { assert, assertEq } from '../../../asserts/module.f.mjs'
4
7
  import { map, stateScan, toArray } from '../../../types/list/module.f.mjs'
@@ -4,15 +4,17 @@
4
4
  * See `./types.ts` for the `EncodeState`/`Encode` type-level API.
5
5
  *
6
6
  * @module
7
+ *
8
+ * @import { Add } from './level/hash/types.ts'
9
+ * @import { Id } from './id/types.ts'
10
+ * @import { InternalState } from '../types/patricia_trie/types.ts'
11
+ * @import { EncodeState, Encode } from './types.ts'
7
12
  */
8
13
  import type { Add } from './level/hash/types.ts';
9
14
  import type { Id } from './id/types.ts';
10
15
  import type { InternalState } from '../types/patricia_trie/types.ts';
11
16
  import type { EncodeState, Encode } from './types.ts';
12
17
  export type _HashState = InternalState<Id>;
13
- /** @import { Id } from './id/types.ts' */
14
- /** @import { InternalState } from '../types/patricia_trie/types.ts' */
15
- /** @import { EncodeState, Encode } from './types.ts' */
16
18
  /** @typedef {InternalState<Id>} _HashState */
17
19
  /** @type {<S>(storage: S) => EncodeState<S>} */
18
20
  export declare const emptyEncodeState: <S>(storage: S) => EncodeState<S>;
@@ -4,15 +4,16 @@
4
4
  * See `./types.ts` for the `EncodeState`/`Encode` type-level API.
5
5
  *
6
6
  * @module
7
+ *
8
+ * @import { Add } from './level/hash/types.ts'
9
+ * @import { Id } from './id/types.ts'
10
+ * @import { InternalState } from '../types/patricia_trie/types.ts'
11
+ * @import { EncodeState, Encode } from './types.ts'
7
12
  */
8
13
 
9
14
  import { emptyPipelineState, pipelineStep } from './level/literal/module.f.mjs'
10
15
  import { encode as hashEncode } from './level/hash/module.f.mjs'
11
- /** @import { Add } from './level/hash/types.ts' */
12
16
  import { level3Id } from './id/module.f.mjs'
13
- /** @import { Id } from './id/types.ts' */
14
- /** @import { InternalState } from '../types/patricia_trie/types.ts' */
15
- /** @import { EncodeState, Encode } from './types.ts' */
16
17
 
17
18
  /** @typedef {InternalState<Id>} _HashState */
18
19
 
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @import { Id } from './id/types.ts'
3
+ * @import { Add } from './level/hash/types.ts'
4
+ */
1
5
  import type { Id } from './id/types.ts';
2
6
  export type _Merge = readonly [Id, Id, Id, boolean];
3
7
  export declare const proof: {
@@ -1,8 +1,11 @@
1
+ /**
2
+ * @import { Id } from './id/types.ts'
3
+ * @import { Add } from './level/hash/types.ts'
4
+ */
5
+
1
6
  import { assert, assertEq } from '../asserts/module.f.mjs'
2
7
  import { compress } from './id/module.f.mjs'
3
- /** @import { Id } from './id/types.ts' */
4
8
  import { encode, emptyEncodeState } from './module.f.mjs'
5
- /** @import { Add } from './level/hash/types.ts' */
6
9
 
7
10
  /** @typedef {readonly [Id, Id, Id, boolean]} _Merge */
8
11
 
@@ -1,8 +1,16 @@
1
1
  /**
2
2
  * Provides ASCII code point constants and helpers for creating numeric code points and inclusive ranges.
3
3
  *
4
+ * It also owns the hexadecimal digit codec (`hexDigitValue` /
5
+ * `hexDigitCodePoint`), so no consumer has to rederive the `'0'`, `'a' - 10`
6
+ * and `'A' - 10` offsets for itself.
7
+ *
4
8
  * @module
9
+ *
10
+ * @import { Nullable } from '../../types/nullable/types.ts'
11
+ * @import { Range } from '../../types/range/types.ts'
5
12
  */
13
+ import type { Nullable } from '../../types/nullable/types.ts';
6
14
  import type { Range } from '../../types/range/types.ts';
7
15
  /** Returns the code point value of the first character in a string. @type {(s: string) => number} */
8
16
  export declare const one: (s: string) => number;
@@ -94,6 +102,8 @@ export declare const latinCapitalLetterA: number;
94
102
  export declare const latinCapitalLetterE: number;
95
103
  /** 0x46 */
96
104
  export declare const latinCapitalLetterF: number;
105
+ /** 0x41..0x46, the uppercase hexadecimal digits. */
106
+ export declare const latinCapitalLetterAFRange: Range;
97
107
  /** 0x5B */
98
108
  export declare const leftSquareBracket: number;
99
109
  /** 0x5C */
@@ -116,6 +126,8 @@ export declare const latinSmallLetterB: number;
116
126
  export declare const latinSmallLetterE: number;
117
127
  /** 0x66 */
118
128
  export declare const latinSmallLetterF: number;
129
+ /** 0x61..0x66, the lowercase hexadecimal digits. */
130
+ export declare const latinSmallLetterAFRange: Range;
119
131
  /** 0x6E */
120
132
  export declare const latinSmallLetterN: number;
121
133
  /** 0x72 */
@@ -134,3 +146,17 @@ export declare const verticalLine: number;
134
146
  export declare const rightCurlyBracket: number;
135
147
  /** 0x7E */
136
148
  export declare const tilde: number;
149
+ /**
150
+ * The value `0..15` denoted by a hexadecimal digit code point, or `null` when
151
+ * the code point is not one of `0-9`, `a-f`, `A-F`.
152
+ *
153
+ * @type {(codePoint: number) => Nullable<number>}
154
+ */
155
+ export declare const hexDigitValue: (codePoint: number) => Nullable<number>;
156
+ /**
157
+ * The lowercase hexadecimal digit code point denoting a value in `0..15`.
158
+ * `hexDigitValue(hexDigitCodePoint(v))` is `v` for every such value.
159
+ *
160
+ * @type {(value: number) => number}
161
+ */
162
+ export declare const hexDigitCodePoint: (value: number) => number;
@@ -1,10 +1,17 @@
1
1
  /**
2
2
  * Provides ASCII code point constants and helpers for creating numeric code points and inclusive ranges.
3
3
  *
4
+ * It also owns the hexadecimal digit codec (`hexDigitValue` /
5
+ * `hexDigitCodePoint`), so no consumer has to rederive the `'0'`, `'a' - 10`
6
+ * and `'A' - 10` offsets for itself.
7
+ *
4
8
  * @module
9
+ *
10
+ * @import { Nullable } from '../../types/nullable/types.ts'
11
+ * @import { Range } from '../../types/range/types.ts'
5
12
  */
6
13
 
7
- /** @import { Range } from '../../types/range/types.ts' */
14
+ import { contains } from '../../types/range/module.f.mjs'
8
15
 
9
16
  /** @type {(s: string) => (i: number) => number} */
10
17
  const at = s => i => {
@@ -161,6 +168,9 @@ export const latinCapitalLetterE = one('E')
161
168
  /** 0x46 */
162
169
  export const latinCapitalLetterF = one('F')
163
170
 
171
+ /** 0x41..0x46, the uppercase hexadecimal digits. */
172
+ export const latinCapitalLetterAFRange = range('AF')
173
+
164
174
  /** 0x5B */
165
175
  export const leftSquareBracket = one('[')
166
176
 
@@ -196,6 +206,9 @@ export const latinSmallLetterE = one('e')
196
206
  /** 0x66 */
197
207
  export const latinSmallLetterF = one('f')
198
208
 
209
+ /** 0x61..0x66, the lowercase hexadecimal digits. */
210
+ export const latinSmallLetterAFRange = range('af')
211
+
199
212
  /** 0x6E */
200
213
  export const latinSmallLetterN = one('n')
201
214
 
@@ -222,3 +235,38 @@ export const rightCurlyBracket = one('}')
222
235
 
223
236
  /** 0x7E */
224
237
  export const tilde = one('~')
238
+
239
+ // hexadecimal digits
240
+
241
+ const isDigit = contains(...digitRange)
242
+
243
+ const isLatinSmallLetterAF = contains(...latinSmallLetterAFRange)
244
+
245
+ const isLatinCapitalLetterAF = contains(...latinCapitalLetterAFRange)
246
+
247
+ /** The distance from a lowercase hexadecimal letter to the value it denotes. */
248
+ const latinSmallLetterAFOffset = latinSmallLetterA - 10
249
+
250
+ /** The distance from an uppercase hexadecimal letter to the value it denotes. */
251
+ const latinCapitalLetterAFOffset = latinCapitalLetterA - 10
252
+
253
+ /**
254
+ * The value `0..15` denoted by a hexadecimal digit code point, or `null` when
255
+ * the code point is not one of `0-9`, `a-f`, `A-F`.
256
+ *
257
+ * @type {(codePoint: number) => Nullable<number>}
258
+ */
259
+ export const hexDigitValue = codePoint =>
260
+ isDigit(codePoint) ? codePoint - digit0
261
+ : isLatinSmallLetterAF(codePoint) ? codePoint - latinSmallLetterAFOffset
262
+ : isLatinCapitalLetterAF(codePoint) ? codePoint - latinCapitalLetterAFOffset
263
+ : null
264
+
265
+ /**
266
+ * The lowercase hexadecimal digit code point denoting a value in `0..15`.
267
+ * `hexDigitValue(hexDigitCodePoint(v))` is `v` for every such value.
268
+ *
269
+ * @type {(value: number) => number}
270
+ */
271
+ export const hexDigitCodePoint = value =>
272
+ value < 10 ? digit0 + value : latinSmallLetterAFOffset + value
@@ -1,5 +1,15 @@
1
1
  export declare const proof: {
2
2
  range: () => void;
3
+ hexDigitValue: {
4
+ digit: () => void;
5
+ latinSmallLetterAF: () => void;
6
+ latinCapitalLetterAF: () => void;
7
+ notAHexDigit: () => void;
8
+ };
9
+ hexDigitCodePoint: {
10
+ lowercaseDigits: () => void;
11
+ roundTrip: () => void;
12
+ };
3
13
  throw: {
4
14
  oneThrowsOnEmpty: () => number;
5
15
  };
@@ -1,15 +1,47 @@
1
- import { one, range } from './module.f.mjs'
1
+ import { hexDigitCodePoint, hexDigitValue, one, range } from './module.f.mjs'
2
2
  import { stringify as jsonStringify } from '../../media/json/module.f.mjs'
3
3
  import { sort } from '../../types/object/module.f.mjs'
4
4
  import { assertEq } from '../../asserts/module.f.mjs'
5
5
 
6
6
  const stringify = jsonStringify(sort)
7
7
 
8
+ const values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
9
+
8
10
  export const proof = {
9
11
  range: () => {
10
12
  const r = stringify(range("A"))
11
13
  assertEq(r, '[65,65]')
12
14
  },
15
+ hexDigitValue: {
16
+ digit: () => {
17
+ assertEq(hexDigitValue(one('0')), 0)
18
+ assertEq(hexDigitValue(one('9')), 9)
19
+ },
20
+ latinSmallLetterAF: () => {
21
+ assertEq(hexDigitValue(one('a')), 10)
22
+ assertEq(hexDigitValue(one('f')), 15)
23
+ },
24
+ latinCapitalLetterAF: () => {
25
+ assertEq(hexDigitValue(one('A')), 10)
26
+ assertEq(hexDigitValue(one('F')), 15)
27
+ },
28
+ notAHexDigit: () => {
29
+ assertEq(hexDigitValue(one('/')), null)
30
+ assertEq(hexDigitValue(one(':')), null)
31
+ assertEq(hexDigitValue(one('@')), null)
32
+ assertEq(hexDigitValue(one('G')), null)
33
+ assertEq(hexDigitValue(one('`')), null)
34
+ assertEq(hexDigitValue(one('g')), null)
35
+ },
36
+ },
37
+ hexDigitCodePoint: {
38
+ lowercaseDigits: () => {
39
+ assertEq(String.fromCodePoint(...values.map(v => hexDigitCodePoint(v))), '0123456789abcdef')
40
+ },
41
+ roundTrip: () => {
42
+ assertEq(stringify(values.map(v => hexDigitValue(hexDigitCodePoint(v)))), stringify(values))
43
+ },
44
+ },
13
45
  throw: {
14
46
  oneThrowsOnEmpty: () => one(''),
15
47
  },
@@ -2,11 +2,14 @@
2
2
  * Shared Unicode code-point contract for the UTF-8 and UTF-16 decoders: the
3
3
  * error-tag mask used to flag invalid sequences, the streaming `decoder`
4
4
  * factory that wraps a per-unit step and an end-of-input step into a single
5
- * `List`-to-`List` conversion, and the code-point classification predicates
6
- * (BMP / surrogate / supplementary-plane / overall validity) that both codecs
7
- * share.
5
+ * `List`-to-`List` conversion, the `eofFlush` factory that builds that
6
+ * end-of-input step, and the code-point classification predicates (BMP /
7
+ * surrogate / supplementary-plane / overall validity) that both codecs share.
8
8
  *
9
9
  * @module
10
+ *
11
+ * @import { List } from '../../types/list/types.ts'
12
+ * @import { StateScan } from '../../types/function/operator/types.ts'
10
13
  */
11
14
  import type { List } from '../../types/list/types.ts';
12
15
  import type { StateScan } from '../../types/function/operator/types.ts';
@@ -31,6 +34,21 @@ export declare const errorMask = 2147483648;
31
34
  * @returns {(input: List<Unit>) => List<Cp>} A function converting a list of code units into a list of code points.
32
35
  */
33
36
  export declare const decoder: <Unit, S, Cp>(byteOp: StateScan<Unit, S | null, List<Cp>>, eofOp: (state: S | null) => readonly [List<Cp>, S | null]) => (input: List<Unit>) => List<Cp>;
37
+ /**
38
+ * Builds the end-of-input step {@link decoder} needs, from the one function
39
+ * that differs between codecs.
40
+ *
41
+ * The flush contract is the same for every decoder: leftover state at the end
42
+ * of the input becomes **exactly one** error unit and the state resets to
43
+ * empty (`null`); with no leftover state nothing is emitted. Only the mapping
44
+ * from a non-empty state to its error unit is codec-specific.
45
+ *
46
+ * @template S
47
+ * @template Cp
48
+ * @param {(state: S) => Cp} toError - Turns a non-empty leftover state into a single error unit.
49
+ * @returns {(state: S | null) => readonly [List<Cp>, S | null]} The end-of-input step.
50
+ */
51
+ export declare const eofFlush: <S, Cp>(toError: (state: S) => Cp) => (state: S | null) => readonly [List<Cp>, S | null];
34
52
  /**
35
53
  * Checks whether the 16-bit word (U16) is a high surrogate.
36
54
  * Range: 0xD800 - 0xDBFF.
@@ -2,18 +2,17 @@
2
2
  * Shared Unicode code-point contract for the UTF-8 and UTF-16 decoders: the
3
3
  * error-tag mask used to flag invalid sequences, the streaming `decoder`
4
4
  * factory that wraps a per-unit step and an end-of-input step into a single
5
- * `List`-to-`List` conversion, and the code-point classification predicates
6
- * (BMP / surrogate / supplementary-plane / overall validity) that both codecs
7
- * share.
5
+ * `List`-to-`List` conversion, the `eofFlush` factory that builds that
6
+ * end-of-input step, and the code-point classification predicates (BMP /
7
+ * surrogate / supplementary-plane / overall validity) that both codecs share.
8
8
  *
9
9
  * @module
10
+ *
11
+ * @import { List } from '../../types/list/types.ts'
12
+ * @import { StateScan } from '../../types/function/operator/types.ts'
10
13
  */
11
14
 
12
- import { flat, stateScan } from '../../types/list/module.f.mjs'
13
- /** @import { List } from '../../types/list/types.ts' */
14
-
15
- /** @import { StateScan } from '../../types/function/operator/types.ts' */
16
-
15
+ import { empty, flat, stateScan } from '../../types/list/module.f.mjs'
17
16
  import { contains } from '../../types/range/module.f.mjs'
18
17
 
19
18
  //
@@ -50,6 +49,23 @@ export const decoder = (
50
49
  return input => flat(run(flat(/** @type {List<List<Unit|null>>} */([input, [null]]))))
51
50
  }
52
51
 
52
+ /**
53
+ * Builds the end-of-input step {@link decoder} needs, from the one function
54
+ * that differs between codecs.
55
+ *
56
+ * The flush contract is the same for every decoder: leftover state at the end
57
+ * of the input becomes **exactly one** error unit and the state resets to
58
+ * empty (`null`); with no leftover state nothing is emitted. Only the mapping
59
+ * from a non-empty state to its error unit is codec-specific.
60
+ *
61
+ * @template S
62
+ * @template Cp
63
+ * @param {(state: S) => Cp} toError - Turns a non-empty leftover state into a single error unit.
64
+ * @returns {(state: S | null) => readonly [List<Cp>, S | null]} The end-of-input step.
65
+ */
66
+ export const eofFlush = toError => state =>
67
+ [state === null ? empty : [toError(state)], null]
68
+
53
69
  /**
54
70
  * Unicode code-point classification boundaries. The surrogate block
55
71
  * (`0xD800`–`0xDFFF`) splits into a high half (`0xD800`–`0xDBFF`) and a low half
@@ -1,4 +1,5 @@
1
1
  export declare const proof: {
2
+ eofFlush: (() => void)[];
2
3
  isHighSurrogate: (() => void)[];
3
4
  isLowSurrogate: (() => void)[];
4
5
  isBmpCodePoint: (() => void)[];
@@ -1,4 +1,7 @@
1
+ import { assertEq } from '../../asserts/module.f.mjs'
2
+ import { toArray } from '../../types/list/module.f.mjs'
1
3
  import {
4
+ eofFlush,
2
5
  isBmpCodePoint,
3
6
  isHighSurrogate,
4
7
  isLowSurrogate,
@@ -12,7 +15,32 @@ const check = (actual, expected) => {
12
15
  if (actual !== expected) { throw `${actual} !== ${expected}` }
13
16
  }
14
17
 
18
+ /**
19
+ * A stand-in for a codec's state-to-error function.
20
+ *
21
+ * @type {(state: number) => number}
22
+ */
23
+ const negate = state => -state
24
+
25
+ const flush = eofFlush(negate)
26
+
15
27
  export const proof = {
28
+ eofFlush: [
29
+ // no leftover state: nothing is flushed, the state stays empty
30
+ () => {
31
+ const [out, next] = flush(null)
32
+ assertEq(toArray(out).length, 0)
33
+ assertEq(next, null)
34
+ },
35
+ // leftover state: exactly one error unit, then the state resets
36
+ () => {
37
+ const [out, next] = flush(42)
38
+ const [first, ...rest] = toArray(out)
39
+ assertEq(first, -42)
40
+ assertEq(rest.length, 0)
41
+ assertEq(next, null)
42
+ },
43
+ ],
16
44
  isHighSurrogate: [
17
45
  () => check(isHighSurrogate(0xd800), true),
18
46
  () => check(isHighSurrogate(0xdbff), true),