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,5 +1,8 @@
1
+ /**
2
+ * @import { TNode } from '../types/types.ts'
3
+ */
4
+
1
5
  import { set as setSet } from './module.f.mjs'
2
- /** @import { TNode } from '../types/types.ts' */
3
6
  import { cmp } from '../../string/module.f.mjs'
4
7
  import { stringify } from '../../../media/json/module.f.mjs'
5
8
  import { sort } from '../../object/module.f.mjs'
@@ -421,6 +424,18 @@ const test = [
421
424
  jsonStr(replacedSecond),
422
425
  '[[["1"],"100",["121","144"]],"16",[["169"],"25",["36"]],"4-updated",[["49"],"64",["81","9"]]]',
423
426
  )
427
+ },
428
+
429
+ // Replacing the first value of a two-value leaf exercises the
430
+ // `x.length === 2` arm of the `i === 1` "replace" case, which the
431
+ // fixtures above never reach — their two-value-leaf replaces all land on
432
+ // the second value.
433
+ () => {
434
+ /** @type {TNode<string>} */
435
+ const _map = set(['1'])('2')
436
+ assertEq(jsonStr(_map), '["1","2"]')
437
+ const replaced = replace(_map)('1')(() => '1-updated')
438
+ assertEq(jsonStr(replaced), '["1-updated","2"]')
424
439
  }
425
440
  ]
426
441
 
@@ -3,8 +3,9 @@
3
3
  * themselves live in `./types.ts`.
4
4
  *
5
5
  * @module
6
+ *
7
+ * @import { Branch1, Branch3, Branch5, TNode } from './types.ts'
6
8
  */
7
- /** @import { Branch1, Branch3, Branch5, TNode } from './types.ts' */
8
9
  import type { Branch1, Branch3, Branch5, TNode } from './types.ts';
9
10
  /**
10
11
  * Demotes a single-child branch root to its only child.
@@ -3,8 +3,9 @@
3
3
  * themselves live in `./types.ts`.
4
4
  *
5
5
  * @module
6
+ *
7
+ * @import { Branch1, Branch3, Branch5, TNode } from './types.ts'
6
8
  */
7
- /** @import { Branch1, Branch3, Branch5, TNode } from './types.ts' */
8
9
 
9
10
  /**
10
11
  * Demotes a single-child branch root to its only child.
@@ -1,8 +1,15 @@
1
+ /**
2
+ * Compact byte-set operations and predicates. See `./types.ts` for the
3
+ * `ByteSet` type.
4
+ *
5
+ * @module
6
+ *
7
+ * @import { RangeMap } from '../range_map/types.ts'
8
+ * @import { ByteSet } from './types.ts'
9
+ */
1
10
  import type { RangeMap } from '../range_map/types.ts';
2
- import type { SortedSet } from '../sorted_set/types.ts';
3
11
  import type { ByteSet } from './types.ts';
4
12
  export type _Byte = number;
5
- /** @import { ByteSet } from './types.ts' */
6
13
  /** @typedef {number} _Byte */
7
14
  /** @type {(n: _Byte) => (s: ByteSet) => boolean} */
8
15
  export declare const has: (n: _Byte) => (s: ByteSet) => boolean;
@@ -22,5 +29,14 @@ export declare const set: (_: number) => (b: ByteSet) => ByteSet;
22
29
  export declare const setRange: (_: readonly [number, number]) => (b: ByteSet) => ByteSet;
23
30
  /** @type {(n: _Byte) => (s: ByteSet) => ByteSet} */
24
31
  export declare const unset: (n: _Byte) => (s: ByteSet) => ByteSet;
25
- /** @type {(n: ByteSet) => (s: string) => RangeMap<SortedSet<string>>} */
26
- export declare const toRangeMap: (n: ByteSet) => (s: string) => RangeMap<SortedSet<string>>;
32
+ /**
33
+ * Re-expresses the set as a range map: one entry per membership boundary,
34
+ * carrying whether the range up to that byte is in the set.
35
+ *
36
+ * The payload is the set's own answer — `boolean` — and nothing more. A caller
37
+ * that needs ranges labelled with something else maps over the result; that
38
+ * labelling belongs to the caller, not to a byte set.
39
+ *
40
+ * @type {(n: ByteSet) => RangeMap<boolean>}
41
+ */
42
+ export declare const toRangeMap: (n: ByteSet) => RangeMap<boolean>;
@@ -3,12 +3,13 @@
3
3
  * `ByteSet` type.
4
4
  *
5
5
  * @module
6
+ *
7
+ * @import { RangeMap } from '../range_map/types.ts'
8
+ * @import { ByteSet } from './types.ts'
6
9
  */
10
+
7
11
  import { compose } from '../function/module.f.mjs'
8
- /** @import { RangeMap } from '../range_map/types.ts' */
9
- /** @import { SortedSet } from '../sorted_set/types.ts' */
10
12
  import { reverse, countdown, flat, map } from '../list/module.f.mjs'
11
- /** @import { ByteSet } from './types.ts' */
12
13
 
13
14
  /** @typedef {number} _Byte */
14
15
 
@@ -55,12 +56,21 @@ export const unset = n => s => difference(s)(one(n))
55
56
 
56
57
  const counter = reverse(countdown(256))
57
58
 
58
- /** @type {(n: ByteSet) => (s: string) => (i: number) => RangeMap<SortedSet<string>>} */
59
- const toRangeMapOp = n => s => i => {
59
+ /** @type {(n: ByteSet) => (i: number) => RangeMap<boolean>} */
60
+ const toRangeMapOp = n => i => {
60
61
  const current = has(i + 1)(n)
61
62
  const prev = has(i)(n)
62
- return current === prev ? null : [[prev ? [s] : [], i]]
63
+ return current === prev ? null : [[prev, i]]
63
64
  }
64
65
 
65
- /** @type {(n: ByteSet) => (s: string) => RangeMap<SortedSet<string>>} */
66
- export const toRangeMap = n => s => flat(map(toRangeMapOp(n)(s))(counter))
66
+ /**
67
+ * Re-expresses the set as a range map: one entry per membership boundary,
68
+ * carrying whether the range up to that byte is in the set.
69
+ *
70
+ * The payload is the set's own answer — `boolean` — and nothing more. A caller
71
+ * that needs ranges labelled with something else maps over the result; that
72
+ * labelling belongs to the caller, not to a byte set.
73
+ *
74
+ * @type {(n: ByteSet) => RangeMap<boolean>}
75
+ */
76
+ export const toRangeMap = n => flat(map(toRangeMapOp(n))(counter))
@@ -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
  has: (() => void)[];
4
6
  setRange: () => 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 { has, empty, set, setRange, unset, universe, complement, toRangeMap } from './module.f.mjs'
4
6
  import { every, countdown, map, toArray } from '../list/module.f.mjs'
@@ -63,22 +65,22 @@ export const proof = {
63
65
  },
64
66
  toRangeMap: [
65
67
  () => {
66
- const result = stringify(toArray(toRangeMap(empty)('a')))
68
+ const result = stringify(toArray(toRangeMap(empty)))
67
69
  assertEq(result, '[]')
68
70
  },
69
71
  () => {
70
72
  const s = set(0)(empty)
71
- const result = stringify(toArray(toRangeMap(s)('a')))
72
- assertEq(result, '[[["a"],0]]')
73
+ const result = stringify(toArray(toRangeMap(s)))
74
+ assertEq(result, '[[true,0]]')
73
75
  },
74
76
  () => {
75
77
  const s = setRange([1, 2])(empty)
76
- const result = stringify(toArray(toRangeMap(s)('a')))
77
- assertEq(result, '[[[],0],[["a"],2]]')
78
+ const result = stringify(toArray(toRangeMap(s)))
79
+ assertEq(result, '[[false,0],[true,2]]')
78
80
  },
79
81
  () => {
80
- const result = stringify(toArray(toRangeMap(universe)('a')))
81
- assertEq(result, '[[["a"],255]]')
82
+ const result = stringify(toArray(toRangeMap(universe)))
83
+ assertEq(result, '[[true,255]]')
82
84
  },
83
85
  ]
84
86
  }
@@ -2,9 +2,10 @@
2
2
  * Comparison function types and helpers.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Index, Tuple } from '../../array/types.ts'
7
+ * @import { Cmp1, Cmp2, Compare, Sign } from './types.ts'
5
8
  */
6
- /** @import { Index, Tuple } from '../../array/types.ts' */
7
- /** @import { Cmp1, Cmp2, Compare, Sign } from './types.ts' */
8
9
  import type { Index, Tuple } from '../../array/types.ts';
9
10
  import type { Cmp1, Cmp2, Compare, Sign } from './types.ts';
10
11
  /** @type {<T>(cmp: Compare<T>) => (value: T) => Index<3>} */
@@ -2,18 +2,26 @@
2
2
  * Comparison function types and helpers.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Index, Tuple } from '../../array/types.ts'
7
+ * @import { Cmp1, Cmp2, Compare, Sign } from './types.ts'
5
8
  */
6
- /** @import { Index, Tuple } from '../../array/types.ts' */
7
- /** @import { Cmp1, Cmp2, Compare, Sign } from './types.ts' */
9
+
10
+ import { assert } from '../../../asserts/module.f.mjs'
8
11
 
9
12
  /** @type {<T>(cmp: Compare<T>) => (value: T) => Index<3>} */
10
- export const index3
11
- = cmp => value => /** @type {Index<3>} */(cmp(value) + 1)
13
+ export const index3 = cmp => value => {
14
+ const i = cmp(value) + 1
15
+ assert(i === 0 || i === 1 || i === 2, i)
16
+ return i
17
+ }
12
18
 
13
19
  /** @type {<T>(cmp: Compare<T>) => (v2: Tuple<2, T>) => Index<5>} */
14
20
  export const index5 = cmp => ([v0, v1]) => {
15
21
  const _0 = cmp(v0)
16
- return /** @type {Index<5>} */(_0 <= 0 ? _0 + 1 : cmp(v1) + 3)
22
+ const i = _0 <= 0 ? _0 + 1 : cmp(v1) + 3
23
+ assert(i === 0 || i === 1 || i === 2 || i === 3 || i === 4, i)
24
+ return i
17
25
  }
18
26
 
19
27
  /** @type {<A extends Cmp1>(a: A) => <B extends Cmp2<A, B>>(b: B) => Sign} */
@@ -1,4 +1,11 @@
1
- /** @import { Func, Fn } from './types.ts' */
1
+ /**
2
+ * Function combinators: composition, identity, argument flipping, and the
3
+ * chainable `Fn` wrapper.
4
+ *
5
+ * @module
6
+ *
7
+ * @import { Func, Fn } from './types.ts'
8
+ */
2
9
  import type { Func, Fn } from './types.ts';
3
10
  /**
4
11
  * A postfix compose function.
@@ -1,4 +1,11 @@
1
- /** @import { Func, Fn } from './types.ts' */
1
+ /**
2
+ * Function combinators: composition, identity, argument flipping, and the
3
+ * chainable `Fn` wrapper.
4
+ *
5
+ * @module
6
+ *
7
+ * @import { Func, Fn } from './types.ts'
8
+ */
2
9
 
3
10
  /**
4
11
  * A postfix compose function.
@@ -2,9 +2,10 @@
2
2
  * Common higher-order operator type aliases.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Fold, Reduce, Scan, StateScan, Unary } from './types.ts'
5
7
  */
6
8
  import type { Fold, Reduce, Scan, StateScan, Unary } from './types.ts';
7
- /** @import { Fold, Reduce, Scan, StateScan, Unary } from './types.ts' */
8
9
  /** @type {(separator: string) => Reduce<string>} */
9
10
  export declare const join: (separator: string) => Reduce<string>;
10
11
  /** @type {Reduce<string>} */
@@ -2,10 +2,10 @@
2
2
  * Common higher-order operator type aliases.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Fold, Reduce, Scan, StateScan, Unary } from './types.ts'
5
7
  */
6
8
 
7
- /** @import { Fold, Reduce, Scan, StateScan, Unary } from './types.ts' */
8
-
9
9
  /** @type {(separator: string) => Reduce<string>} */
10
10
  export const join = separator => value => prior =>
11
11
  `${prior}${separator}${value}`
@@ -1,8 +1,15 @@
1
+ /**
2
+ * Immutable list data structure utilities and combinators.
3
+ *
4
+ * @module
5
+ *
6
+ * @import { Nullable } from '../nullable/types.ts'
7
+ * @import {Scan, StateScan, Fold, Reduce, Equal} from '../function/operator/types.ts'
8
+ * @import { Accumulator, Concat, Entry, List, NonEmpty, NotLazy, Result, Thunk } from './types.ts'
9
+ */
1
10
  import type { Nullable } from '../nullable/types.ts';
2
11
  import type { Scan, StateScan, Fold, Reduce, Equal } from '../function/operator/types.ts';
3
12
  import type { Accumulator, Entry, List, Result, Thunk } from './types.ts';
4
- /** @import {Scan, StateScan, Fold, Reduce, Equal} from '../function/operator/types.ts' */
5
- /** @import { Accumulator, Concat, Entry, List, NonEmpty, NotLazy, Result, Thunk } from './types.ts' */
6
13
  export declare const fromArrayLike: <T>(
7
14
  /**
8
15
  * @template T
@@ -70,7 +77,7 @@ export declare const reduce: <T>(op: Reduce<T>) => <D>(def: D) => (input: List<T
70
77
  * Folds `input` with an {@link Accumulator}, short-circuiting to `null` the
71
78
  * moment `update` rejects an item; otherwise finalizes with `end`. This is the
72
79
  * list-level `try*` sibling of {@link fold} for accumulations that can fail
73
- * partway through (see the `try*`/`Nullable` convention in `AGENTS.md`).
80
+ * partway through (see the `try*`/`Nullable` convention in `DESIGN.md` §6).
74
81
  *
75
82
  * @type {<I, T, R>({ init, update, end }: Accumulator<I, T, R>) => (input: List<I>) => Nullable<R>}
76
83
  */
@@ -2,9 +2,13 @@
2
2
  * Immutable list data structure utilities and combinators.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Nullable } from '../nullable/types.ts'
7
+ * @import {Scan, StateScan, Fold, Reduce, Equal} from '../function/operator/types.ts'
8
+ * @import { Accumulator, Concat, Entry, List, NonEmpty, NotLazy, Result, Thunk } from './types.ts'
5
9
  */
10
+
6
11
  import { identity, fn, compose } from '../function/module.f.mjs'
7
- /** @import { Nullable } from '../nullable/types.ts' */
8
12
  import {
9
13
  addition,
10
14
  logicalNot,
@@ -13,8 +17,6 @@ import {
13
17
  foldToScan,
14
18
  reduceToScan,
15
19
  } from '../function/operator/module.f.mjs'
16
- /** @import {Scan, StateScan, Fold, Reduce, Equal} from '../function/operator/types.ts' */
17
- /** @import { Accumulator, Concat, Entry, List, NonEmpty, NotLazy, Result, Thunk } from './types.ts' */
18
20
 
19
21
  export const fromArrayLike =
20
22
  /**
@@ -236,7 +238,7 @@ export const reduce = op => def => compose(scan(reduceToScan(op)))(last(def))
236
238
  * Folds `input` with an {@link Accumulator}, short-circuiting to `null` the
237
239
  * moment `update` rejects an item; otherwise finalizes with `end`. This is the
238
240
  * list-level `try*` sibling of {@link fold} for accumulations that can fail
239
- * partway through (see the `try*`/`Nullable` convention in `AGENTS.md`).
241
+ * partway through (see the `try*`/`Nullable` convention in `DESIGN.md` §6).
240
242
  *
241
243
  * @type {<I, T, R>({ init, update, end }: Accumulator<I, T, R>) => (input: List<I>) => Nullable<R>}
242
244
  */
@@ -1,4 +1,7 @@
1
- /** @import { Unknown } from '../../media/json/types.ts' */
1
+ /**
2
+ * @import { Unknown } from '../../media/json/types.ts'
3
+ * @import { List } from './types.ts'
4
+ */
2
5
  declare const stringifyTest: () => void;
3
6
  declare const countdownTest: () => void;
4
7
  declare const flatTest: () => void;
@@ -1,6 +1,8 @@
1
- /** @import { Unknown } from '../../media/json/types.ts' */
1
+ /**
2
+ * @import { Unknown } from '../../media/json/types.ts'
3
+ * @import { List } from './types.ts'
4
+ */
2
5
 
3
- /** @import { List } from './types.ts' */
4
6
  import { length, concat, countdown, cycle, drop, dropWhile, entries, every, filter, find, flat, flatMap, map, next, reduce, reverse, scan, some, take, takeWhile, toArray, zip, first, filterMap, isEmpty, equal, tryFold } from './module.f.mjs'
5
7
  import { stringify } from '../../media/json/module.f.mjs'
6
8
  import { sort } from '../object/module.f.mjs'
@@ -13,9 +13,10 @@
13
13
  * `ByteSet` is a `bigint`, which `JSON.stringify` cannot serialize.
14
14
  *
15
15
  * @module
16
+ *
17
+ * @import { Nibble, NibbleSet } from './types.ts'
16
18
  */
17
19
  import type { Nibble, NibbleSet } from './types.ts';
18
- /** @import { Nibble, NibbleSet } from './types.ts' */
19
20
  export declare const empty = 0;
20
21
  export declare const universe = 65535;
21
22
  /** @type {(n: Nibble) => (s: NibbleSet) => boolean} */
@@ -13,10 +13,10 @@
13
13
  * `ByteSet` is a `bigint`, which `JSON.stringify` cannot serialize.
14
14
  *
15
15
  * @module
16
+ *
17
+ * @import { Nibble, NibbleSet } from './types.ts'
16
18
  */
17
19
 
18
- /** @import { Nibble, NibbleSet } from './types.ts' */
19
-
20
20
  export const empty = 0
21
21
 
22
22
  export const universe = 0xFFFF
@@ -2,8 +2,9 @@
2
2
  * Nominal typing helpers for branded TypeScript types.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Nominal } from './types.ts'
5
7
  */
6
8
  import type { Nominal } from './types.ts';
7
- /** @import { Nominal } from './types.ts' */
8
9
  export declare const asNominal: <N extends string, R extends string, B>(b: B) => Nominal<N, R, B>;
9
10
  export declare const asBase: <T extends string, R extends string, B>(n: Nominal<T, R, B>) => B;
@@ -2,10 +2,11 @@
2
2
  * Nominal typing helpers for branded TypeScript types.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Nominal } from './types.ts'
5
7
  */
6
8
 
7
9
  import { identity } from "../function/module.f.mjs"
8
- /** @import { Nominal } from './types.ts' */
9
10
 
10
11
  export const asNominal =
11
12
  /** @type {<N extends string, R extends string, B>(b: B) => Nominal<N, R, B>} */
@@ -1,15 +1,35 @@
1
+ /**
2
+ * Utilities for nullable (`null`/`undefined`) value handling.
3
+ *
4
+ * @module
5
+ *
6
+ * @import { Option } from '../option/types.ts'
7
+ * @import { Nullable } from './types.ts'
8
+ */
1
9
  import type { Option } from '../option/types.ts';
2
10
  import type { Nullable } from './types.ts';
3
- /** @import { Option } from '../option/types.ts' */
4
- /** @import { Nullable } from './types.ts' */
5
11
  /**
6
- * @type {<T, R>(f: (value: T) => R) => (value: Nullable<T>) => Nullable<R>}
12
+ * Folds a `Nullable<T>` into a single value: `f` for a present value, `none`
13
+ * for `null`.
14
+ *
15
+ * The two branches carry independent result types, and `R2` lives on its own
16
+ * curry step on purpose. With `T`, `R1` and `R2` all on the outer generic they
17
+ * are instantiated together at `match(f)` — before `none` exists — so `R2` has
18
+ * nothing to infer from and collapses to `unknown`. Inferring it at the second
19
+ * call instead is what lets {@link map} be derived below.
20
+ *
21
+ * @type {<T, R1>(f: (_: T) => R1) => <R2>(none: () => R2) => (_: Nullable<T>) => R1 | R2}
7
22
  */
8
- export declare const map: <T, R>(f: (value: T) => R) => (value: Nullable<T>) => Nullable<R>;
23
+ export declare const match: <T, R1>(f: (_: T) => R1) => <R2>(none: () => R2) => (_: Nullable<T>) => R1 | R2;
9
24
  /**
10
- * @type {<T, R>(f: (_: T) => R) => (none: () => R) => (_: Nullable<T>) => Nullable<R>}
25
+ * Projects the present value of a `Nullable<T>`, passing `null` through.
26
+ *
27
+ * `map` is `match` with the absent branch fixed to `null`, so the
28
+ * `value === null` guard is written once, in `match`.
29
+ *
30
+ * @type {<T, R>(f: (value: T) => R) => (value: Nullable<T>) => Nullable<R>}
11
31
  */
12
- export declare const match: <T, R>(f: (_: T) => R) => (none: () => R) => (_: Nullable<T>) => Nullable<R>;
32
+ export declare const map: <T, R>(f: (value: T) => R) => (value: Nullable<T>) => Nullable<R>;
13
33
  /**
14
34
  * @type {<T>(value: Nullable<T>) => Option<T>}
15
35
  */
@@ -2,21 +2,40 @@
2
2
  * Utilities for nullable (`null`/`undefined`) value handling.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Option } from '../option/types.ts'
7
+ * @import { Nullable } from './types.ts'
5
8
  */
9
+
6
10
  import { assert } from '../../asserts/module.f.mjs'
7
11
  import { fn } from '../function/module.f.mjs'
8
- /** @import { Option } from '../option/types.ts' */
9
- /** @import { Nullable } from './types.ts' */
10
12
 
11
13
  /**
12
- * @type {<T, R>(f: (value: T) => R) => (value: Nullable<T>) => Nullable<R>}
14
+ * Folds a `Nullable<T>` into a single value: `f` for a present value, `none`
15
+ * for `null`.
16
+ *
17
+ * The two branches carry independent result types, and `R2` lives on its own
18
+ * curry step on purpose. With `T`, `R1` and `R2` all on the outer generic they
19
+ * are instantiated together at `match(f)` — before `none` exists — so `R2` has
20
+ * nothing to infer from and collapses to `unknown`. Inferring it at the second
21
+ * call instead is what lets {@link map} be derived below.
22
+ *
23
+ * @type {<T, R1>(f: (_: T) => R1) => <R2>(none: () => R2) => (_: Nullable<T>) => R1 | R2}
13
24
  */
14
- export const map = f => value => value === null ? null : f(value)
25
+ export const match = f => none => value => value === null ? none() : f(value)
26
+
27
+ /** The absent branch `map` fixes `match`'s `none` to. */
28
+ const noneIsNull = () => null
15
29
 
16
30
  /**
17
- * @type {<T, R>(f: (_: T) => R) => (none: () => R) => (_: Nullable<T>) => Nullable<R>}
31
+ * Projects the present value of a `Nullable<T>`, passing `null` through.
32
+ *
33
+ * `map` is `match` with the absent branch fixed to `null`, so the
34
+ * `value === null` guard is written once, in `match`.
35
+ *
36
+ * @type {<T, R>(f: (value: T) => R) => (value: Nullable<T>) => Nullable<R>}
18
37
  */
19
- export const match = f => none => value => value === null ? none() : f(value)
38
+ export const map = f => match(f)(noneIsNull)
20
39
 
21
40
  /**
22
41
  * @type {<T>(value: Nullable<T>) => Option<T>}
@@ -1 +1,5 @@
1
+ /**
2
+ * @import { Assert } from '../../asserts/types.ts'
3
+ * @import { Equal } from '../ts/types.ts'
4
+ */
1
5
  export declare const proof: (() => void)[];
@@ -1,3 +1,8 @@
1
+ /**
2
+ * @import { Assert } from '../../asserts/types.ts'
3
+ * @import { Equal } from '../ts/types.ts'
4
+ */
5
+
1
6
  import { fromUndefined, map, match, toOption } from './module.f.mjs'
2
7
  import { assert, assertEq } from '../../asserts/module.f.mjs'
3
8
 
@@ -24,6 +29,16 @@ export const proof = [
24
29
  assertEq(double(3), 6)
25
30
  assertEq(double(null), -1)
26
31
  },
32
+ () => {
33
+ // The two branches carry independent result types: `describe` is
34
+ // `(_: Nullable<number>) => number | string`, not one unified `R`.
35
+ /** @type {(v: number) => number} */
36
+ const twice = v => v * 2
37
+ const describe = match(twice)(() => 'none')
38
+ /** @typedef {Assert<Equal<ReturnType<typeof describe>, number | string>>} _Branches */
39
+ assertEq(describe(3), 6)
40
+ assertEq(describe(null), 'none')
41
+ },
27
42
  () => {
28
43
  assertEq(fromUndefined(undefined), null, 0)
29
44
  assertEq(fromUndefined(5), 5, 1)
@@ -3,6 +3,10 @@
3
3
  * `countOnes` for 32-bit population count using SWAR.
4
4
  *
5
5
  * @module
6
+ *
7
+ * @import { List } from '../list/types.ts'
8
+ * @import { Reduce } from '../function/operator/types.ts'
9
+ * @import { Sign } from '../function/compare/types.ts'
6
10
  */
7
11
  import type { List } from '../list/types.ts';
8
12
  import type { Sign } from '../function/compare/types.ts';
@@ -3,14 +3,15 @@
3
3
  * `countOnes` for 32-bit population count using SWAR.
4
4
  *
5
5
  * @module
6
+ *
7
+ * @import { List } from '../list/types.ts'
8
+ * @import { Reduce } from '../function/operator/types.ts'
9
+ * @import { Sign } from '../function/compare/types.ts'
6
10
  */
7
11
 
8
12
  import { reduce } from '../list/module.f.mjs'
9
- /** @import { List } from '../list/types.ts' */
10
13
  import { addition } from '../function/operator/module.f.mjs'
11
- /** @import { Reduce } from '../function/operator/types.ts' */
12
14
  import { cmp as uCmp, min as uMin, max as uMax } from '../function/compare/module.f.mjs'
13
- /** @import { Sign } from '../function/compare/types.ts' */
14
15
  import { fold } from '../../common/monoid/module.f.mjs'
15
16
 
16
17
  /** @type {(input: List<number>) => number} */
@@ -1,15 +1,27 @@
1
1
  /**
2
- * Plain-object helpers: safe property lookup via `at`, and conversions
3
- * between entries and `OrderedMap`. See `./types.ts` for the
2
+ * Plain-object helpers: safe property lookup via `at`, structural comparison
3
+ * via `structurallySame`, and conversions between entries and `OrderedMap`.
4
+ * See `./types.ts` for the
4
5
  * `OptionalMap`/`RequiredMap`/`StringMap`/`Entry`/`OneKey`/`SingleProperty`/
5
6
  * `NotUnion` type-level API.
6
7
  *
7
8
  * @module
9
+ *
10
+ * @import { List } from '../list/types.ts'
11
+ * @import { Nullable } from '../nullable/types.ts'
12
+ * @import { OrderedMap } from '../ordered_map/types.ts'
13
+ * @import { StringMap, Entry } from './types.ts'
8
14
  */
9
15
  import type { List } from '../list/types.ts';
10
16
  import type { Nullable } from '../nullable/types.ts';
11
17
  import type { OrderedMap } from '../ordered_map/types.ts';
12
18
  import type { StringMap, Entry } from './types.ts';
19
+ /**
20
+ * `structurallySame` is implemented in a dependency-free leaf so `fjs/asserts`
21
+ * can use it without the cycle `asserts -> object -> nullable -> asserts`; see
22
+ * `./structurally_same/README.md`. This module is its public home.
23
+ */
24
+ export { structurallySame } from './structurally_same/module.f.mjs';
13
25
  /** @type {(name: string) => <T>(object: StringMap<T>) => Nullable<Exclude<T, undefined>>} */
14
26
  export declare const at: (name: string) => <T>(object: StringMap<T>) => Nullable<Exclude<T, undefined>>;
15
27
  /** @type {<T>(e: List<Entry<T>>) => List<Entry<T>>} */
@@ -29,5 +41,15 @@ export declare const isObject: (value: unknown) => value is { readonly [k in str
29
41
  * @type {<T>(map: StringMap<Exclude<T, undefined>>) => readonly Exclude<T, undefined>[]}
30
42
  */
31
43
  export declare const definedValues: <T>(map: StringMap<Exclude<T, undefined>>) => readonly Exclude<T, undefined>[];
32
- /** @type {<T>(cmd: StringMap<Exclude<T, undefined>>) => readonly (readonly [string, Exclude<T, undefined>])[]} */
33
- export declare const definedEntries: <T>(cmd: StringMap<Exclude<T, undefined>>) => readonly (readonly [string, Exclude<T, undefined>])[];
44
+ /**
45
+ * Returns only the defined (non-undefined) entries of a partial record.
46
+ *
47
+ * `T` is the record's own value type, which `StringMap` already makes
48
+ * optional. Writing the parameter as `StringMap<Exclude<T, undefined>>`
49
+ * instead would leave `T` in a non-inference position, so a record whose value
50
+ * type is itself generic — the leaf-parameterized JSON tree, say — could not
51
+ * be passed at all.
52
+ *
53
+ * @type {<T>(cmd: StringMap<T>) => readonly Entry<T>[]}
54
+ */
55
+ export declare const definedEntries: <T>(cmd: StringMap<T>) => readonly Entry<T>[];