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,3 +1,14 @@
1
+ /**
2
+ * TypeScript type transformers for RTTI schemas.
3
+ *
4
+ * Each `*Ts` type maps a schema (or schema fragment) to its corresponding TypeScript type.
5
+ * The main entry point is `Ts<T>`.
6
+ *
7
+ * The runtime `toTs` function (`printer` in `./module.f.mjs`) mirrors `Ts<T>` at value
8
+ * level, returning a TypeScript type expression string for a given RTTI schema.
9
+ *
10
+ * @module
11
+ */
1
12
  import type { Tag0, Tag1, Struct, Tuple, Type } from '../types.ts';
2
13
  import type { phantomKey } from '../../phantom/types.ts';
3
14
  import type { StringMap } from '../../object/types.ts';
@@ -40,7 +51,20 @@ export type ArrayTs<T extends Type> = ReadonlyArray<Ts<T>>;
40
51
  export type RecordTs<T extends Type> = {
41
52
  readonly [K in string]?: Ts<T>;
42
53
  };
43
- /** Maps a tuple schema to a readonly tuple of resolved types. */
54
+ /**
55
+ * Maps a tuple schema to a readonly tuple of resolved types.
56
+ *
57
+ * **The commented-out line is the accurate mapping.** A tuple schema is *open*
58
+ * — a longer array is a member of the set it describes (see "Structs and
59
+ * tuples are open" in `../README.md`) — and the open form below says so. It is
60
+ * commented out because TypeScript could not handle it, so this renders the
61
+ * closed approximation instead.
62
+ *
63
+ * That is a limitation of this renderer, **not** a statement about the value
64
+ * model. Do not cite the exact mapping as evidence that tuples are closed and
65
+ * add a length check to `../parse/module.f.mjs`; that inference is what
66
+ * produced #1622.
67
+ */
44
68
  export type TupleTs<T extends Tuple> = {
45
69
  readonly [K in keyof T]: Ts<T[K]>;
46
70
  };
@@ -1,3 +1,43 @@
1
+ /**
2
+ * Type-level API for runtime type information (RTTI) — a type-safe schema
3
+ * system for describing and converting TypeScript types.
4
+ *
5
+ * ## Core concepts
6
+ *
7
+ * A `Type` is either a `Const` (used directly as its own schema) or a `Thunk`
8
+ * (a zero-argument function returning an `Info` descriptor). Thunks are the
9
+ * primary building block: they enable lazy evaluation and recursive type definitions.
10
+ *
11
+ * ```
12
+ * Type = Const | Thunk
13
+ * Thunk = () => Info
14
+ * Info = ['const', Const] | Info0<Tag0> | Info1<Tag1, Type>
15
+ * ```
16
+ *
17
+ * ## Nullary schemas (no type parameter)
18
+ *
19
+ * `boolean`, `number`, `string`, `bigint`, `unknown` are pre-built `Thunk` values
20
+ * that describe primitive types. Each is a `_Type0<Tag0>` — a thunk returning a
21
+ * single-element tag tuple.
22
+ *
23
+ * ## Unary schemas (one type parameter)
24
+ *
25
+ * `array(t)` and `record(t)` construct `Thunk` values parameterized by an inner
26
+ * `Type`. They return `Type1` thunks wrapping an `Info1` tuple.
27
+ *
28
+ * ## Const schemas
29
+ *
30
+ * Any `Primitive`, `Struct` (plain object), or `Tuple` (readonly array) can be
31
+ * used directly as a schema — it describes exactly the shape of that value.
32
+ * Inside a recursive `Thunk`-based definition, wrap consts with `() => ['const', c]`
33
+ * to keep the schema uniform.
34
+ *
35
+ * ## Converting to TypeScript types
36
+ *
37
+ * See `./ts/module.f.ts` for `Ts<T>` and the `*Ts` transformer types.
38
+ *
39
+ * @module
40
+ */
1
41
  import type { StringMap } from '../object/types.ts';
2
42
  import type { tag0List } from './module.f.mjs';
3
43
  /** A constant schema: a primitive literal, a struct object, or a tuple. */
@@ -2,12 +2,15 @@
2
2
  * Sorted immutable list helpers and merge operations.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Cmp } from '../function/compare/types.ts'
7
+ * @import { List } from '../list/types.ts'
8
+ * @import { ReduceOp, SortedList, _MergeReduce } from './types.ts'
5
9
  */
6
10
  import type { Cmp } from '../function/compare/types.ts';
7
11
  import type { List } from '../list/types.ts';
8
12
  import type { ReduceOp, SortedList, _MergeReduce } from './types.ts';
9
13
  export type _SortedArray<T> = readonly T[];
10
- /** @import { ReduceOp, SortedList, TailReduce, _MergeReduce } from './types.ts' */
11
14
  /** @template T @typedef {readonly T[]} _SortedArray */
12
15
  /**
13
16
  * Two-way sorted-list merge.
@@ -2,14 +2,15 @@
2
2
  * Sorted immutable list helpers and merge operations.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Cmp } from '../function/compare/types.ts'
7
+ * @import { List } from '../list/types.ts'
8
+ * @import { ReduceOp, SortedList, _MergeReduce } from './types.ts'
5
9
  */
6
10
 
7
11
  import { bsearch } from '../function/compare/module.f.mjs'
8
- /** @import { Cmp } from '../function/compare/types.ts' */
9
12
  import { next } from '../list/module.f.mjs'
10
- /** @import { List } from '../list/types.ts' */
11
13
  import { identity } from '../function/module.f.mjs'
12
- /** @import { ReduceOp, SortedList, TailReduce, _MergeReduce } from './types.ts' */
13
14
 
14
15
  /** @template T @typedef {readonly T[]} _SortedArray */
15
16
 
@@ -53,11 +54,7 @@ export const merge =
53
54
  * @param {Cmp<T>} cmp
54
55
  * @returns {(a: SortedList<T>) => (b: SortedList<T>) => SortedList<T>}
55
56
  */
56
- cmp => {
57
- /** @type {TailReduce<T, null>} */
58
- const tailReduce = mergeTail
59
- return genericMerge({ reduceOp: cmpReduce(cmp), tailReduce })(null)
60
- }
57
+ cmp => genericMerge({ reduceOp: cmpReduce(cmp), tailReduce: keepTail })(null)
61
58
 
62
59
  const cmpReduce =
63
60
  /**
@@ -70,10 +67,22 @@ const cmpReduce =
70
67
  return [sign === 1 ? b : a, sign, null]
71
68
  }
72
69
 
73
- /** @type {() => <T>(tail: List<T>) => List<T>} */
74
- const mergeTail = () => identity
70
+ /**
71
+ * The two tail policies `genericMerge` takes, named for what they do with the
72
+ * list that has not been exhausted yet: `merge` keeps it, because everything
73
+ * still there belongs in the union, and `intersect` drops it, because with one
74
+ * side exhausted nothing remaining can be matched.
75
+ *
76
+ * Both are left to inference deliberately. An explicit
77
+ * `() => <T>(tail: List<T>) => List<T>` compiles here but introduces its own
78
+ * type parameter, which `genericMerge` then collects as an inference candidate
79
+ * alongside `reduceOp`'s; the best common supertype of the two is `unknown`, so
80
+ * `T` widens and both call sites fail to match their declared return type. With
81
+ * no annotation there is no second candidate and `reduceOp` alone fixes `T`.
82
+ */
83
+ const keepTail = () => identity
75
84
 
76
- const tailReduce = () => () => null
85
+ const dropTail = () => () => null
77
86
 
78
87
  const intersectReduce =
79
88
  /**
@@ -92,7 +101,7 @@ export const intersect =
92
101
  * @param {Cmp<T>} cmp
93
102
  * @returns {(a: SortedList<T>) => (b: SortedList<T>) => SortedList<T>}
94
103
  */
95
- cmp => genericMerge({ reduceOp: intersectReduce(cmp), tailReduce })(null)
104
+ cmp => genericMerge({ reduceOp: intersectReduce(cmp), tailReduce: dropTail })(null)
96
105
 
97
106
  export const find =
98
107
  /**
@@ -1,4 +1,6 @@
1
- /** @import { Unknown } from '../../media/json/types.ts' */
1
+ /**
2
+ * @import { Unknown } from '../../media/json/types.ts'
3
+ */
2
4
  export declare const proof: {
3
5
  sortedMergre: (() => void)[];
4
6
  find: (() => void)[];
@@ -1,4 +1,6 @@
1
- /** @import { Unknown } from '../../media/json/types.ts' */
1
+ /**
2
+ * @import { Unknown } from '../../media/json/types.ts'
3
+ */
2
4
 
3
5
  import { find, merge } from './module.f.mjs'
4
6
  import { stringify } from '../../media/json/module.f.mjs'
@@ -1,6 +1,36 @@
1
+ /**
2
+ * A sorted set, implemented as a sorted array.
3
+ *
4
+ * @module
5
+ *
6
+ * @note
7
+ *
8
+ * All input arrays must be pre-sorted according to the provided comparison function (`Cmp<T>`).
9
+ * The correctness of these functions depend on this requirement.
10
+ *
11
+ * @example
12
+ *
13
+ * ```js
14
+ * import { union, intersect, has } from './module.f.mjs'
15
+ *
16
+ * const cmp = (a: number) => (b: number) => a < b ? -1 : a > b ? 1 : 0
17
+ *
18
+ * const setA = [1, 3, 5]
19
+ * const setB = [3, 4, 5]
20
+ *
21
+ * const unionSet = union(cmp)(setA)(setB) // [1, 3, 4, 5]
22
+ *
23
+ * const intersectionSet = intersect(cmp)(setA)(setB) // [3, 5]
24
+ *
25
+ * has(cmp)(3)(setA) // true
26
+ * has(cmp)(2)(setA) // false
27
+ * ```
28
+ *
29
+ * @import { Cmp } from '../function/compare/types.ts'
30
+ * @import { SortedSet } from './types.ts'
31
+ */
1
32
  import type { Cmp } from '../function/compare/types.ts';
2
33
  import type { SortedSet } from './types.ts';
3
- /** @import { SortedSet } from './types.ts' */
4
34
  export declare const union: <T>(
5
35
  /**
6
36
  * @template T
@@ -22,3 +52,21 @@ export declare const has: <T>(
22
52
  * @returns {(value: T) => (set: SortedSet<T>) => boolean}
23
53
  */
24
54
  cmp: Cmp<T>) => (value: T) => (set: SortedSet<T>) => boolean;
55
+ /**
56
+ * A canonical key for a set of strings: equal sets always produce the same
57
+ * key, and unequal sets never produce the same one. Useful wherever a set has
58
+ * to index a `StringMap` — the subset construction in `fjs/fsm`, say.
59
+ *
60
+ * Each element is written length-prefixed (`3:abc`) and the parts are
61
+ * concatenated. Joining on a separator would **not** be canonical: elements
62
+ * are arbitrary strings, so `['a,b']` and `['a', 'b']` would both produce
63
+ * `a,b` and two different sets would share one key. A length prefix is
64
+ * readable back — take the digits, the `:`, then exactly that many code
65
+ * units — so the encoding is injective without an escaping table.
66
+ *
67
+ * The key is canonical for the *set* only because `SortedSet` is sorted:
68
+ * element order is fixed by the set's own invariant, not by this function.
69
+ *
70
+ * @type {(set: SortedSet<string>) => string}
71
+ */
72
+ export declare const toKey: (set: SortedSet<string>) => string;
@@ -25,11 +25,13 @@
25
25
  * has(cmp)(3)(setA) // true
26
26
  * has(cmp)(2)(setA) // false
27
27
  * ```
28
+ *
29
+ * @import { Cmp } from '../function/compare/types.ts'
30
+ * @import { SortedSet } from './types.ts'
28
31
  */
29
- /** @import { Cmp } from '../function/compare/types.ts' */
32
+
30
33
  import { toArray } from "../list/module.f.mjs"
31
34
  import { merge, intersect as listIntersect, find } from '../sorted_list/module.f.mjs'
32
- /** @import { SortedSet } from './types.ts' */
33
35
 
34
36
  export const union =
35
37
  /**
@@ -54,3 +56,25 @@ export const has =
54
56
  * @returns {(value: T) => (set: SortedSet<T>) => boolean}
55
57
  */
56
58
  cmp => value => set => find(cmp)(value)(set) === value
59
+
60
+ /** @type {(s: string) => string} */
61
+ const lengthPrefixed = s => `${s.length}:${s}`
62
+
63
+ /**
64
+ * A canonical key for a set of strings: equal sets always produce the same
65
+ * key, and unequal sets never produce the same one. Useful wherever a set has
66
+ * to index a `StringMap` — the subset construction in `fjs/fsm`, say.
67
+ *
68
+ * Each element is written length-prefixed (`3:abc`) and the parts are
69
+ * concatenated. Joining on a separator would **not** be canonical: elements
70
+ * are arbitrary strings, so `['a,b']` and `['a', 'b']` would both produce
71
+ * `a,b` and two different sets would share one key. A length prefix is
72
+ * readable back — take the digits, the `:`, then exactly that many code
73
+ * units — so the encoding is injective without an escaping table.
74
+ *
75
+ * The key is canonical for the *set* only because `SortedSet` is sorted:
76
+ * element order is fixed by the set's own invariant, not by this function.
77
+ *
78
+ * @type {(set: SortedSet<string>) => string}
79
+ */
80
+ export const toKey = set => set.map(lengthPrefixed).join('')
@@ -1,5 +1,8 @@
1
- /** @import { Unknown } from '../../media/json/types.ts' */
1
+ /**
2
+ * @import { Unknown } from '../../media/json/types.ts'
3
+ */
2
4
  export declare const proof: {
5
+ toKey: (() => void)[];
3
6
  example: () => void;
4
7
  union: (() => void)[];
5
8
  intersect: (() => void)[];
@@ -1,6 +1,8 @@
1
- /** @import { Unknown } from '../../media/json/types.ts' */
1
+ /**
2
+ * @import { Unknown } from '../../media/json/types.ts'
3
+ */
2
4
 
3
- import { has, intersect, union } from './module.f.mjs'
5
+ import { has, intersect, toKey, union } from './module.f.mjs'
4
6
  import { stringify } from '../../media/json/module.f.mjs'
5
7
  import { sort } from '../object/module.f.mjs'
6
8
  import { toArray, countdown, length } from '../list/module.f.mjs'
@@ -14,6 +16,21 @@ const str = a => stringify(sort)(a)
14
16
  const reverseCmp = flip(cmp)
15
17
 
16
18
  export const proof = {
19
+ toKey: [
20
+ () => assertEq(toKey([]), ''),
21
+ () => assertEq(toKey(['']), '0:'),
22
+ () => assertEq(toKey(['a']), '1:a'),
23
+ () => assertEq(toKey(['a', 'b']), '1:a1:b'),
24
+ // The reason the key is length-prefixed rather than separator-joined:
25
+ // these two sets are different and must not share a key, but any
26
+ // fixed separator that can occur in an element collapses them.
27
+ () => assert(toKey(['a,b']) !== toKey(['a', 'b']), 'comma'),
28
+ () => assert(toKey(['a:b']) !== toKey(['a', 'b']), 'colon'),
29
+ () => assert(toKey(['a\nb']) !== toKey(['a', 'b']), 'newline'),
30
+ // A prefix of one element must not be confused with a shorter one.
31
+ () => assert(toKey(['ab']) !== toKey(['a']), 'prefix'),
32
+ () => assert(toKey(['']) !== toKey([]), 'empty element vs empty set'),
33
+ ],
17
34
  example: () => {
18
35
  const cmp = (/** @type {number} */ a) => (/** @type {number} */ b) => a < b ? -1 : a > b ? 1 : 0
19
36
 
@@ -14,6 +14,10 @@
14
14
  * repeat('abc')(3) // 'abcabcabc'
15
15
  * cmp('apple')('banana') // -1
16
16
  * ```
17
+ *
18
+ * @import { List } from '../list/types.ts'
19
+ * @import { Sign } from '../function/compare/types.ts'
20
+ * @import { Reduce } from '../function/operator/types.ts'
17
21
  */
18
22
  import type { List } from '../list/types.ts';
19
23
  import type { Sign } from '../function/compare/types.ts';
@@ -14,14 +14,15 @@
14
14
  * repeat('abc')(3) // 'abcabcabc'
15
15
  * cmp('apple')('banana') // -1
16
16
  * ```
17
+ *
18
+ * @import { List } from '../list/types.ts'
19
+ * @import { Sign } from '../function/compare/types.ts'
20
+ * @import { Reduce } from '../function/operator/types.ts'
17
21
  */
18
22
 
19
- /** @import { List } from '../list/types.ts' */
20
23
  import { reduce as listReduce, repeat as listRepeat } from '../list/module.f.mjs'
21
24
  import { compose } from '../function/module.f.mjs'
22
- /** @import { Sign } from '../function/compare/types.ts' */
23
25
  import { cmp as uCmp } from '../function/compare/module.f.mjs'
24
- /** @import { Reduce } from '../function/operator/types.ts' */
25
26
  import { join as joinOp } from '../function/operator/module.f.mjs'
26
27
  import { fold } from '../../common/monoid/module.f.mjs'
27
28
 
@@ -19,10 +19,12 @@
19
19
  * mySet = remove('banana')(mySet);
20
20
  * if (contains('banana')(mySet)) { throw '4' }
21
21
  * ```
22
+ *
23
+ * @import { List } from '../list/types.ts'
24
+ * @import { StringSet } from './types.ts'
22
25
  */
23
26
  import type { List } from '../list/types.ts';
24
27
  import type { StringSet } from './types.ts';
25
- /** @import { StringSet } from './types.ts' */
26
28
  /** @type {(s: StringSet) => List<string>} */
27
29
  export declare const values: (s: StringSet) => List<string>;
28
30
  /** @type {null} */
@@ -19,6 +19,9 @@
19
19
  * mySet = remove('banana')(mySet);
20
20
  * if (contains('banana')(mySet)) { throw '4' }
21
21
  * ```
22
+ *
23
+ * @import { List } from '../list/types.ts'
24
+ * @import { StringSet } from './types.ts'
22
25
  */
23
26
 
24
27
  import { empty as btEmpty, values as btValues } from '../btree/module.f.mjs'
@@ -26,10 +29,8 @@ import { find, isFound } from '../btree/find/module.f.mjs'
26
29
  import { remove as btreeRemove } from '../btree/remove/module.f.mjs'
27
30
  import { set as btreeSet } from '../btree/set/module.f.mjs'
28
31
  import { cmp } from "../string/module.f.mjs"
29
- /** @import { List } from '../list/types.ts' */
30
32
  import { fold } from '../list/module.f.mjs'
31
33
  import { compose } from '../function/module.f.mjs'
32
- /** @import { StringSet } from './types.ts' */
33
34
 
34
35
  /** @type {(s: StringSet) => List<string>} */
35
36
  export const values = btValues
@@ -4,6 +4,8 @@
4
4
  * primitive literals, and unions as TypeScript type expressions.
5
5
  *
6
6
  * @module
7
+ *
8
+ * @import { Printer } from './types.ts'
7
9
  */
8
10
  import type { Printer } from './types.ts';
9
11
  /**
@@ -4,10 +4,10 @@
4
4
  * primitive literals, and unions as TypeScript type expressions.
5
5
  *
6
6
  * @module
7
+ *
8
+ * @import { Printer } from './types.ts'
7
9
  */
8
10
 
9
- /** @import { Printer } from './types.ts' */
10
-
11
11
  /** @type {(open: string, close: string) => (i: readonly string[]) => string} */
12
12
  const complex = (open, close) => i =>
13
13
  `${open}${i.join(',')}${close}`
@@ -24,7 +24,7 @@ export const printer = (mut = undefined) => {
24
24
  return {
25
25
  tuple: (mut ? complex('[', ']') : complex('readonly[', ']')),
26
26
  struct: fields =>
27
- structX(fields.map(([k, v]) => `${ro}${JSON.stringify(k)}:${v}`)),
27
+ structX(fields.map(([k, v, opt]) => `${ro}${JSON.stringify(k)}${opt === true ? '?' : ''}:${v}`)),
28
28
  array: type => `${ro}(${type})[]`,
29
29
  // `[k:string]?:` is invalid TypeScript — optional keys on an infinite
30
30
  // key set require mapped-type syntax.
@@ -10,6 +10,7 @@ export declare const unionSingle: () => void;
10
10
  export declare const unionMulti: () => void;
11
11
  export declare const printerReadonlyTuple: () => void;
12
12
  export declare const printerReadonlyStruct: () => void;
13
+ export declare const printerOptionalField: () => void;
13
14
  export declare const printerReadonlyArray: () => void;
14
15
  export declare const printerReadonlyRecord: () => void;
15
16
  export declare const printerMutableTuple: () => void;
@@ -64,6 +64,11 @@ export const printerReadonlyStruct = () => {
64
64
  if (r !== '{readonly"x":number,readonly"y":string}') { throw r }
65
65
  }
66
66
 
67
+ export const printerOptionalField = () => {
68
+ const r = ro.struct([['x', 'number', true], ['y', 'string']])
69
+ if (r !== '{readonly"x"?:number,readonly"y":string}') { throw r }
70
+ }
71
+
67
72
  export const printerReadonlyArray = () => {
68
73
  const r = ro.array('string')
69
74
  assertEq(r, 'readonly(string)[]')
@@ -5,12 +5,17 @@
5
5
  * @module
6
6
  */
7
7
  export type Equal<A, B> = (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? true : false;
8
+ /**
9
+ * A `struct` field: the key, its type expression, and — when the third
10
+ * element is `true` — an optional-key marker (`"key"?: type`).
11
+ */
12
+ export type StructField = readonly [string, string, true?];
8
13
  /**
9
14
  * Functions for emitting TypeScript type expression strings.
10
15
  */
11
16
  export type Printer = {
12
17
  readonly tuple: (types: readonly string[]) => string;
13
- readonly struct: (fields: readonly (readonly [string, string])[]) => string;
18
+ readonly struct: (fields: readonly StructField[]) => string;
14
19
  readonly array: (type: string) => string;
15
20
  readonly record: (type: string) => string;
16
21
  };
@@ -8,17 +8,28 @@
8
8
  * (e.g. `fromVec`/`toVec` when reading or writing files).
9
9
  *
10
10
  * @module
11
+ *
12
+ * @import { Vec } from '../bit_vec/types.ts'
13
+ * @import { List } from '../list/types.ts'
11
14
  */
12
15
  import type { Vec } from '../bit_vec/types.ts';
13
16
  import type { List } from '../list/types.ts';
17
+ /**
18
+ * Concatenates a list of `Uint8Array` values into one MSB-first bit vector.
19
+ *
20
+ * Throws if the result would exceed `maxLength`. The bound is not precomputed:
21
+ * `tryU8ListToVec` attempts the real conversion and reports `null` when it does
22
+ * not fit (`DESIGN.md` §6).
23
+ *
24
+ * @type {(input: List<Uint8Array>) => Vec}
25
+ */
26
+ export declare const listToVec: (input: List<Uint8Array>) => Vec;
14
27
  /**
15
28
  * Converts a Uint8Array into an MSB-first bit vector.
16
29
  *
17
30
  * @type {(input: Uint8Array) => Vec}
18
31
  */
19
32
  export declare const toVec: (input: Uint8Array) => Vec;
20
- /** @type {(input: List<Uint8Array>) => Vec} */
21
- export declare const listToVec: (input: List<Uint8Array>) => Vec;
22
33
  /**
23
34
  * Converts an MSB-first bit vector into a Uint8Array.
24
35
  *
@@ -8,36 +8,41 @@
8
8
  * (e.g. `fromVec`/`toVec` when reading or writing files).
9
9
  *
10
10
  * @module
11
+ *
12
+ * @import { Vec } from '../bit_vec/types.ts'
13
+ * @import { List } from '../list/types.ts'
11
14
  */
12
15
 
13
- import { assert, assertNotNullish } from '../../asserts/module.f.mjs'
16
+ import { assertNotNullish } from '../../asserts/module.f.mjs'
14
17
  import { utf8, utf8ToString } from '../../text/module.f.mjs'
15
- import { maxLengthBytes, msb, tryU8ListToVec, u8List, u8ListToVec } from '../bit_vec/module.f.mjs'
16
- /** @import { Vec } from '../bit_vec/types.ts' */
18
+ import { msb, tryU8ListToVec, u8List } from '../bit_vec/module.f.mjs'
17
19
  import { compose } from '../function/module.f.mjs'
18
20
  import { flat, fromArrayLike, iterable, map } from '../list/module.f.mjs'
19
- /** @import { List } from '../list/types.ts' */
20
21
 
21
- const u8ListToVecMsb = u8ListToVec(msb)
22
22
  const tryU8ListToVecMsb = tryU8ListToVec(msb)
23
23
  const u8ListMsb = u8List(msb)
24
24
 
25
+ const m = map(fromArrayLike)
26
+
25
27
  /**
26
- * Converts a Uint8Array into an MSB-first bit vector.
28
+ * Concatenates a list of `Uint8Array` values into one MSB-first bit vector.
27
29
  *
28
- * @type {(input: Uint8Array) => Vec}
30
+ * Throws if the result would exceed `maxLength`. The bound is not precomputed:
31
+ * `tryU8ListToVec` attempts the real conversion and reports `null` when it does
32
+ * not fit (`DESIGN.md` §6).
33
+ *
34
+ * @type {(input: List<Uint8Array>) => Vec}
29
35
  */
30
- export const toVec = input => {
31
- assert(input.length <= maxLengthBytes, "the array is too big")
32
- return u8ListToVecMsb(fromArrayLike(input))
33
- }
34
-
35
- const m = map(fromArrayLike)
36
-
37
- /** @type {(input: List<Uint8Array>) => Vec} */
38
36
  export const listToVec = input =>
39
37
  assertNotNullish(tryU8ListToVecMsb(flat(m(input))), "the array is too big")
40
38
 
39
+ /**
40
+ * Converts a Uint8Array into an MSB-first bit vector.
41
+ *
42
+ * @type {(input: Uint8Array) => Vec}
43
+ */
44
+ export const toVec = input => listToVec([input])
45
+
41
46
  /**
42
47
  * Converts an MSB-first bit vector into a Uint8Array.
43
48
  *
@@ -2,7 +2,10 @@
2
2
  * Static website generation program for project landing content.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Write, WriteFile } from '../effects/node/types.ts'
7
+ * @import { Effect } from '../effects/types.ts'
5
8
  */
6
- import type { WriteFile } from '../effects/node/types.ts';
9
+ import type { Write, WriteFile } from '../effects/node/types.ts';
7
10
  import type { Effect } from '../effects/types.ts';
8
- export declare const main: () => Effect<WriteFile, number>;
11
+ export declare const main: () => Effect<Write | WriteFile, 0, number>;
@@ -2,13 +2,13 @@
2
2
  * Static website generation program for project landing content.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Write, WriteFile } from '../effects/node/types.ts'
7
+ * @import { Effect } from '../effects/types.ts'
5
8
  */
6
9
 
7
10
  import { htmlUtf8 } from '../media/html/module.f.mjs'
8
- import { writeFile } from '../effects/node/module.f.mjs'
9
- /** @import { WriteFile } from '../effects/node/types.ts' */
10
- import { pure, step } from '../effects/module.f.mjs'
11
- /** @import { Effect } from '../effects/types.ts' */
11
+ import { exitStep, writeFile } from '../effects/node/module.f.mjs'
12
12
 
13
13
  const html = htmlUtf8()(
14
14
  ['a',
@@ -16,9 +16,7 @@ const html = htmlUtf8()(
16
16
  'GitHub Repository'
17
17
  ])
18
18
 
19
- /** @type {Effect<WriteFile, number>} */
20
- const program = step(
21
- writeFile('index.html', html),
22
- () => pure(0))
19
+ /** @type {Effect<WriteFile | Write, 0, number>} */
20
+ const program = exitStep(writeFile('index.html', html))
23
21
 
24
22
  export const main = () => program
@@ -1,3 +1,4 @@
1
+ import { exitCode } from '../effects/node/module.f.mjs'
1
2
  import { main } from './module.f.mjs'
2
3
  import { emptyState, virtual } from '../effects/node/virtual/module.f.mjs'
3
4
  import { assertEq, assertNotNullish } from '../asserts/module.f.mjs'
@@ -9,6 +10,6 @@ export const proof = {
9
10
  run: () => {
10
11
  const state = { ...emptyState, root: { '.github': { workflows: {} } } }
11
12
  const [_, result] = virtual(state)(main())
12
- assertEq(result, 0)
13
+ assertEq(exitCode(result), 0)
13
14
  },
14
15
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "functionalscript",
3
- "version": "0.44.0",
3
+ "version": "0.46.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "**/*.js",
@@ -10,9 +10,9 @@
10
10
  ],
11
11
  "description": "FunctionalScript is a purely functional subset of JavaScript",
12
12
  "scripts": {
13
- "prepack": "tsc --noEmit false --emitDeclarationOnly && tsc --noEmit false --declaration false",
13
+ "prepack": "tsc --noEmit false --emitDeclarationOnly && tsc",
14
14
  "test": "tsc && node ./fjs/module.mjs t",
15
- "cov": "node --test --experimental-test-coverage --test-coverage-include=**/module.f.mjs fjs/emergent_testing/all.test.ts",
15
+ "cov": "node --test --experimental-test-coverage --test-coverage-include=**/module.f.mjs --test-coverage-lines=100 --test-coverage-branches=100 --test-coverage-functions=100",
16
16
  "start": "node ./fjs/module.mjs",
17
17
  "ci-update": "node ./fjs/module.mjs ci && node ./fjs/module.mjs r ./fjs/nanvm/update/module.f.mjs",
18
18
  "dev-update": "node ./fjs/module.mjs r ./fjs/dev/update/module.f.mjs",
@@ -1,6 +0,0 @@
1
- /**
2
- * Types for ASN.1 BER/DER encoding and decoding over bit vectors.
3
- *
4
- * @module
5
- */
6
- export {};
@@ -1,6 +0,0 @@
1
- /**
2
- * Type-level assertion helpers.
3
- *
4
- * @module
5
- */
6
- export {};