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,20 +1,29 @@
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
 
10
16
  import { isArray } from '../array/module.f.mjs'
11
17
  import { iterable } from '../list/module.f.mjs'
12
- /** @import { List } from '../list/types.ts' */
13
18
  import { fromUndefined } from '../nullable/module.f.mjs'
14
- /** @import { Nullable } from '../nullable/types.ts' */
15
19
  import { entries as mapEntries, fromEntries as mapFromEntries } from '../ordered_map/module.f.mjs'
16
- /** @import { OrderedMap } from '../ordered_map/types.ts' */
17
- /** @import { StringMap, Entry } from './types.ts' */
20
+
21
+ /**
22
+ * `structurallySame` is implemented in a dependency-free leaf so `fjs/asserts`
23
+ * can use it without the cycle `asserts -> object -> nullable -> asserts`; see
24
+ * `./structurally_same/README.md`. This module is its public home.
25
+ */
26
+ export { structurallySame } from './structurally_same/module.f.mjs'
18
27
 
19
28
  const { getOwnPropertyDescriptor, fromEntries: objectFromEntries } = Object
20
29
 
@@ -52,7 +61,17 @@ export const definedValues =
52
61
  map =>
53
62
  values(map).filter(v => v !== undefined)
54
63
 
55
- /** @type {<T>(cmd: StringMap<Exclude<T, undefined>>) => readonly (readonly [string, Exclude<T, undefined>])[]} */
64
+ /**
65
+ * Returns only the defined (non-undefined) entries of a partial record.
66
+ *
67
+ * `T` is the record's own value type, which `StringMap` already makes
68
+ * optional. Writing the parameter as `StringMap<Exclude<T, undefined>>`
69
+ * instead would leave `T` in a non-inference position, so a record whose value
70
+ * type is itself generic — the leaf-parameterized JSON tree, say — could not
71
+ * be passed at all.
72
+ *
73
+ * @type {<T>(cmd: StringMap<T>) => readonly Entry<T>[]}
74
+ */
56
75
  export const definedEntries =
57
76
  cmd =>
58
77
  entries(cmd).flatMap(([a, b]) => b === undefined ? [] : [[a, b]])
@@ -1,3 +1,8 @@
1
+ /**
2
+ * @import { OptionalMap, RequiredMap, StringMap } from './types.ts'
3
+ * @import { Assert } from '../../asserts/types.ts'
4
+ * @import { Equal } from '../ts/types.ts'
5
+ */
1
6
  import type { OptionalMap, RequiredMap, StringMap } from './types.ts';
2
7
  import type { Assert } from '../../asserts/types.ts';
3
8
  import type { Equal } from '../ts/types.ts';
@@ -13,8 +18,6 @@ export type _RequiredIsRequired = Assert<Equal<RequiredMap<'a' | 'b', bigint>, {
13
18
  readonly b: bigint;
14
19
  }>>;
15
20
  export type _RequiredOverAnyStringIsNever = Assert<Equal<RequiredMap<string, bigint>, never>>;
16
- /** @import { Assert } from '../../asserts/types.ts' */
17
- /** @import { Equal } from '../ts/types.ts' */
18
21
  /** @typedef {Assert<Equal<StringMap<bigint>, { readonly [k in string]?: bigint }>>} _StringMapIsOptional */
19
22
  /** @typedef {Assert<Equal<OptionalMap<'a'|'b', bigint>, { readonly a?: bigint; readonly b?: bigint }>>} _OptionalIsPartial */
20
23
  /** @typedef {Assert<Equal<RequiredMap<'a'|'b', bigint>, { readonly a: bigint; readonly b: bigint }>>} _RequiredIsRequired */
@@ -1,8 +1,11 @@
1
+ /**
2
+ * @import { OptionalMap, RequiredMap, StringMap } from './types.ts'
3
+ * @import { Assert } from '../../asserts/types.ts'
4
+ * @import { Equal } from '../ts/types.ts'
5
+ */
6
+
1
7
  import { at } from './module.f.mjs'
2
- /** @import { OptionalMap, RequiredMap, StringMap } from './types.ts' */
3
8
  import { assertEq } from '../../asserts/module.f.mjs'
4
- /** @import { Assert } from '../../asserts/types.ts' */
5
- /** @import { Equal } from '../ts/types.ts' */
6
9
 
7
10
  /** @typedef {Assert<Equal<StringMap<bigint>, { readonly [k in string]?: bigint }>>} _StringMapIsOptional */
8
11
 
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Structural comparison for FunctionalScript data.
3
+ *
4
+ * `structurallySame` answers "do these two independently constructed values
5
+ * have the same shape and the same leaves?" — the question proofs really ask
6
+ * when they compare a computed value against an expected one. It is scoped to
7
+ * FunctionalScript data (primitives, arrays, and record-like objects) and
8
+ * deliberately says nothing about dates, maps, sets, typed arrays, prototypes,
9
+ * or property descriptors; see the README for what it does *not* promise.
10
+ *
11
+ * This module is a dependency-free leaf on purpose. `fjs/asserts` needs the
12
+ * comparison for `assertStructurallySame`, and the public object module
13
+ * (`../module.f.mjs`) reaches `fjs/asserts` through `types/nullable`, so
14
+ * importing anything here would close the cycle
15
+ * `asserts -> object -> nullable -> asserts`. Keep it importing nothing.
16
+ *
17
+ * @module
18
+ */
19
+ /**
20
+ * Compares two values structurally.
21
+ *
22
+ * - `Object.is` decides first, so `NaN` equals itself, `0` and `-0` differ, and
23
+ * an object is trivially the same as itself.
24
+ * - Anything else that is not a non-null object differs.
25
+ * - Arrays match arrays of the same length whose elements match pairwise; an
26
+ * array never matches a non-array. Arrays are assumed dense — FunctionalScript
27
+ * cannot build a sparse one; see the README.
28
+ * - Other objects match when their own enumerable string properties form the
29
+ * same set — order is irrelevant — and every property's value matches. A
30
+ * property whose value is `undefined` is a property: `{ a: undefined }` and
31
+ * `{}` differ.
32
+ *
33
+ * There is no cycle detection: a self-referential value recurses until the
34
+ * stack runs out. FunctionalScript data is acyclic, and adding a seen-set would
35
+ * cost every ordinary comparison for a case that cannot arise.
36
+ *
37
+ * @type {(a: unknown, b: unknown) => boolean}
38
+ */
39
+ export declare const structurallySame: (a: unknown, b: unknown) => boolean;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Structural comparison for FunctionalScript data.
3
+ *
4
+ * `structurallySame` answers "do these two independently constructed values
5
+ * have the same shape and the same leaves?" — the question proofs really ask
6
+ * when they compare a computed value against an expected one. It is scoped to
7
+ * FunctionalScript data (primitives, arrays, and record-like objects) and
8
+ * deliberately says nothing about dates, maps, sets, typed arrays, prototypes,
9
+ * or property descriptors; see the README for what it does *not* promise.
10
+ *
11
+ * This module is a dependency-free leaf on purpose. `fjs/asserts` needs the
12
+ * comparison for `assertStructurallySame`, and the public object module
13
+ * (`../module.f.mjs`) reaches `fjs/asserts` through `types/nullable`, so
14
+ * importing anything here would close the cycle
15
+ * `asserts -> object -> nullable -> asserts`. Keep it importing nothing.
16
+ *
17
+ * @module
18
+ */
19
+
20
+ const { entries, is } = Object
21
+
22
+ /**
23
+ * Compares two values structurally.
24
+ *
25
+ * - `Object.is` decides first, so `NaN` equals itself, `0` and `-0` differ, and
26
+ * an object is trivially the same as itself.
27
+ * - Anything else that is not a non-null object differs.
28
+ * - Arrays match arrays of the same length whose elements match pairwise; an
29
+ * array never matches a non-array. Arrays are assumed dense — FunctionalScript
30
+ * cannot build a sparse one; see the README.
31
+ * - Other objects match when their own enumerable string properties form the
32
+ * same set — order is irrelevant — and every property's value matches. A
33
+ * property whose value is `undefined` is a property: `{ a: undefined }` and
34
+ * `{}` differ.
35
+ *
36
+ * There is no cycle detection: a self-referential value recurses until the
37
+ * stack runs out. FunctionalScript data is acyclic, and adding a seen-set would
38
+ * cost every ordinary comparison for a case that cannot arise.
39
+ *
40
+ * @type {(a: unknown, b: unknown) => boolean}
41
+ */
42
+ export const structurallySame = (a, b) => {
43
+ if (is(a, b)) { return true }
44
+ if (
45
+ typeof a !== 'object' || a === null ||
46
+ typeof b !== 'object' || b === null
47
+ ) { return false }
48
+ if (a instanceof Array) {
49
+ return b instanceof Array
50
+ && a.length === b.length
51
+ && a.every((v, i) => structurallySame(v, b[i]))
52
+ }
53
+ if (b instanceof Array) { return false }
54
+ const ae = entries(a)
55
+ /** @type {ReadonlyMap<string, unknown>} */
56
+ const bm = new Map(entries(b))
57
+ return ae.length === bm.size
58
+ && ae.every(([k, v]) => bm.has(k) && structurallySame(v, bm.get(k)))
59
+ }
@@ -0,0 +1,6 @@
1
+ export declare const proof: {
2
+ primitives: (() => void)[];
3
+ identity: (() => void)[];
4
+ arrays: (() => void)[];
5
+ objects: (() => void)[];
6
+ };
@@ -0,0 +1,73 @@
1
+ import { assert } from '../../../asserts/module.f.mjs'
2
+ import { structurallySame } from './module.f.mjs'
3
+
4
+ /** @type {(a: unknown, b: unknown) => void} */
5
+ const same = (a, b) => assert(structurallySame(a, b), ['same', a, b])
6
+
7
+ /** @type {(a: unknown, b: unknown) => void} */
8
+ const differ = (a, b) => assert(!structurallySame(a, b), ['differ', a, b])
9
+
10
+ export const proof = {
11
+ primitives: [
12
+ // `Object.is` decides, so `NaN` is its own equal...
13
+ () => same(Number.NaN, Number.NaN),
14
+ () => same(42, 42),
15
+ () => same('a', 'a'),
16
+ () => same(undefined, undefined),
17
+ () => same(null, null),
18
+ // ...and the two zeros are not.
19
+ () => differ(0, -0),
20
+ () => differ(1, 2),
21
+ () => differ('a', 'b'),
22
+ () => differ(null, undefined),
23
+ // a non-object on either side ends it
24
+ () => differ(1, {}),
25
+ () => differ({}, 1),
26
+ () => differ(null, {}),
27
+ () => differ({}, null),
28
+ ],
29
+ identity: [
30
+ // the same reference short-circuits before any traversal
31
+ () => {
32
+ const a = /** @type {const} */ ({ x: [1, 2] })
33
+ same(a, a)
34
+ },
35
+ ],
36
+ arrays: [
37
+ () => same([], []),
38
+ () => same([1, { a: 2 }], [1, { a: 2 }]),
39
+ // length first, then elementwise
40
+ () => differ([1], [1, 2]),
41
+ () => differ([1, 2], [2, 1]),
42
+ // an array is never the same as a non-array, in either position.
43
+ // `differ([], {})` alone does not pin this: it already fails on
44
+ // `0 === undefined`, so only an array-like with a matching `length`
45
+ // reaches the `b instanceof Array` check.
46
+ () => differ([], {}),
47
+ () => differ({}, []),
48
+ () => differ([1, 2], { 0: 1, 1: 2, length: 2 }),
49
+ // an explicitly `undefined` element is an ordinary element, so it
50
+ // counts towards the length
51
+ () => same([undefined], [undefined]),
52
+ () => differ([undefined], [1]),
53
+ () => differ([undefined], []),
54
+ ],
55
+ objects: [
56
+ () => same({}, {}),
57
+ // property order is not part of the structure
58
+ () => same({ a: 1, b: { c: 2 } }, { b: { c: 2 }, a: 1 }),
59
+ // same count, different names. The first is settled by the values
60
+ // (`1` vs `undefined`); only the second — disjoint names *and*
61
+ // `undefined` on both sides — pins the key-set check itself.
62
+ () => differ({ a: 1 }, { b: 1 }),
63
+ () => differ({ a: undefined }, { b: undefined }),
64
+ // same names, different values
65
+ () => differ({ a: 1 }, { a: 2 }),
66
+ () => differ({ a: { b: 1 } }, { a: { b: 2 } }),
67
+ // different counts
68
+ () => differ({ a: 1 }, { a: 1, b: 2 }),
69
+ // an `undefined`-valued property is still a property
70
+ () => differ({ a: undefined }, {}),
71
+ () => differ({}, { a: undefined }),
72
+ ],
73
+ }
@@ -2,6 +2,11 @@
2
2
  * Ordered map operations with deterministic key traversal.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Sign } from '../function/compare/types.ts'
7
+ * @import { List } from '../list/types.ts'
8
+ * @import { Reduce } from '../function/operator/types.ts'
9
+ * @import { Entry, OrderedMap } from './types.ts'
5
10
  */
6
11
  import type { List } from '../list/types.ts';
7
12
  import type { Reduce } from '../function/operator/types.ts';
@@ -2,18 +2,19 @@
2
2
  * Ordered map operations with deterministic key traversal.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Sign } from '../function/compare/types.ts'
7
+ * @import { List } from '../list/types.ts'
8
+ * @import { Reduce } from '../function/operator/types.ts'
9
+ * @import { Entry, OrderedMap } from './types.ts'
5
10
  */
6
11
 
7
12
  import { value, find } from '../btree/find/module.f.mjs'
8
13
  import { set } from '../btree/set/module.f.mjs'
9
14
  import { remove as btreeRemove } from '../btree/remove/module.f.mjs'
10
15
  import { values } from '../btree/module.f.mjs'
11
- /** @import { Sign } from '../function/compare/types.ts' */
12
16
  import { cmp } from '../string/module.f.mjs'
13
- /** @import { List } from '../list/types.ts' */
14
17
  import { fold } from '../list/module.f.mjs'
15
- /** @import { Reduce } from '../function/operator/types.ts' */
16
- /** @import { Entry, OrderedMap } from './types.ts' */
17
18
 
18
19
  /** @type {(a: string) => <T>(b: Entry<T>) => Sign} */
19
20
  const keyCmp = a => ([b]) => cmp(a)(b)
@@ -1,3 +1,6 @@
1
+ /**
2
+ * @import { OrderedMap } from './types.ts'
3
+ */
1
4
  export declare const proof: {
2
5
  main: (() => void)[];
3
6
  fromEntries: () => void;
@@ -1,5 +1,8 @@
1
+ /**
2
+ * @import { OrderedMap } from './types.ts'
3
+ */
4
+
1
5
  import { at, setReplace, setReduce, empty, entries, remove, fromEntries } from './module.f.mjs'
2
- /** @import { OrderedMap } from './types.ts' */
3
6
  import { toArray } from '../list/module.f.mjs'
4
7
  import { assertEq } from '../../asserts/module.f.mjs'
5
8
 
@@ -2,9 +2,10 @@
2
2
  * Streaming Patricia trie for building content-addressed binary trees from sorted leaf sequences.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Candidate, Create, PatriciaTrie } from './types.ts'
5
7
  */
6
8
  import type { Create, PatriciaTrie } from './types.ts';
7
- /** @import { Candidate, Create, PatriciaTrie } from './types.ts' */
8
9
  /**
9
10
  * Creates a Patricia trie whose node merging is delegated to `create`.
10
11
  *
@@ -2,9 +2,11 @@
2
2
  * Streaming Patricia trie for building content-addressed binary trees from sorted leaf sequences.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Candidate, Create, PatriciaTrie } from './types.ts'
5
7
  */
6
8
 
7
- /** @import { Candidate, Create, PatriciaTrie } from './types.ts' */
9
+ import { splitLast } from '../array/module.f.mjs'
8
10
 
9
11
  /**
10
12
  * Creates a Patricia trie whose node merging is delegated to `create`.
@@ -14,24 +16,37 @@
14
16
  export const patriciaTrie = create => ({
15
17
  push: (c, [storage, stack]) => {
16
18
  const [u] = c
17
- while (stack.length >= 2) {
18
- const [rLeaf, rHash] = stack[stack.length - 1]
19
- const [lLeaf, lHash] = stack[stack.length - 2]
19
+ // Carry propagation: merge the top two candidates for as long as they
20
+ // are more tightly coupled to each other than the right one is to the
21
+ // incoming leaf. Genuinely sequential each merge decides whether the
22
+ // next one happens — so the loop stays, but the stack is read by
23
+ // splitting rather than by index arithmetic. Either split answering
24
+ // `null` means fewer than two candidates are left, which is where the
25
+ // old `stack.length >= 2` guard stopped.
26
+ while (true) {
27
+ const top = splitLast(stack)
28
+ if (top === null) { break }
29
+ const [belowR, [rLeaf, rHash]] = top
30
+ const below = splitLast(belowR)
31
+ if (below === null) { break }
32
+ const [rest, [lLeaf, lHash]] = below
20
33
  if ((lLeaf ^ rLeaf) >= (rLeaf ^ u)) { break }
21
34
  const [h, newS] = create(lHash, rHash, storage)
22
35
  storage = newS
23
- stack = [...stack.slice(0, -2), [rLeaf, h]]
36
+ stack = [...rest, [rLeaf, h]]
24
37
  }
25
38
  return [storage, [...stack, c]]
26
39
  },
40
+ // Drain the right spine into a root: a right fold whose seed is the last
41
+ // candidate's identity. `splitLast` supplies both halves at once, so the
42
+ // empty stack is the `null` branch rather than a separate length guard.
27
43
  end: ([storage, stack]) => {
28
- if (stack.length === 0) { return [undefined, storage] }
29
- let h = stack[stack.length - 1][1]
30
- for (let i = stack.length - 2; i >= 0; i--) {
31
- const lHash = stack[i][1];
32
- [h, storage] = create(lHash, h, storage)
33
- }
34
- return [h, storage]
44
+ const split = splitLast(stack)
45
+ if (split === null) { return [undefined, storage] }
46
+ const [rest, [, lastHash]] = split
47
+ return rest.reduceRight(
48
+ ([h, s], [, lHash]) => create(lHash, h, s),
49
+ /** @type {readonly [typeof lastHash, typeof storage]} */([lastHash, storage]))
35
50
  }
36
51
  })
37
52
 
@@ -1,3 +1,6 @@
1
+ /**
2
+ * @import { State } from './types.ts'
3
+ */
1
4
  export type _NodeList = readonly [bigint, bigint, bigint][];
2
5
  declare const empty: () => void;
3
6
  declare const singleLeaf: () => void;
@@ -1,6 +1,9 @@
1
+ /**
2
+ * @import { State } from './types.ts'
3
+ */
4
+
1
5
  import { assert, assertEq } from '../../asserts/module.f.mjs'
2
6
  import { emptyState, patriciaTrie } from './module.f.mjs'
3
- /** @import { State } from './types.ts' */
4
7
 
5
8
  /** @typedef {readonly [bigint, bigint, bigint][]} _NodeList */
6
9
 
@@ -5,10 +5,12 @@
5
5
  * `p % 4 === 3`.
6
6
  *
7
7
  * @module
8
+ *
9
+ * @import { Reduce, Unary } from '../bigint/types.ts'
10
+ * @import { PrimeField } from './types.ts'
8
11
  */
9
12
  import type { Unary } from '../bigint/types.ts';
10
13
  import type { PrimeField } from './types.ts';
11
- /** @import { PrimeField } from './types.ts' */
12
14
  /**
13
15
  * Creates a prime field with the specified prime modulus and associated operations.
14
16
  *
@@ -5,12 +5,13 @@
5
5
  * `p % 4 === 3`.
6
6
  *
7
7
  * @module
8
+ *
9
+ * @import { Reduce, Unary } from '../bigint/types.ts'
10
+ * @import { PrimeField } from './types.ts'
8
11
  */
9
12
 
10
- /** @import { Reduce, Unary } from '../bigint/types.ts' */
11
13
  import { repeat } from '../../common/monoid/module.f.mjs'
12
14
  import { assertNotNullish } from '../../asserts/module.f.mjs'
13
- /** @import { PrimeField } from './types.ts' */
14
15
 
15
16
  /**
16
17
  * Creates a prime field with the specified prime modulus and associated operations.
@@ -2,9 +2,10 @@
2
2
  * Range and interval utilities for numeric boundaries.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Range } from './types.ts'
5
7
  */
6
8
  import type { Range } from './types.ts';
7
- /** @import { Range } from './types.ts' */
8
9
  /** @type {(...range: Range) => (i: number) => boolean} */
9
10
  export declare const contains: (...range: Range) => (i: number) => boolean;
10
11
  /** @type {(i: number) => Range} */
@@ -2,10 +2,10 @@
2
2
  * Range and interval utilities for numeric boundaries.
3
3
  *
4
4
  * @module
5
+ *
6
+ * @import { Range } from './types.ts'
5
7
  */
6
8
 
7
- /** @import { Range } from './types.ts' */
8
-
9
9
  /** @type {(...range: Range) => (i: number) => boolean} */
10
10
  export const contains = (b, e) => i => b <= i && i <= e
11
11
 
@@ -34,6 +34,12 @@
34
34
  * //
35
35
  * if (get(16) !== 0) { throw 'error' }
36
36
  * ```
37
+ *
38
+ * @import { TailReduce, ReduceOp } from '../sorted_list/types.ts'
39
+ * @import { Nullable } from '../nullable/types.ts'
40
+ * @import { Equal } from '../function/operator/types.ts'
41
+ * @import { Range } from '../range/types.ts'
42
+ * @import { Entry, Properties, RangeMapArray, RangeMapOp, RangeMerge, } from './types.ts'
37
43
  */
38
44
  import type { Nullable } from '../nullable/types.ts';
39
45
  import type { Range } from '../range/types.ts';
@@ -34,21 +34,18 @@
34
34
  * //
35
35
  * if (get(16) !== 0) { throw 'error' }
36
36
  * ```
37
+ *
38
+ * @import { TailReduce, ReduceOp } from '../sorted_list/types.ts'
39
+ * @import { Nullable } from '../nullable/types.ts'
40
+ * @import { Equal } from '../function/operator/types.ts'
41
+ * @import { Range } from '../range/types.ts'
42
+ * @import { Entry, Properties, RangeMapArray, RangeMapOp, RangeMerge, } from './types.ts'
37
43
  */
38
44
 
39
45
  import { genericMerge } from '../sorted_list/module.f.mjs'
40
- /** @import { TailReduce, ReduceOp } from '../sorted_list/types.ts' */
41
46
  import { next } from '../list/module.f.mjs'
42
- /** @import { Nullable } from '../nullable/types.ts' */
43
47
  import { cmp } from '../number/module.f.mjs'
44
48
  import { bsearch } from '../function/compare/module.f.mjs'
45
- /** @import { Equal } from '../function/operator/types.ts' */
46
- /** @import { Range } from '../range/types.ts' */
47
- /**
48
- * @import {
49
- * Entry, Properties, RangeMapArray, RangeMapOp, RangeMerge,
50
- * } from './types.ts'
51
- */
52
49
 
53
50
  /** @template T @typedef {Nullable<Entry<T>>} _RangeState */
54
51
 
@@ -1,4 +1,8 @@
1
- /** @import { Unknown } from '../../media/json/types.ts' */
1
+ /**
2
+ * @import { Unknown } from '../../media/json/types.ts'
3
+ * @import { RangeMapArray, Properties, RangeMap } from './types.ts'
4
+ * @import { SortedSet } from '../sorted_set/types.ts'
5
+ */
2
6
  export declare const proof: {
3
7
  example: () => void;
4
8
  merge: (() => void)[];
@@ -1,11 +1,13 @@
1
- /** @import { Unknown } from '../../media/json/types.ts' */
1
+ /**
2
+ * @import { Unknown } from '../../media/json/types.ts'
3
+ * @import { RangeMapArray, Properties, RangeMap } from './types.ts'
4
+ * @import { SortedSet } from '../sorted_set/types.ts'
5
+ */
2
6
 
3
- /** @import { RangeMapArray, Properties, RangeMap } from './types.ts' */
4
7
  import { get, merge, fromRange, rangeMap } from './module.f.mjs'
5
8
  import { stringify } from '../../media/json/module.f.mjs'
6
9
  import { sort } from '../object/module.f.mjs'
7
10
  import { union } from '../sorted_set/module.f.mjs'
8
- /** @import { SortedSet } from '../sorted_set/types.ts' */
9
11
  import { equal, toArray } from '../list/module.f.mjs'
10
12
  import { strictEqual } from '../function/operator/module.f.mjs'
11
13
  import { cmp } from '../string/module.f.mjs'
@@ -1,3 +1,8 @@
1
+ /**
2
+ * A set of numeric ranges, represented as a `range_map` of `boolean`.
3
+ *
4
+ * @module
5
+ */
1
6
  /**
2
7
  * Constructs a range set containing a single numeric range.
3
8
  */
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * @module
5
5
  */
6
+
6
7
  import { rangeMap } from '../range_map/module.f.mjs'
7
8
 
8
9
  const map = rangeMap({
@@ -1 +1,4 @@
1
+ /**
2
+ * @import { Range } from '../range/types.ts'
3
+ */
1
4
  export declare const proof: () => void;
@@ -1,7 +1,10 @@
1
+ /**
2
+ * @import { Range } from '../range/types.ts'
3
+ */
4
+
1
5
  import { assert } from '../../asserts/module.f.mjs'
2
6
  import { toArray } from '../list/module.f.mjs'
3
7
  import { fromRange, merge, get } from './module.f.mjs'
4
- /** @import { Range } from '../range/types.ts' */
5
8
 
6
9
  /** @type {(a: string) => number} */
7
10
  const c = a => a.charCodeAt(0)
@@ -1,3 +1,11 @@
1
+ /**
2
+ * Impure `Result` companions: capture thrown exceptions as `Result` values,
3
+ * since `try`/`catch` is not allowed in FunctionalScript itself.
4
+ *
5
+ * @module
6
+ *
7
+ * @import { Result } from './types.ts'
8
+ */
1
9
  import type { Result } from './types.ts';
2
10
  /** @type {<T>(f: () => T) => Result<T, unknown>} */
3
11
  export declare const tryCatch: <T>(f: () => T) => Result<T, unknown>;