functionalscript 0.44.0 → 0.46.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 (571) hide show
  1. package/README.md +5 -3
  2. package/fjs/asn.1/module.f.mjs +8 -1
  3. package/fjs/asn.1/proof.f.d.mts +15 -0
  4. package/fjs/asn.1/proof.f.mjs +31 -3
  5. package/fjs/asserts/module.f.d.mts +14 -0
  6. package/fjs/asserts/module.f.mjs +20 -0
  7. package/fjs/asserts/proof.f.d.mts +3 -0
  8. package/fjs/asserts/proof.f.mjs +15 -1
  9. package/fjs/basen/base128/module.f.mjs +22 -5
  10. package/fjs/basen/base128/proof.f.d.mts +3 -1
  11. package/fjs/basen/base128/proof.f.mjs +3 -1
  12. package/fjs/basen/base64/module.f.mjs +7 -3
  13. package/fjs/basen/base64/proof.f.d.mts +3 -1
  14. package/fjs/basen/base64/proof.f.mjs +7 -4
  15. package/fjs/basen/cbase32/proof.f.d.mts +3 -1
  16. package/fjs/basen/cbase32/proof.f.mjs +3 -1
  17. package/fjs/bnf/data/module.f.d.mts +32 -6
  18. package/fjs/bnf/data/module.f.mjs +112 -7
  19. package/fjs/bnf/data/proof.f.d.mts +2 -0
  20. package/fjs/bnf/data/proof.f.mjs +74 -4
  21. package/fjs/bnf/data/types.d.ts +20 -2
  22. package/fjs/bnf/descent/module.f.d.mts +34 -5
  23. package/fjs/bnf/descent/module.f.mjs +176 -54
  24. package/fjs/bnf/descent/proof.f.d.mts +3 -0
  25. package/fjs/bnf/descent/proof.f.mjs +189 -27
  26. package/fjs/bnf/descent/types.d.ts +24 -18
  27. package/fjs/bnf/ll1/module.f.d.mts +74 -6
  28. package/fjs/bnf/ll1/module.f.mjs +297 -95
  29. package/fjs/bnf/ll1/proof.f.d.mts +17 -2
  30. package/fjs/bnf/ll1/proof.f.mjs +372 -137
  31. package/fjs/bnf/ll1/types.d.ts +25 -27
  32. package/fjs/bnf/matcher/module.f.d.mts +66 -0
  33. package/fjs/bnf/matcher/module.f.mjs +81 -0
  34. package/fjs/bnf/matcher/proof.f.d.mts +10 -0
  35. package/fjs/bnf/matcher/proof.f.mjs +79 -0
  36. package/fjs/bnf/matcher/types.d.ts +54 -0
  37. package/fjs/bnf/module.f.d.mts +15 -6
  38. package/fjs/bnf/module.f.mjs +52 -11
  39. package/fjs/bnf/proof.f.d.mts +2 -0
  40. package/fjs/bnf/proof.f.mjs +79 -3
  41. package/fjs/bnf/testlib.f.d.mts +31 -0
  42. package/fjs/bnf/testlib.f.mjs +80 -0
  43. package/fjs/bnf/token_symbol/module.f.d.mts +4 -3
  44. package/fjs/bnf/token_symbol/module.f.mjs +7 -6
  45. package/fjs/bnf/token_symbol/proof.f.mjs +5 -2
  46. package/fjs/bnf/token_symbol/types.d.ts +2 -2
  47. package/fjs/bnf/types.d.ts +10 -3
  48. package/fjs/cas/cli/module.f.d.mts +1 -1
  49. package/fjs/cas/cli/module.f.mjs +14 -20
  50. package/fjs/cas/cli/proof.f.d.mts +4 -4
  51. package/fjs/cas/cli/proof.f.mjs +47 -34
  52. package/fjs/cas/evo/module.f.d.mts +71 -31
  53. package/fjs/cas/evo/module.f.mjs +223 -138
  54. package/fjs/cas/evo/proof.f.d.mts +10 -1
  55. package/fjs/cas/evo/proof.f.mjs +311 -226
  56. package/fjs/cas/evo/types.d.ts +45 -9
  57. package/fjs/cas/module.f.d.mts +18 -32
  58. package/fjs/cas/module.f.mjs +164 -176
  59. package/fjs/cas/proof.f.d.mts +11 -8
  60. package/fjs/cas/proof.f.mjs +259 -147
  61. package/fjs/cas/types.d.ts +24 -10
  62. package/fjs/ci/common/module.f.d.mts +1 -1
  63. package/fjs/ci/common/module.f.mjs +1 -0
  64. package/fjs/ci/config/module.f.d.mts +3 -3
  65. package/fjs/ci/config/module.f.mjs +3 -3
  66. package/fjs/ci/module.f.d.mts +5 -5
  67. package/fjs/ci/module.f.mjs +8 -7
  68. package/fjs/ci/nix/module.f.d.mts +7 -5
  69. package/fjs/ci/nix/module.f.mjs +13 -12
  70. package/fjs/ci/nix/proof.f.d.mts +2 -0
  71. package/fjs/ci/nix/proof.f.mjs +4 -4
  72. package/fjs/ci/proof.f.d.mts +4 -2
  73. package/fjs/ci/proof.f.mjs +13 -8
  74. package/fjs/cli/module.f.d.mts +4 -6
  75. package/fjs/cli/module.f.mjs +4 -8
  76. package/fjs/cli/proof.f.d.mts +4 -2
  77. package/fjs/cli/proof.f.mjs +21 -18
  78. package/fjs/cli/types.d.ts +2 -3
  79. package/fjs/common/monoid/module.f.d.mts +70 -12
  80. package/fjs/common/monoid/module.f.mjs +177 -14
  81. package/fjs/common/monoid/proof.f.d.mts +12 -1
  82. package/fjs/common/monoid/proof.f.mjs +88 -4
  83. package/fjs/common/monoid/types.d.ts +23 -0
  84. package/fjs/crypto/hmac/module.f.mjs +2 -2
  85. package/fjs/crypto/secp/proof.f.d.mts +3 -1
  86. package/fjs/crypto/secp/proof.f.mjs +3 -1
  87. package/fjs/crypto/sha2/module.f.mjs +3 -1
  88. package/fjs/crypto/sha2/proof.f.d.mts +4 -1
  89. package/fjs/crypto/sha2/proof.f.mjs +27 -1
  90. package/fjs/crypto/sha2/types.d.ts +11 -0
  91. package/fjs/crypto/sign/module.f.mjs +2 -2
  92. package/fjs/crypto/vdf/module.f.d.mts +23 -4
  93. package/fjs/crypto/vdf/module.f.mjs +6 -4
  94. package/fjs/dev/module.f.d.mts +17 -5
  95. package/fjs/dev/module.f.mjs +60 -30
  96. package/fjs/dev/update/module.f.d.mts +11 -3
  97. package/fjs/dev/update/module.f.mjs +16 -11
  98. package/fjs/dev/update/proof.f.d.mts +4 -3
  99. package/fjs/dev/update/proof.f.mjs +11 -7
  100. package/fjs/djs/module.f.d.mts +13 -5
  101. package/fjs/djs/module.f.mjs +31 -16
  102. package/fjs/djs/parser/module.f.d.mts +16 -3
  103. package/fjs/djs/parser/module.f.mjs +135 -16
  104. package/fjs/djs/parser/proof.f.d.mts +8 -1
  105. package/fjs/djs/parser/proof.f.mjs +287 -13
  106. package/fjs/djs/parser/types.d.ts +7 -1
  107. package/fjs/djs/proof.f.d.mts +20 -1
  108. package/fjs/djs/proof.f.mjs +190 -12
  109. package/fjs/djs/serializer/module.f.d.mts +25 -8
  110. package/fjs/djs/serializer/module.f.mjs +66 -19
  111. package/fjs/djs/serializer/proof.f.d.mts +5 -0
  112. package/fjs/djs/serializer/proof.f.mjs +23 -1
  113. package/fjs/djs/tokenizer/module.f.d.mts +17 -5
  114. package/fjs/djs/tokenizer/module.f.mjs +120 -73
  115. package/fjs/djs/tokenizer/proof.f.d.mts +3 -0
  116. package/fjs/djs/tokenizer/proof.f.mjs +86 -67
  117. package/fjs/djs/transpiler/module.f.d.mts +13 -19
  118. package/fjs/djs/transpiler/module.f.mjs +79 -72
  119. package/fjs/djs/transpiler/types.d.ts +29 -0
  120. package/fjs/djs/types.d.ts +7 -1
  121. package/fjs/effects/list/module.f.d.mts +23 -12
  122. package/fjs/effects/list/module.f.mjs +16 -12
  123. package/fjs/effects/list/types.d.ts +27 -7
  124. package/fjs/effects/memory/module.f.d.mts +6 -3
  125. package/fjs/effects/memory/module.f.mjs +7 -7
  126. package/fjs/effects/memory/proof.f.d.mts +4 -0
  127. package/fjs/effects/memory/proof.f.mjs +18 -9
  128. package/fjs/effects/memory/types.d.ts +4 -3
  129. package/fjs/effects/mock/module.f.d.mts +28 -4
  130. package/fjs/effects/mock/module.f.mjs +39 -5
  131. package/fjs/effects/mock/types.d.ts +10 -1
  132. package/fjs/effects/module.d.mts +12 -2
  133. package/fjs/effects/module.f.d.mts +469 -281
  134. package/fjs/effects/module.f.mjs +538 -299
  135. package/fjs/effects/module.mjs +11 -2
  136. package/fjs/effects/node/memory/module.d.mts +7 -2
  137. package/fjs/effects/node/memory/module.mjs +9 -5
  138. package/fjs/effects/node/memory/proof.d.mts +2 -0
  139. package/fjs/effects/node/memory/proof.mjs +12 -5
  140. package/fjs/effects/node/module.d.mts +8 -2
  141. package/fjs/effects/node/module.f.d.mts +183 -43
  142. package/fjs/effects/node/module.f.mjs +260 -62
  143. package/fjs/effects/node/module.mjs +61 -50
  144. package/fjs/effects/node/proof.f.d.mts +28 -2
  145. package/fjs/effects/node/proof.f.mjs +161 -42
  146. package/fjs/effects/node/types.d.ts +106 -18
  147. package/fjs/effects/node/virtual/module.f.d.mts +21 -4
  148. package/fjs/effects/node/virtual/module.f.mjs +113 -70
  149. package/fjs/effects/node/virtual/proof.f.d.mts +31 -2
  150. package/fjs/effects/node/virtual/proof.f.mjs +201 -8
  151. package/fjs/effects/proof.f.d.mts +69 -34
  152. package/fjs/effects/proof.f.mjs +413 -130
  153. package/fjs/effects/types.d.ts +161 -33
  154. package/fjs/emergent_testing/all.test.d.mts +8 -0
  155. package/fjs/emergent_testing/all.test.mjs +14 -0
  156. package/fjs/emergent_testing/module.f.d.mts +22 -10
  157. package/fjs/emergent_testing/module.f.mjs +119 -85
  158. package/fjs/emergent_testing/proof.f.d.mts +21 -7
  159. package/fjs/emergent_testing/proof.f.mjs +169 -35
  160. package/fjs/emergent_testing/types.d.ts +22 -4
  161. package/fjs/fsc/bnf.f.d.mts +3 -0
  162. package/fjs/fsc/bnf.f.mjs +4 -1
  163. package/fjs/fsc/json.f.d.mts +3 -0
  164. package/fjs/fsc/json.f.mjs +4 -1
  165. package/fjs/fsc/module.f.d.mts +9 -0
  166. package/fjs/fsc/module.f.mjs +5 -3
  167. package/fjs/fsm/module.f.d.mts +14 -4
  168. package/fjs/fsm/module.f.mjs +54 -37
  169. package/fjs/fsm/proof.f.d.mts +5 -0
  170. package/fjs/fsm/proof.f.mjs +87 -115
  171. package/fjs/js/keywords/module.f.d.mts +52 -0
  172. package/fjs/js/keywords/module.f.mjs +72 -0
  173. package/fjs/{emergent_testing/scenarios/return-value.pass.d.ts → js/keywords/proof.f.d.mts} +1 -1
  174. package/fjs/js/keywords/proof.f.mjs +13 -0
  175. package/fjs/js/tokenizer/module.f.d.mts +30 -3
  176. package/fjs/js/tokenizer/module.f.mjs +161 -211
  177. package/fjs/js/tokenizer/proof.f.d.mts +1 -0
  178. package/fjs/js/tokenizer/proof.f.mjs +54 -24
  179. package/fjs/js/tokenizer/types.d.ts +33 -24
  180. package/fjs/mcp/cas/module.f.d.mts +1 -6
  181. package/fjs/mcp/cas/module.f.mjs +55 -51
  182. package/fjs/mcp/cas/proof.f.d.mts +15 -0
  183. package/fjs/mcp/cas/proof.f.mjs +174 -0
  184. package/fjs/mcp/evo/module.f.d.mts +19 -10
  185. package/fjs/mcp/evo/module.f.mjs +48 -27
  186. package/fjs/mcp/evo/proof.f.d.mts +6 -1
  187. package/fjs/mcp/evo/proof.f.mjs +115 -31
  188. package/fjs/mcp/module.f.d.mts +39 -4
  189. package/fjs/mcp/module.f.mjs +14 -12
  190. package/fjs/mcp/proof.f.d.mts +13 -1
  191. package/fjs/mcp/proof.f.mjs +120 -61
  192. package/fjs/media/html/module.f.d.mts +12 -0
  193. package/fjs/media/html/module.f.mjs +7 -5
  194. package/fjs/media/html/proof.f.d.mts +3 -0
  195. package/fjs/media/html/proof.f.mjs +4 -1
  196. package/fjs/media/json/extended/module.f.d.mts +82 -0
  197. package/fjs/media/json/extended/module.f.mjs +153 -0
  198. package/fjs/media/json/extended/proof.f.d.mts +42 -0
  199. package/fjs/media/json/extended/proof.f.mjs +127 -0
  200. package/fjs/media/json/extended/types.d.ts +23 -0
  201. package/fjs/media/json/module.f.d.mts +8 -2
  202. package/fjs/media/json/module.f.mjs +43 -41
  203. package/fjs/media/json/number/module.f.d.mts +59 -0
  204. package/fjs/media/json/number/module.f.mjs +136 -0
  205. package/fjs/media/json/number/proof.f.d.mts +24 -0
  206. package/fjs/media/json/number/proof.f.mjs +86 -0
  207. package/fjs/media/json/number/types.d.ts +28 -0
  208. package/fjs/media/json/parser/module.f.d.mts +25 -13
  209. package/fjs/media/json/parser/module.f.mjs +133 -72
  210. package/fjs/media/json/parser/proof.f.d.mts +5 -0
  211. package/fjs/media/json/parser/proof.f.mjs +31 -1
  212. package/fjs/media/json/parser/types.d.ts +38 -14
  213. package/fjs/media/json/rtti/module.f.d.mts +1 -1
  214. package/fjs/media/json/rtti/module.f.mjs +1 -1
  215. package/fjs/media/json/rtti/proof.f.d.mts +3 -0
  216. package/fjs/media/json/rtti/proof.f.mjs +12 -12
  217. package/fjs/media/json/schema/module.f.d.mts +61 -27
  218. package/fjs/media/json/schema/module.f.mjs +218 -63
  219. package/fjs/media/json/schema/proof.f.d.mts +41 -1
  220. package/fjs/media/json/schema/proof.f.mjs +220 -9
  221. package/fjs/media/json/serializer/module.f.d.mts +44 -0
  222. package/fjs/media/json/serializer/module.f.mjs +71 -9
  223. package/fjs/media/json/tokenizer/module.f.d.mts +8 -0
  224. package/fjs/media/json/tokenizer/module.f.mjs +31 -8
  225. package/fjs/media/json/tokenizer/proof.f.d.mts +6 -0
  226. package/fjs/media/json/tokenizer/proof.f.mjs +62 -21
  227. package/fjs/media/json/types.d.ts +36 -10
  228. package/fjs/media/lock/module.f.d.mts +100 -0
  229. package/fjs/media/lock/module.f.mjs +125 -0
  230. package/fjs/media/lock/proof.f.d.mts +33 -0
  231. package/fjs/media/lock/proof.f.mjs +196 -0
  232. package/fjs/media/lock/types.d.ts +15 -0
  233. package/fjs/media/module.f.d.mts +6 -5
  234. package/fjs/media/module.f.mjs +8 -7
  235. package/fjs/media/nix/module.f.d.mts +13 -0
  236. package/fjs/media/nix/module.f.mjs +4 -2
  237. package/fjs/media/nix/proof.f.d.mts +3 -0
  238. package/fjs/media/nix/proof.f.mjs +4 -1
  239. package/fjs/media/note/module.f.d.mts +121 -0
  240. package/fjs/media/note/module.f.mjs +131 -0
  241. package/fjs/media/note/proof.f.d.mts +29 -0
  242. package/fjs/media/note/proof.f.mjs +150 -0
  243. package/fjs/media/note/types.d.ts +10 -0
  244. package/fjs/media/proof.f.d.mts +4 -1
  245. package/fjs/media/proof.f.mjs +40 -21
  246. package/fjs/media/revision/module.f.d.mts +83 -7
  247. package/fjs/media/revision/module.f.mjs +127 -23
  248. package/fjs/media/revision/proof.f.d.mts +14 -0
  249. package/fjs/media/revision/proof.f.mjs +93 -2
  250. package/fjs/media/revision/types.d.ts +34 -5
  251. package/fjs/media/type/module.f.d.mts +53 -18
  252. package/fjs/media/type/module.f.mjs +87 -97
  253. package/fjs/media/type/proof.f.d.mts +17 -0
  254. package/fjs/media/type/proof.f.mjs +73 -13
  255. package/fjs/module.d.mts +5 -0
  256. package/fjs/module.f.d.mts +8 -0
  257. package/fjs/module.f.mjs +33 -10
  258. package/fjs/module.mjs +6 -0
  259. package/fjs/nanvm/proof.f.mjs +3 -3
  260. package/fjs/nanvm/rust/module.f.mjs +1 -1
  261. package/fjs/nanvm/update/module.f.d.mts +4 -4
  262. package/fjs/nanvm/update/module.f.mjs +8 -9
  263. package/fjs/nanvm/update/proof.f.mjs +4 -3
  264. package/fjs/path/module.f.d.mts +8 -0
  265. package/fjs/path/module.f.mjs +4 -2
  266. package/fjs/proof.f.d.mts +7 -3
  267. package/fjs/proof.f.mjs +41 -12
  268. package/fjs/protocol/json_rpc/module.f.d.mts +3 -3
  269. package/fjs/protocol/json_rpc/module.f.mjs +10 -7
  270. package/fjs/protocol/json_rpc/proof.f.d.mts +6 -0
  271. package/fjs/protocol/json_rpc/proof.f.mjs +26 -5
  272. package/fjs/protocol/mcp/module.f.d.mts +10 -13
  273. package/fjs/protocol/mcp/module.f.mjs +74 -58
  274. package/fjs/protocol/mcp/proof.f.d.mts +16 -3
  275. package/fjs/protocol/mcp/proof.f.mjs +224 -69
  276. package/fjs/protocol/mcp/stdio/module.f.d.mts +17 -11
  277. package/fjs/protocol/mcp/stdio/module.f.mjs +39 -33
  278. package/fjs/protocol/mcp/stdio/proof.f.d.mts +5 -3
  279. package/fjs/protocol/mcp/stdio/proof.f.mjs +46 -13
  280. package/fjs/protocol/mcp/stdio/types.d.ts +14 -0
  281. package/fjs/protocol/mcp/types.d.ts +17 -6
  282. package/fjs/sul/id/module.f.d.mts +4 -0
  283. package/fjs/sul/id/module.f.mjs +6 -6
  284. package/fjs/sul/level/hash/module.f.d.mts +4 -1
  285. package/fjs/sul/level/hash/module.f.mjs +6 -4
  286. package/fjs/sul/level/hash/proof.f.d.mts +4 -0
  287. package/fjs/sul/level/hash/proof.f.mjs +7 -4
  288. package/fjs/sul/level/literal/module.f.d.mts +4 -1
  289. package/fjs/sul/level/literal/module.f.mjs +4 -3
  290. package/fjs/sul/level/literal/proof.f.d.mts +3 -0
  291. package/fjs/sul/level/literal/proof.f.mjs +4 -1
  292. package/fjs/sul/module.f.d.mts +5 -3
  293. package/fjs/sul/module.f.mjs +23 -17
  294. package/fjs/sul/proof.f.d.mts +4 -0
  295. package/fjs/sul/proof.f.mjs +5 -2
  296. package/fjs/text/ascii/module.f.d.mts +26 -0
  297. package/fjs/text/ascii/module.f.mjs +49 -1
  298. package/fjs/text/ascii/proof.f.d.mts +10 -0
  299. package/fjs/text/ascii/proof.f.mjs +33 -1
  300. package/fjs/text/code_point/module.f.d.mts +29 -3
  301. package/fjs/text/code_point/module.f.mjs +32 -9
  302. package/fjs/text/code_point/proof.f.d.mts +2 -0
  303. package/fjs/text/code_point/proof.f.mjs +39 -0
  304. package/fjs/text/module.f.d.mts +4 -2
  305. package/fjs/text/module.f.mjs +4 -3
  306. package/fjs/text/proof.f.d.mts +3 -0
  307. package/fjs/text/proof.f.mjs +4 -1
  308. package/fjs/text/sgr/module.f.d.mts +6 -5
  309. package/fjs/text/sgr/module.f.mjs +8 -8
  310. package/fjs/text/sgr/proof.f.d.mts +3 -0
  311. package/fjs/text/sgr/proof.f.mjs +4 -1
  312. package/fjs/text/utf16/module.f.d.mts +5 -1
  313. package/fjs/text/utf16/module.f.mjs +38 -35
  314. package/fjs/text/utf16/proof.f.d.mts +3 -1
  315. package/fjs/text/utf16/proof.f.mjs +19 -2
  316. package/fjs/text/utf8/module.f.d.mts +9 -5
  317. package/fjs/text/utf8/module.f.mjs +20 -20
  318. package/fjs/types/array/module.f.d.mts +2 -1
  319. package/fjs/types/array/module.f.mjs +16 -4
  320. package/fjs/types/bigfloat/module.f.d.mts +21 -1
  321. package/fjs/types/bigfloat/module.f.mjs +33 -7
  322. package/fjs/types/bigfloat/proof.f.d.mts +1 -0
  323. package/fjs/types/bigfloat/proof.f.mjs +46 -0
  324. package/fjs/types/bigint/module.f.d.mts +4 -0
  325. package/fjs/types/bigint/module.f.mjs +4 -3
  326. package/fjs/types/bit_vec/module.f.d.mts +10 -16
  327. package/fjs/types/bit_vec/module.f.mjs +99 -95
  328. package/fjs/types/bit_vec/proof.f.d.mts +6 -0
  329. package/fjs/types/bit_vec/proof.f.mjs +31 -5
  330. package/fjs/types/btree/find/module.f.d.mts +5 -1
  331. package/fjs/types/btree/find/module.f.mjs +5 -5
  332. package/fjs/types/btree/find/proof.f.d.mts +5 -1
  333. package/fjs/types/btree/find/proof.f.mjs +5 -3
  334. package/fjs/types/btree/module.f.d.mts +3 -0
  335. package/fjs/types/btree/module.f.mjs +3 -2
  336. package/fjs/types/btree/proof.f.d.mts +5 -1
  337. package/fjs/types/btree/proof.f.mjs +5 -3
  338. package/fjs/types/btree/remove/module.f.d.mts +11 -0
  339. package/fjs/types/btree/remove/module.f.mjs +10 -10
  340. package/fjs/types/btree/remove/proof.f.d.mts +3 -0
  341. package/fjs/types/btree/remove/proof.f.mjs +4 -1
  342. package/fjs/types/btree/set/module.f.d.mts +9 -0
  343. package/fjs/types/btree/set/module.f.mjs +14 -17
  344. package/fjs/types/btree/set/proof.f.d.mts +3 -0
  345. package/fjs/types/btree/set/proof.f.mjs +16 -1
  346. package/fjs/types/btree/types/module.f.d.mts +2 -1
  347. package/fjs/types/btree/types/module.f.mjs +2 -1
  348. package/fjs/types/byte_set/module.f.d.mts +20 -4
  349. package/fjs/types/byte_set/module.f.mjs +18 -8
  350. package/fjs/types/byte_set/proof.f.d.mts +3 -1
  351. package/fjs/types/byte_set/proof.f.mjs +10 -8
  352. package/fjs/types/function/compare/module.f.d.mts +3 -2
  353. package/fjs/types/function/compare/module.f.mjs +13 -5
  354. package/fjs/types/function/module.f.d.mts +8 -1
  355. package/fjs/types/function/module.f.mjs +8 -1
  356. package/fjs/types/function/operator/module.f.d.mts +2 -1
  357. package/fjs/types/function/operator/module.f.mjs +2 -2
  358. package/fjs/types/list/module.f.d.mts +10 -3
  359. package/fjs/types/list/module.f.mjs +6 -4
  360. package/fjs/types/list/proof.f.d.mts +4 -1
  361. package/fjs/types/list/proof.f.mjs +4 -2
  362. package/fjs/types/nibble_set/module.f.d.mts +2 -1
  363. package/fjs/types/nibble_set/module.f.mjs +2 -2
  364. package/fjs/types/nominal/module.f.d.mts +2 -1
  365. package/fjs/types/nominal/module.f.mjs +2 -1
  366. package/fjs/types/nullable/module.f.d.mts +26 -6
  367. package/fjs/types/nullable/module.f.mjs +25 -6
  368. package/fjs/types/nullable/proof.f.d.mts +4 -0
  369. package/fjs/types/nullable/proof.f.mjs +15 -0
  370. package/fjs/types/number/module.f.d.mts +4 -0
  371. package/fjs/types/number/module.f.mjs +4 -3
  372. package/fjs/types/object/module.f.d.mts +26 -4
  373. package/fjs/types/object/module.f.mjs +26 -7
  374. package/fjs/types/object/proof.f.d.mts +5 -2
  375. package/fjs/types/object/proof.f.mjs +6 -3
  376. package/fjs/types/object/structurally_same/module.f.d.mts +39 -0
  377. package/fjs/types/object/structurally_same/module.f.mjs +59 -0
  378. package/fjs/types/object/structurally_same/proof.f.d.mts +6 -0
  379. package/fjs/types/object/structurally_same/proof.f.mjs +73 -0
  380. package/fjs/types/ordered_map/module.f.d.mts +5 -0
  381. package/fjs/types/ordered_map/module.f.mjs +5 -4
  382. package/fjs/types/ordered_map/proof.f.d.mts +3 -0
  383. package/fjs/types/ordered_map/proof.f.mjs +4 -1
  384. package/fjs/types/patricia_trie/module.f.d.mts +2 -1
  385. package/fjs/types/patricia_trie/module.f.mjs +27 -12
  386. package/fjs/types/patricia_trie/proof.f.d.mts +3 -0
  387. package/fjs/types/patricia_trie/proof.f.mjs +4 -1
  388. package/fjs/types/prime_field/module.f.d.mts +3 -1
  389. package/fjs/types/prime_field/module.f.mjs +3 -2
  390. package/fjs/types/range/module.f.d.mts +2 -1
  391. package/fjs/types/range/module.f.mjs +2 -2
  392. package/fjs/types/range_map/module.f.d.mts +6 -0
  393. package/fjs/types/range_map/module.f.mjs +6 -9
  394. package/fjs/types/range_map/proof.f.d.mts +5 -1
  395. package/fjs/types/range_map/proof.f.mjs +5 -3
  396. package/fjs/types/range_set/module.f.d.mts +5 -0
  397. package/fjs/types/range_set/module.f.mjs +1 -0
  398. package/fjs/types/range_set/proof.f.d.mts +3 -0
  399. package/fjs/types/range_set/proof.f.mjs +4 -1
  400. package/fjs/types/result/module.d.mts +8 -0
  401. package/fjs/types/result/module.f.d.mts +37 -7
  402. package/fjs/types/result/module.f.mjs +38 -8
  403. package/fjs/types/result/module.mjs +9 -1
  404. package/fjs/types/result/proof.f.d.mts +5 -0
  405. package/fjs/types/result/proof.f.mjs +22 -2
  406. package/fjs/types/rtti/common/module.f.d.mts +44 -14
  407. package/fjs/types/rtti/common/module.f.mjs +42 -36
  408. package/fjs/types/rtti/common/proof.f.d.mts +4 -0
  409. package/fjs/types/rtti/common/proof.f.mjs +10 -7
  410. package/fjs/types/rtti/data/module.f.d.mts +134 -0
  411. package/fjs/types/rtti/data/module.f.mjs +1053 -0
  412. package/fjs/types/rtti/data/proof.f.d.mts +76 -0
  413. package/fjs/types/rtti/data/proof.f.mjs +589 -0
  414. package/fjs/types/rtti/data/types.d.ts +83 -0
  415. package/fjs/types/rtti/module.f.d.mts +12 -5
  416. package/fjs/types/rtti/module.f.mjs +7 -5
  417. package/fjs/types/rtti/parse/module.f.d.mts +48 -0
  418. package/fjs/types/rtti/parse/module.f.mjs +45 -34
  419. package/fjs/types/rtti/parse/proof.f.d.mts +3 -2
  420. package/fjs/types/rtti/parse/proof.f.mjs +51 -52
  421. package/fjs/types/rtti/proof.f.d.mts +3 -1
  422. package/fjs/types/rtti/proof.f.mjs +6 -2
  423. package/fjs/types/rtti/ts/module.f.d.mts +68 -9
  424. package/fjs/types/rtti/ts/module.f.mjs +258 -30
  425. package/fjs/types/rtti/ts/proof.f.d.mts +44 -0
  426. package/fjs/types/rtti/ts/proof.f.mjs +152 -4
  427. package/fjs/types/rtti/ts/types.d.ts +25 -1
  428. package/fjs/types/rtti/types.d.ts +40 -0
  429. package/fjs/types/sorted_list/module.f.d.mts +4 -1
  430. package/fjs/types/sorted_list/module.f.mjs +21 -12
  431. package/fjs/types/sorted_list/proof.f.d.mts +3 -1
  432. package/fjs/types/sorted_list/proof.f.mjs +3 -1
  433. package/fjs/types/sorted_set/module.f.d.mts +49 -1
  434. package/fjs/types/sorted_set/module.f.mjs +26 -2
  435. package/fjs/types/sorted_set/proof.f.d.mts +4 -1
  436. package/fjs/types/sorted_set/proof.f.mjs +19 -2
  437. package/fjs/types/string/module.f.d.mts +4 -0
  438. package/fjs/types/string/module.f.mjs +4 -3
  439. package/fjs/types/string_set/module.f.d.mts +3 -1
  440. package/fjs/types/string_set/module.f.mjs +3 -2
  441. package/fjs/types/ts/module.f.d.mts +2 -0
  442. package/fjs/types/ts/module.f.mjs +3 -3
  443. package/fjs/types/ts/proof.f.d.mts +1 -0
  444. package/fjs/types/ts/proof.f.mjs +5 -0
  445. package/fjs/types/ts/types.d.ts +6 -1
  446. package/fjs/types/uint8array/module.f.d.mts +13 -2
  447. package/fjs/types/uint8array/module.f.mjs +20 -15
  448. package/fjs/website/module.f.d.mts +5 -2
  449. package/fjs/website/module.f.mjs +6 -8
  450. package/fjs/website/proof.f.mjs +2 -1
  451. package/package.json +3 -3
  452. package/fjs/asn.1/types.js +0 -6
  453. package/fjs/asserts/types.js +0 -6
  454. package/fjs/basen/types.js +0 -6
  455. package/fjs/bnf/data/types.js +0 -6
  456. package/fjs/bnf/descent/types.js +0 -6
  457. package/fjs/bnf/ll1/types.js +0 -6
  458. package/fjs/bnf/token_symbol/types.js +0 -6
  459. package/fjs/bnf/types.js +0 -6
  460. package/fjs/cas/evo/types.js +0 -7
  461. package/fjs/cas/types.js +0 -6
  462. package/fjs/ci/common/types.js +0 -1
  463. package/fjs/ci/nix/types.js +0 -6
  464. package/fjs/ci/types.js +0 -6
  465. package/fjs/cli/types.js +0 -6
  466. package/fjs/common/monoid/types.js +0 -6
  467. package/fjs/crypto/pow/types.js +0 -6
  468. package/fjs/crypto/secp/types.js +0 -6
  469. package/fjs/crypto/sha2/types.js +0 -6
  470. package/fjs/crypto/sign/types.js +0 -6
  471. package/fjs/crypto/vdf/types.js +0 -6
  472. package/fjs/dev/package_json/module.f.d.mts +0 -32
  473. package/fjs/dev/package_json/module.f.mjs +0 -37
  474. package/fjs/dev/package_json/proof.f.d.mts +0 -6
  475. package/fjs/dev/package_json/proof.f.mjs +0 -32
  476. package/fjs/dev/types.js +0 -6
  477. package/fjs/djs/ast/types.js +0 -8
  478. package/fjs/djs/parser/types.js +0 -7
  479. package/fjs/djs/tokenizer/types.js +0 -7
  480. package/fjs/djs/types.js +0 -7
  481. package/fjs/effects/eff/module.f.d.mts +0 -10
  482. package/fjs/effects/eff/module.f.mjs +0 -68
  483. package/fjs/effects/eff/proof.f.d.mts +0 -12
  484. package/fjs/effects/eff/proof.f.mjs +0 -66
  485. package/fjs/effects/eff/types.d.ts +0 -71
  486. package/fjs/effects/eff/types.js +0 -6
  487. package/fjs/effects/list/types.js +0 -6
  488. package/fjs/effects/memory/types.js +0 -6
  489. package/fjs/effects/mock/types.js +0 -6
  490. package/fjs/effects/node/types.js +0 -6
  491. package/fjs/effects/node/virtual/types.js +0 -7
  492. package/fjs/effects/types.js +0 -6
  493. package/fjs/emergent_testing/all.test.d.ts +0 -1
  494. package/fjs/emergent_testing/all.test.js +0 -5
  495. package/fjs/emergent_testing/scenarios/all.d.ts +0 -1
  496. package/fjs/emergent_testing/scenarios/all.js +0 -1
  497. package/fjs/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -6
  498. package/fjs/emergent_testing/scenarios/async-subtests.fail.js +0 -9
  499. package/fjs/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -6
  500. package/fjs/emergent_testing/scenarios/async-subtests.pass.js +0 -9
  501. package/fjs/emergent_testing/scenarios/async.fail.d.ts +0 -3
  502. package/fjs/emergent_testing/scenarios/async.fail.js +0 -6
  503. package/fjs/emergent_testing/scenarios/async.pass.d.ts +0 -3
  504. package/fjs/emergent_testing/scenarios/async.pass.js +0 -5
  505. package/fjs/emergent_testing/scenarios/fail.fail.d.ts +0 -3
  506. package/fjs/emergent_testing/scenarios/fail.fail.js +0 -3
  507. package/fjs/emergent_testing/scenarios/return-value.pass.js +0 -4
  508. package/fjs/emergent_testing/scenarios/thenable.pass.d.ts +0 -5
  509. package/fjs/emergent_testing/scenarios/thenable.pass.js +0 -11
  510. package/fjs/emergent_testing/scenarios/thenable2.pass.d.ts +0 -5
  511. package/fjs/emergent_testing/scenarios/thenable2.pass.js +0 -3
  512. package/fjs/emergent_testing/scenarios/throw.pass.d.ts +0 -5
  513. package/fjs/emergent_testing/scenarios/throw.pass.js +0 -3
  514. package/fjs/emergent_testing/types.js +0 -6
  515. package/fjs/js/tokenizer/types.js +0 -6
  516. package/fjs/media/html/types.js +0 -6
  517. package/fjs/media/json/parser/types.js +0 -6
  518. package/fjs/media/json/tokenizer/types.js +0 -6
  519. package/fjs/media/json/types.js +0 -13
  520. package/fjs/media/nix/types.js +0 -6
  521. package/fjs/media/revision/types.js +0 -8
  522. package/fjs/media/type/types.js +0 -6
  523. package/fjs/media/types.js +0 -7
  524. package/fjs/nanvm/types.js +0 -11
  525. package/fjs/protocol/json_rpc/types.js +0 -8
  526. package/fjs/protocol/mcp/types.js +0 -8
  527. package/fjs/sul/id/types.js +0 -6
  528. package/fjs/sul/level/hash/types.js +0 -6
  529. package/fjs/sul/level/literal/types.js +0 -6
  530. package/fjs/sul/types.js +0 -6
  531. package/fjs/text/sgr/types.js +0 -6
  532. package/fjs/text/types.js +0 -6
  533. package/fjs/text/utf16/types.js +0 -6
  534. package/fjs/text/utf8/types.js +0 -6
  535. package/fjs/types/array/types.js +0 -6
  536. package/fjs/types/bigfloat/types.js +0 -6
  537. package/fjs/types/bigint/types.js +0 -6
  538. package/fjs/types/bit_vec/types.js +0 -6
  539. package/fjs/types/btree/find/types.js +0 -6
  540. package/fjs/types/btree/types/types.js +0 -6
  541. package/fjs/types/byte_set/types.js +0 -6
  542. package/fjs/types/function/compare/types.js +0 -6
  543. package/fjs/types/function/operator/types.js +0 -6
  544. package/fjs/types/function/types.js +0 -6
  545. package/fjs/types/list/types.js +0 -6
  546. package/fjs/types/nibble_set/types.js +0 -6
  547. package/fjs/types/nominal/types.js +0 -6
  548. package/fjs/types/nullable/types.js +0 -6
  549. package/fjs/types/object/types.js +0 -8
  550. package/fjs/types/option/types.js +0 -6
  551. package/fjs/types/ordered_map/types.js +0 -6
  552. package/fjs/types/patricia_trie/types.js +0 -6
  553. package/fjs/types/phantom/types.js +0 -11
  554. package/fjs/types/prime_field/types.js +0 -6
  555. package/fjs/types/range/types.js +0 -6
  556. package/fjs/types/range_map/types.js +0 -6
  557. package/fjs/types/result/types.js +0 -6
  558. package/fjs/types/rtti/common/types.js +0 -1
  559. package/fjs/types/rtti/parse/types.js +0 -1
  560. package/fjs/types/rtti/ts/types.js +0 -1
  561. package/fjs/types/rtti/types.js +0 -1
  562. package/fjs/types/rtti/validate/module.f.d.mts +0 -6
  563. package/fjs/types/rtti/validate/module.f.mjs +0 -169
  564. package/fjs/types/rtti/validate/proof.f.d.mts +0 -125
  565. package/fjs/types/rtti/validate/proof.f.mjs +0 -437
  566. package/fjs/types/rtti/validate/types.d.ts +0 -6
  567. package/fjs/types/rtti/validate/types.js +0 -1
  568. package/fjs/types/sorted_list/types.js +0 -6
  569. package/fjs/types/sorted_set/types.js +0 -6
  570. package/fjs/types/string_set/types.js +0 -6
  571. package/fjs/types/ts/types.js +0 -8
@@ -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,29 @@ 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];
52
+ /**
53
+ * The last code point of the Basic Multilingual Plane. Exported because the
54
+ * UTF-8 encoder needs the boundary itself — its 3-byte form covers the BMP up
55
+ * to here — where the predicates below only answer membership. `maxCodePoint`
56
+ * stays private: `isSupplementaryPlane` already expresses the one range a
57
+ * caller has wanted it for.
58
+ */
59
+ export declare const bmpMax = /** @type {const} */ 65535;
34
60
  /**
35
61
  * Checks whether the 16-bit word (U16) is a high surrogate.
36
62
  * 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
@@ -60,7 +76,14 @@ export const decoder = (
60
76
  const surrogateMin = /** @type {const} */ 0xd800
61
77
  const lowSurrogateMin = /** @type {const} */ 0xdc00
62
78
  const surrogateMax = /** @type {const} */ 0xdfff
63
- const bmpMax = /** @type {const} */ 0xffff
79
+ /**
80
+ * The last code point of the Basic Multilingual Plane. Exported because the
81
+ * UTF-8 encoder needs the boundary itself — its 3-byte form covers the BMP up
82
+ * to here — where the predicates below only answer membership. `maxCodePoint`
83
+ * stays private: `isSupplementaryPlane` already expresses the one range a
84
+ * caller has wanted it for.
85
+ */
86
+ export const bmpMax = /** @type {const} */ 0xffff
64
87
  const maxCodePoint = /** @type {const} */ 0x10_ffff
65
88
 
66
89
  /**
@@ -1,7 +1,9 @@
1
1
  export declare const proof: {
2
+ eofFlush: (() => void)[];
2
3
  isHighSurrogate: (() => void)[];
3
4
  isLowSurrogate: (() => void)[];
4
5
  isBmpCodePoint: (() => void)[];
6
+ bmpMax: (() => void)[];
5
7
  isSupplementaryPlane: (() => void)[];
6
8
  isValidCodePoint: (() => void)[];
7
9
  isTextCodePoint: (() => void)[];
@@ -1,4 +1,8 @@
1
+ import { assertEq } from '../../asserts/module.f.mjs'
2
+ import { toArray } from '../../types/list/module.f.mjs'
1
3
  import {
4
+ bmpMax,
5
+ eofFlush,
2
6
  isBmpCodePoint,
3
7
  isHighSurrogate,
4
8
  isLowSurrogate,
@@ -12,7 +16,32 @@ const check = (actual, expected) => {
12
16
  if (actual !== expected) { throw `${actual} !== ${expected}` }
13
17
  }
14
18
 
19
+ /**
20
+ * A stand-in for a codec's state-to-error function.
21
+ *
22
+ * @type {(state: number) => number}
23
+ */
24
+ const negate = state => -state
25
+
26
+ const flush = eofFlush(negate)
27
+
15
28
  export const proof = {
29
+ eofFlush: [
30
+ // no leftover state: nothing is flushed, the state stays empty
31
+ () => {
32
+ const [out, next] = flush(null)
33
+ assertEq(toArray(out).length, 0)
34
+ assertEq(next, null)
35
+ },
36
+ // leftover state: exactly one error unit, then the state resets
37
+ () => {
38
+ const [out, next] = flush(42)
39
+ const [first, ...rest] = toArray(out)
40
+ assertEq(first, -42)
41
+ assertEq(rest.length, 0)
42
+ assertEq(next, null)
43
+ },
44
+ ],
16
45
  isHighSurrogate: [
17
46
  () => check(isHighSurrogate(0xd800), true),
18
47
  () => check(isHighSurrogate(0xdbff), true),
@@ -36,6 +65,16 @@ export const proof = {
36
65
  () => check(isBmpCodePoint(0xd800), false),
37
66
  () => check(isBmpCodePoint(0x10000), false),
38
67
  ],
68
+ bmpMax: [
69
+ // The exported boundary and the predicates derived from it must agree:
70
+ // `bmpMax` is the last BMP code point, and the next one starts the
71
+ // supplementary planes. This is the pairing the UTF-8 encoder relies
72
+ // on to split its 3-byte and 4-byte forms.
73
+ () => check(isBmpCodePoint(bmpMax), true),
74
+ () => check(isSupplementaryPlane(bmpMax), false),
75
+ () => check(isSupplementaryPlane(bmpMax + 1), true),
76
+ () => check(isBmpCodePoint(bmpMax + 1), false),
77
+ ],
39
78
  isSupplementaryPlane: [
40
79
  () => check(isSupplementaryPlane(0x10000), true),
41
80
  () => check(isSupplementaryPlane(0x10ffff), true),
@@ -4,12 +4,14 @@
4
4
  * strings and MSB-first UTF-8 bit vectors.
5
5
  *
6
6
  * @module
7
+ *
8
+ * @import { List } from '../types/list/types.ts'
9
+ * @import { Nullable } from '../types/nullable/types.ts'
10
+ * @import { Block, Item, Utf8 } from './types.ts'
7
11
  */
8
12
  import type { List } from '../types/list/types.ts';
9
13
  import type { Nullable } from '../types/nullable/types.ts';
10
14
  import type { Block, Utf8 } from './types.ts';
11
- /** @import { Nullable } from '../types/nullable/types.ts' */
12
- /** @import { Block, Item, Utf8 } from './types.ts' */
13
15
  /** @type {(indent: string) => (text: Block) => List<string>} */
14
16
  export declare const flat: (indent: string) => (text: Block) => List<string>;
15
17
  /**
@@ -4,16 +4,17 @@
4
4
  * strings and MSB-first UTF-8 bit vectors.
5
5
  *
6
6
  * @module
7
+ *
8
+ * @import { List } from '../types/list/types.ts'
9
+ * @import { Nullable } from '../types/nullable/types.ts'
10
+ * @import { Block, Item, Utf8 } from './types.ts'
7
11
  */
8
12
 
9
13
  import { msb, tryU8ListToVec, u8List } from '../types/bit_vec/module.f.mjs'
10
14
  import { flatMap } from '../types/list/module.f.mjs'
11
- /** @import { List } from '../types/list/types.ts' */
12
15
  import { fromCodePointList, toCodePointList } from './utf8/module.f.mjs'
13
16
  import { stringToCodePointList, codePointListToString } from './utf16/module.f.mjs'
14
17
  import { mapUnwrap } from '../types/nullable/module.f.mjs'
15
- /** @import { Nullable } from '../types/nullable/types.ts' */
16
- /** @import { Block, Item, Utf8 } from './types.ts' */
17
18
 
18
19
  /** @type {(indent: string) => (text: Block) => List<string>} */
19
20
  export const flat = indent => {
@@ -1,3 +1,6 @@
1
+ /**
2
+ * @import { Block } from './types.ts'
3
+ */
1
4
  export declare const proof: {
2
5
  block: () => void;
3
6
  encoding: () => void;
@@ -1,5 +1,8 @@
1
+ /**
2
+ * @import { Block } from './types.ts'
3
+ */
4
+
1
5
  import { assertEq, assertNotNullish } from '../asserts/module.f.mjs'
2
- /** @import { Block } from './types.ts' */
3
6
  import { flat, utf8, utf8ToString, tryUtf8 } from './module.f.mjs'
4
7
  import { join } from '../types/string/module.f.mjs'
5
8
  import { empty, maxLengthBytes } from '../types/bit_vec/module.f.mjs'
@@ -5,11 +5,12 @@
5
5
  * See `./types.ts` for the type-level API.
6
6
  *
7
7
  * @module
8
+ *
9
+ * @import { Console, Write, WriteConsoles, NodeProgramOptions } from '../../effects/node/types.ts'
10
+ * @import { Stdout, WriteText, CsiConsole } from './types.ts'
8
11
  */
9
- import type { Write, WriteConsoles, NodeProgramOptions } from '../../effects/node/types.ts';
10
- import type { Effect } from '../../effects/types.ts';
12
+ import type { Console, WriteConsoles, NodeProgramOptions } from '../../effects/node/types.ts';
11
13
  import type { Stdout, WriteText } from './types.ts';
12
- /** @import { Stdout, WriteText, CsiConsole } from './types.ts' */
13
14
  /** @type {string} */
14
15
  export declare const backspace: string;
15
16
  export type _End = 'm';
@@ -53,6 +54,6 @@ export declare const createConsoleText: (stdout: Stdout) => WriteText;
53
54
  * stream is not a TTY, then encodes to UTF-8 and emits a `Write` effect.
54
55
  * Does NOT append `\n` — callers are responsible for line termination.
55
56
  *
56
- * @type {(options: NodeProgramOptions) => (stream: WriteConsoles) => (s: string) => Effect<Write, void>}
57
+ * @type {(options: NodeProgramOptions) => (stream: WriteConsoles) => Console}
57
58
  */
58
- export declare const csiWrite: (options: NodeProgramOptions) => (stream: WriteConsoles) => (s: string) => Effect<Write, void>;
59
+ export declare const csiWrite: (options: NodeProgramOptions) => (stream: WriteConsoles) => Console;
@@ -5,16 +5,16 @@
5
5
  * See `./types.ts` for the type-level API.
6
6
  *
7
7
  * @module
8
+ *
9
+ * @import { Console, Write, WriteConsoles, NodeProgramOptions } from '../../effects/node/types.ts'
10
+ * @import { Stdout, WriteText, CsiConsole } from './types.ts'
8
11
  */
9
12
 
10
13
  // C0 control codes
11
14
  // https://en.wikipedia.org/wiki/ANSI_escape_code#C0_control_codes
12
15
 
13
16
  import { write } from '../../effects/node/module.f.mjs'
14
- /** @import { Write, WriteConsoles, NodeProgramOptions } from '../../effects/node/types.ts' */
15
- /** @import { Effect } from '../../effects/types.ts' */
16
17
  import { utf8 } from "../module.f.mjs"
17
- /** @import { Stdout, WriteText, CsiConsole } from './types.ts' */
18
18
 
19
19
  /** @type {string} */
20
20
  export const backspace = '\x08'
@@ -48,13 +48,13 @@ export const csi = end => code =>
48
48
  export const sgr = csi('m')
49
49
 
50
50
  /** Resets all SGR styles to terminal defaults. */
51
- export const reset = /** @type {string} */ (sgr(0))
51
+ export const reset = sgr(0)
52
52
  /** Enables bold/intense text rendering when supported by the terminal. */
53
- export const bold = /** @type {string} */ (sgr(1))
53
+ export const bold = sgr(1)
54
54
  /** Applies red foreground color to subsequent text. */
55
- export const fgRed = /** @type {string} */ (sgr(31))
55
+ export const fgRed = sgr(31)
56
56
  /** Applies green foreground color to subsequent text. */
57
- export const fgGreen = /** @type {string} */ (sgr(32))
57
+ export const fgGreen = sgr(32)
58
58
 
59
59
  const { max } = Math
60
60
 
@@ -91,7 +91,7 @@ const str = isTTY => s =>
91
91
  * stream is not a TTY, then encodes to UTF-8 and emits a `Write` effect.
92
92
  * Does NOT append `\n` — callers are responsible for line termination.
93
93
  *
94
- * @type {(options: NodeProgramOptions) => (stream: WriteConsoles) => (s: string) => Effect<Write, void>}
94
+ * @type {(options: NodeProgramOptions) => (stream: WriteConsoles) => Console}
95
95
  */
96
96
  export const csiWrite = ({ std }) => stream => {
97
97
  const toStr = str(std[stream].isTTY)
@@ -1 +1,4 @@
1
+ /**
2
+ * @import { NodeProgramOptions } from '../../effects/node/types.ts'
3
+ */
1
4
  export declare const proof: (() => void)[];
@@ -1,6 +1,9 @@
1
+ /**
2
+ * @import { NodeProgramOptions } from '../../effects/node/types.ts'
3
+ */
4
+
1
5
  import { fgRed, reset, createConsoleText, backspace, csiWrite } from './module.f.mjs'
2
6
  import { virtual, emptyState, defaultNodeProgramOptions } from '../../effects/node/virtual/module.f.mjs'
3
- /** @import { NodeProgramOptions } from '../../effects/node/types.ts' */
4
7
  import { assert, assertEq } from '../../asserts/module.f.mjs'
5
8
 
6
9
  /** @type {(isTTY: boolean) => NodeProgramOptions} */
@@ -4,10 +4,14 @@
4
4
  * `stateScan` operations.
5
5
  *
6
6
  * @module
7
+ *
8
+ * @import { List, Result, Thunk } from '../../types/list/types.ts'
9
+ * @import { StateScan } from '../../types/function/operator/types.ts'
10
+ * @import { CodePoint, U16 } from './types.ts'
7
11
  */
8
12
  import type { List, Thunk } from '../../types/list/types.ts';
9
- export type _Utf16State = number | null;
10
13
  import type { CodePoint, U16 } from './types.ts';
14
+ export type _Utf16State = number | null;
11
15
  /**
12
16
  * Converts a UTF-16 sequence to its corresponding Unicode code points.
13
17
  *