functionalscript 0.44.0 → 0.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. package/fjs/asn.1/proof.f.d.mts +5 -0
  2. package/fjs/asn.1/proof.f.mjs +15 -3
  3. package/fjs/asserts/module.f.d.mts +14 -0
  4. package/fjs/asserts/module.f.mjs +20 -0
  5. package/fjs/asserts/proof.f.d.mts +3 -0
  6. package/fjs/asserts/proof.f.mjs +15 -1
  7. package/fjs/basen/base128/proof.f.d.mts +3 -1
  8. package/fjs/basen/base128/proof.f.mjs +3 -1
  9. package/fjs/basen/base64/module.f.mjs +7 -3
  10. package/fjs/basen/base64/proof.f.d.mts +3 -1
  11. package/fjs/basen/base64/proof.f.mjs +7 -4
  12. package/fjs/basen/cbase32/proof.f.d.mts +3 -1
  13. package/fjs/basen/cbase32/proof.f.mjs +3 -1
  14. package/fjs/bnf/data/proof.f.mjs +0 -1
  15. package/fjs/bnf/descent/module.f.d.mts +17 -2
  16. package/fjs/bnf/descent/module.f.mjs +118 -41
  17. package/fjs/bnf/descent/proof.f.d.mts +1 -0
  18. package/fjs/bnf/descent/proof.f.mjs +77 -1
  19. package/fjs/bnf/descent/types.d.ts +12 -4
  20. package/fjs/bnf/ll1/module.f.d.mts +28 -2
  21. package/fjs/bnf/ll1/module.f.mjs +180 -38
  22. package/fjs/bnf/ll1/proof.f.d.mts +2 -0
  23. package/fjs/bnf/ll1/proof.f.mjs +62 -1
  24. package/fjs/bnf/ll1/types.d.ts +14 -8
  25. package/fjs/bnf/module.f.d.mts +15 -6
  26. package/fjs/bnf/module.f.mjs +52 -11
  27. package/fjs/bnf/proof.f.d.mts +2 -0
  28. package/fjs/bnf/proof.f.mjs +79 -3
  29. package/fjs/bnf/token_symbol/module.f.d.mts +4 -3
  30. package/fjs/bnf/token_symbol/module.f.mjs +7 -6
  31. package/fjs/bnf/token_symbol/proof.f.mjs +5 -2
  32. package/fjs/bnf/token_symbol/types.d.ts +2 -2
  33. package/fjs/bnf/types.d.ts +10 -3
  34. package/fjs/cas/cli/proof.f.d.mts +3 -1
  35. package/fjs/cas/cli/proof.f.mjs +3 -1
  36. package/fjs/cas/evo/module.f.d.mts +7 -13
  37. package/fjs/cas/evo/module.f.mjs +103 -96
  38. package/fjs/cas/evo/proof.f.mjs +6 -3
  39. package/fjs/cas/module.f.mjs +96 -109
  40. package/fjs/ci/common/module.f.d.mts +1 -1
  41. package/fjs/ci/common/module.f.mjs +1 -0
  42. package/fjs/ci/config/module.f.d.mts +2 -2
  43. package/fjs/ci/config/module.f.mjs +2 -2
  44. package/fjs/ci/nix/proof.f.d.mts +2 -0
  45. package/fjs/ci/nix/proof.f.mjs +2 -2
  46. package/fjs/ci/proof.f.d.mts +4 -2
  47. package/fjs/ci/proof.f.mjs +4 -3
  48. package/fjs/cli/proof.f.d.mts +4 -2
  49. package/fjs/cli/proof.f.mjs +4 -2
  50. package/fjs/common/monoid/module.f.d.mts +70 -12
  51. package/fjs/common/monoid/module.f.mjs +177 -14
  52. package/fjs/common/monoid/proof.f.d.mts +12 -1
  53. package/fjs/common/monoid/proof.f.mjs +88 -4
  54. package/fjs/common/monoid/types.d.ts +23 -0
  55. package/fjs/crypto/secp/proof.f.d.mts +3 -1
  56. package/fjs/crypto/secp/proof.f.mjs +3 -1
  57. package/fjs/crypto/sha2/proof.f.d.mts +3 -1
  58. package/fjs/crypto/sha2/proof.f.mjs +3 -1
  59. package/fjs/crypto/vdf/module.f.d.mts +23 -4
  60. package/fjs/crypto/vdf/module.f.mjs +6 -4
  61. package/fjs/dev/module.f.d.mts +5 -2
  62. package/fjs/dev/module.f.mjs +5 -4
  63. package/fjs/dev/package_json/module.f.d.mts +7 -0
  64. package/fjs/dev/package_json/module.f.mjs +10 -7
  65. package/fjs/dev/update/module.f.d.mts +3 -0
  66. package/fjs/dev/update/module.f.mjs +3 -2
  67. package/fjs/dev/update/proof.f.d.mts +3 -0
  68. package/fjs/dev/update/proof.f.mjs +1 -2
  69. package/fjs/djs/parser/module.f.d.mts +3 -0
  70. package/fjs/djs/parser/module.f.mjs +18 -0
  71. package/fjs/djs/parser/proof.f.d.mts +3 -0
  72. package/fjs/djs/parser/proof.f.mjs +13 -1
  73. package/fjs/djs/proof.f.d.mts +3 -0
  74. package/fjs/djs/proof.f.mjs +4 -1
  75. package/fjs/djs/serializer/module.f.mjs +5 -4
  76. package/fjs/djs/tokenizer/module.f.mjs +21 -13
  77. package/fjs/djs/tokenizer/proof.f.d.mts +3 -0
  78. package/fjs/djs/tokenizer/proof.f.mjs +14 -2
  79. package/fjs/djs/transpiler/module.f.d.mts +1 -12
  80. package/fjs/djs/transpiler/module.f.mjs +1 -20
  81. package/fjs/djs/transpiler/types.d.ts +25 -0
  82. package/fjs/effects/eff/module.f.d.mts +10 -0
  83. package/fjs/effects/eff/module.f.mjs +4 -2
  84. package/fjs/effects/eff/proof.f.d.mts +3 -0
  85. package/fjs/effects/eff/proof.f.mjs +4 -1
  86. package/fjs/effects/list/module.f.d.mts +10 -2
  87. package/fjs/effects/list/module.f.mjs +4 -2
  88. package/fjs/effects/memory/module.f.d.mts +4 -2
  89. package/fjs/effects/memory/module.f.mjs +4 -3
  90. package/fjs/effects/memory/proof.f.d.mts +4 -0
  91. package/fjs/effects/memory/proof.f.mjs +5 -2
  92. package/fjs/effects/mock/module.f.d.mts +10 -2
  93. package/fjs/effects/mock/module.f.mjs +4 -2
  94. package/fjs/effects/module.d.mts +8 -0
  95. package/fjs/effects/module.f.d.mts +6 -4
  96. package/fjs/effects/module.f.mjs +6 -5
  97. package/fjs/effects/module.mjs +9 -1
  98. package/fjs/effects/node/memory/module.d.mts +3 -0
  99. package/fjs/effects/node/memory/module.mjs +3 -2
  100. package/fjs/effects/node/memory/proof.d.mts +2 -0
  101. package/fjs/effects/node/memory/proof.mjs +2 -1
  102. package/fjs/effects/node/module.d.mts +5 -0
  103. package/fjs/effects/node/module.f.d.mts +17 -12
  104. package/fjs/effects/node/module.f.mjs +6 -12
  105. package/fjs/effects/node/module.mjs +5 -17
  106. package/fjs/effects/node/virtual/module.f.d.mts +6 -3
  107. package/fjs/effects/node/virtual/module.f.mjs +6 -5
  108. package/fjs/effects/node/virtual/proof.f.d.mts +4 -1
  109. package/fjs/effects/node/virtual/proof.f.mjs +13 -1
  110. package/fjs/effects/proof.f.d.mts +3 -0
  111. package/fjs/effects/proof.f.mjs +4 -1
  112. package/fjs/emergent_testing/all.test.d.mts +8 -0
  113. package/fjs/emergent_testing/all.test.mjs +14 -0
  114. package/fjs/emergent_testing/module.f.d.mts +6 -1
  115. package/fjs/emergent_testing/module.f.mjs +40 -66
  116. package/fjs/emergent_testing/proof.f.mjs +5 -5
  117. package/fjs/fsc/bnf.f.d.mts +3 -0
  118. package/fjs/fsc/bnf.f.mjs +4 -1
  119. package/fjs/fsc/json.f.d.mts +3 -0
  120. package/fjs/fsc/json.f.mjs +4 -1
  121. package/fjs/fsc/module.f.d.mts +9 -0
  122. package/fjs/fsc/module.f.mjs +5 -3
  123. package/fjs/fsm/proof.f.d.mts +3 -0
  124. package/fjs/fsm/proof.f.mjs +4 -1
  125. package/fjs/js/tokenizer/module.f.d.mts +7 -0
  126. package/fjs/js/tokenizer/module.f.mjs +19 -55
  127. package/fjs/mcp/module.f.d.mts +36 -1
  128. package/fjs/mcp/module.f.mjs +9 -7
  129. package/fjs/mcp/proof.f.d.mts +11 -1
  130. package/fjs/mcp/proof.f.mjs +11 -18
  131. package/fjs/media/html/module.f.d.mts +12 -0
  132. package/fjs/media/html/module.f.mjs +6 -4
  133. package/fjs/media/html/proof.f.d.mts +3 -0
  134. package/fjs/media/html/proof.f.mjs +4 -1
  135. package/fjs/media/json/parser/module.f.d.mts +1 -1
  136. package/fjs/media/json/parser/module.f.mjs +25 -8
  137. package/fjs/media/json/parser/types.d.ts +5 -0
  138. package/fjs/media/json/rtti/proof.f.d.mts +3 -0
  139. package/fjs/media/json/rtti/proof.f.mjs +3 -3
  140. package/fjs/media/json/schema/module.f.d.mts +61 -27
  141. package/fjs/media/json/schema/module.f.mjs +228 -63
  142. package/fjs/media/json/schema/proof.f.d.mts +41 -0
  143. package/fjs/media/json/schema/proof.f.mjs +219 -7
  144. package/fjs/media/json/serializer/module.f.d.mts +13 -0
  145. package/fjs/media/json/serializer/module.f.mjs +7 -7
  146. package/fjs/media/json/tokenizer/module.f.d.mts +8 -0
  147. package/fjs/media/json/tokenizer/module.f.mjs +24 -5
  148. package/fjs/media/nix/module.f.d.mts +13 -0
  149. package/fjs/media/nix/module.f.mjs +4 -2
  150. package/fjs/media/nix/proof.f.d.mts +3 -0
  151. package/fjs/media/nix/proof.f.mjs +4 -1
  152. package/fjs/media/revision/module.f.d.mts +5 -0
  153. package/fjs/media/revision/module.f.mjs +8 -11
  154. package/fjs/media/revision/proof.f.d.mts +4 -0
  155. package/fjs/media/revision/proof.f.mjs +5 -2
  156. package/fjs/media/type/module.f.d.mts +28 -11
  157. package/fjs/media/type/module.f.mjs +69 -85
  158. package/fjs/media/type/proof.f.d.mts +16 -0
  159. package/fjs/media/type/proof.f.mjs +44 -4
  160. package/fjs/module.d.mts +5 -0
  161. package/fjs/module.f.d.mts +8 -0
  162. package/fjs/module.f.mjs +4 -2
  163. package/fjs/module.mjs +6 -0
  164. package/fjs/path/module.f.d.mts +8 -0
  165. package/fjs/path/module.f.mjs +4 -2
  166. package/fjs/proof.f.d.mts +4 -0
  167. package/fjs/proof.f.mjs +5 -2
  168. package/fjs/protocol/json_rpc/module.f.d.mts +1 -1
  169. package/fjs/protocol/json_rpc/module.f.mjs +7 -4
  170. package/fjs/protocol/json_rpc/proof.f.d.mts +6 -0
  171. package/fjs/protocol/json_rpc/proof.f.mjs +22 -1
  172. package/fjs/protocol/mcp/proof.f.d.mts +4 -0
  173. package/fjs/protocol/mcp/proof.f.mjs +47 -24
  174. package/fjs/protocol/mcp/stdio/module.f.d.mts +2 -4
  175. package/fjs/protocol/mcp/stdio/module.f.mjs +1 -8
  176. package/fjs/protocol/mcp/stdio/proof.f.d.mts +1 -1
  177. package/fjs/protocol/mcp/stdio/proof.f.mjs +1 -1
  178. package/fjs/protocol/mcp/stdio/types.d.ts +14 -0
  179. package/fjs/sul/id/module.f.d.mts +5 -0
  180. package/fjs/sul/id/module.f.mjs +5 -4
  181. package/fjs/sul/level/hash/module.f.d.mts +4 -1
  182. package/fjs/sul/level/hash/module.f.mjs +4 -3
  183. package/fjs/sul/level/hash/proof.f.d.mts +4 -0
  184. package/fjs/sul/level/hash/proof.f.mjs +5 -2
  185. package/fjs/sul/level/literal/module.f.d.mts +4 -1
  186. package/fjs/sul/level/literal/module.f.mjs +4 -3
  187. package/fjs/sul/level/literal/proof.f.d.mts +3 -0
  188. package/fjs/sul/level/literal/proof.f.mjs +4 -1
  189. package/fjs/sul/module.f.d.mts +5 -3
  190. package/fjs/sul/module.f.mjs +5 -4
  191. package/fjs/sul/proof.f.d.mts +4 -0
  192. package/fjs/sul/proof.f.mjs +5 -2
  193. package/fjs/text/ascii/module.f.d.mts +26 -0
  194. package/fjs/text/ascii/module.f.mjs +49 -1
  195. package/fjs/text/ascii/proof.f.d.mts +10 -0
  196. package/fjs/text/ascii/proof.f.mjs +33 -1
  197. package/fjs/text/code_point/module.f.d.mts +21 -3
  198. package/fjs/text/code_point/module.f.mjs +24 -8
  199. package/fjs/text/code_point/proof.f.d.mts +1 -0
  200. package/fjs/text/code_point/proof.f.mjs +28 -0
  201. package/fjs/text/module.f.d.mts +4 -2
  202. package/fjs/text/module.f.mjs +4 -3
  203. package/fjs/text/proof.f.d.mts +3 -0
  204. package/fjs/text/proof.f.mjs +4 -1
  205. package/fjs/text/sgr/module.f.d.mts +4 -1
  206. package/fjs/text/sgr/module.f.mjs +4 -3
  207. package/fjs/text/sgr/proof.f.d.mts +3 -0
  208. package/fjs/text/sgr/proof.f.mjs +4 -1
  209. package/fjs/text/utf16/module.f.d.mts +5 -1
  210. package/fjs/text/utf16/module.f.mjs +31 -33
  211. package/fjs/text/utf16/proof.f.d.mts +3 -1
  212. package/fjs/text/utf16/proof.f.mjs +18 -1
  213. package/fjs/text/utf8/module.f.d.mts +9 -5
  214. package/fjs/text/utf8/module.f.mjs +16 -18
  215. package/fjs/types/array/module.f.d.mts +2 -1
  216. package/fjs/types/array/module.f.mjs +2 -2
  217. package/fjs/types/bigfloat/module.f.d.mts +21 -1
  218. package/fjs/types/bigfloat/module.f.mjs +33 -7
  219. package/fjs/types/bigfloat/proof.f.d.mts +1 -0
  220. package/fjs/types/bigfloat/proof.f.mjs +46 -0
  221. package/fjs/types/bigint/module.f.d.mts +4 -0
  222. package/fjs/types/bigint/module.f.mjs +4 -3
  223. package/fjs/types/bit_vec/module.f.d.mts +10 -14
  224. package/fjs/types/bit_vec/module.f.mjs +61 -71
  225. package/fjs/types/bit_vec/proof.f.d.mts +6 -0
  226. package/fjs/types/bit_vec/proof.f.mjs +29 -3
  227. package/fjs/types/btree/find/module.f.d.mts +5 -1
  228. package/fjs/types/btree/find/module.f.mjs +5 -5
  229. package/fjs/types/btree/find/proof.f.d.mts +5 -1
  230. package/fjs/types/btree/find/proof.f.mjs +5 -3
  231. package/fjs/types/btree/module.f.d.mts +3 -0
  232. package/fjs/types/btree/module.f.mjs +3 -2
  233. package/fjs/types/btree/proof.f.d.mts +5 -1
  234. package/fjs/types/btree/proof.f.mjs +5 -3
  235. package/fjs/types/btree/remove/module.f.d.mts +11 -0
  236. package/fjs/types/btree/remove/module.f.mjs +9 -9
  237. package/fjs/types/btree/remove/proof.f.d.mts +3 -0
  238. package/fjs/types/btree/remove/proof.f.mjs +4 -1
  239. package/fjs/types/btree/set/module.f.d.mts +9 -0
  240. package/fjs/types/btree/set/module.f.mjs +5 -6
  241. package/fjs/types/btree/set/proof.f.d.mts +3 -0
  242. package/fjs/types/btree/set/proof.f.mjs +4 -1
  243. package/fjs/types/btree/types/module.f.d.mts +2 -1
  244. package/fjs/types/btree/types/module.f.mjs +2 -1
  245. package/fjs/types/byte_set/module.f.d.mts +10 -1
  246. package/fjs/types/byte_set/module.f.mjs +5 -3
  247. package/fjs/types/byte_set/proof.f.d.mts +3 -1
  248. package/fjs/types/byte_set/proof.f.mjs +3 -1
  249. package/fjs/types/function/compare/module.f.d.mts +3 -2
  250. package/fjs/types/function/compare/module.f.mjs +3 -2
  251. package/fjs/types/function/module.f.d.mts +8 -1
  252. package/fjs/types/function/module.f.mjs +8 -1
  253. package/fjs/types/function/operator/module.f.d.mts +2 -1
  254. package/fjs/types/function/operator/module.f.mjs +2 -2
  255. package/fjs/types/list/module.f.d.mts +9 -2
  256. package/fjs/types/list/module.f.mjs +5 -3
  257. package/fjs/types/list/proof.f.d.mts +4 -1
  258. package/fjs/types/list/proof.f.mjs +4 -2
  259. package/fjs/types/nibble_set/module.f.d.mts +2 -1
  260. package/fjs/types/nibble_set/module.f.mjs +2 -2
  261. package/fjs/types/nominal/module.f.d.mts +2 -1
  262. package/fjs/types/nominal/module.f.mjs +2 -1
  263. package/fjs/types/nullable/module.f.d.mts +8 -2
  264. package/fjs/types/nullable/module.f.mjs +4 -2
  265. package/fjs/types/number/module.f.d.mts +4 -0
  266. package/fjs/types/number/module.f.mjs +4 -3
  267. package/fjs/types/object/module.f.d.mts +14 -2
  268. package/fjs/types/object/module.f.mjs +15 -6
  269. package/fjs/types/object/proof.f.d.mts +5 -2
  270. package/fjs/types/object/proof.f.mjs +6 -3
  271. package/fjs/types/object/structurally_same/module.f.d.mts +39 -0
  272. package/fjs/types/object/structurally_same/module.f.mjs +59 -0
  273. package/fjs/types/object/structurally_same/proof.f.d.mts +6 -0
  274. package/fjs/types/object/structurally_same/proof.f.mjs +73 -0
  275. package/fjs/types/ordered_map/module.f.d.mts +5 -0
  276. package/fjs/types/ordered_map/module.f.mjs +5 -4
  277. package/fjs/types/ordered_map/proof.f.d.mts +3 -0
  278. package/fjs/types/ordered_map/proof.f.mjs +4 -1
  279. package/fjs/types/patricia_trie/module.f.d.mts +2 -1
  280. package/fjs/types/patricia_trie/module.f.mjs +2 -2
  281. package/fjs/types/patricia_trie/proof.f.d.mts +3 -0
  282. package/fjs/types/patricia_trie/proof.f.mjs +4 -1
  283. package/fjs/types/prime_field/module.f.d.mts +3 -1
  284. package/fjs/types/prime_field/module.f.mjs +3 -2
  285. package/fjs/types/range/module.f.d.mts +2 -1
  286. package/fjs/types/range/module.f.mjs +2 -2
  287. package/fjs/types/range_map/module.f.d.mts +6 -0
  288. package/fjs/types/range_map/module.f.mjs +6 -9
  289. package/fjs/types/range_map/proof.f.d.mts +5 -1
  290. package/fjs/types/range_map/proof.f.mjs +5 -3
  291. package/fjs/types/range_set/module.f.d.mts +5 -0
  292. package/fjs/types/range_set/module.f.mjs +1 -0
  293. package/fjs/types/range_set/proof.f.d.mts +3 -0
  294. package/fjs/types/range_set/proof.f.mjs +4 -1
  295. package/fjs/types/result/module.d.mts +8 -0
  296. package/fjs/types/result/module.f.d.mts +37 -7
  297. package/fjs/types/result/module.f.mjs +38 -8
  298. package/fjs/types/result/module.mjs +9 -1
  299. package/fjs/types/result/proof.f.d.mts +5 -0
  300. package/fjs/types/result/proof.f.mjs +22 -2
  301. package/fjs/types/rtti/common/module.f.d.mts +35 -2
  302. package/fjs/types/rtti/common/module.f.mjs +9 -7
  303. package/fjs/types/rtti/common/proof.f.d.mts +4 -0
  304. package/fjs/types/rtti/common/proof.f.mjs +5 -2
  305. package/fjs/types/rtti/data/module.f.d.mts +120 -0
  306. package/fjs/types/rtti/data/module.f.mjs +1030 -0
  307. package/fjs/types/rtti/data/proof.f.d.mts +75 -0
  308. package/fjs/types/rtti/data/proof.f.mjs +566 -0
  309. package/fjs/types/rtti/data/types.d.ts +83 -0
  310. package/fjs/types/rtti/module.f.d.mts +12 -5
  311. package/fjs/types/rtti/module.f.mjs +7 -5
  312. package/fjs/types/rtti/parse/module.f.d.mts +38 -0
  313. package/fjs/types/rtti/parse/module.f.mjs +9 -7
  314. package/fjs/types/rtti/parse/proof.f.mjs +18 -38
  315. package/fjs/types/rtti/proof.f.d.mts +3 -1
  316. package/fjs/types/rtti/proof.f.mjs +3 -1
  317. package/fjs/types/rtti/ts/module.f.d.mts +68 -9
  318. package/fjs/types/rtti/ts/module.f.mjs +262 -30
  319. package/fjs/types/rtti/ts/proof.f.d.mts +44 -0
  320. package/fjs/types/rtti/ts/proof.f.mjs +152 -4
  321. package/fjs/types/rtti/ts/types.d.ts +11 -0
  322. package/fjs/types/rtti/types.d.ts +40 -0
  323. package/fjs/types/rtti/validate/module.f.d.mts +36 -1
  324. package/fjs/types/rtti/validate/module.f.mjs +6 -4
  325. package/fjs/types/sorted_list/module.f.d.mts +4 -1
  326. package/fjs/types/sorted_list/module.f.mjs +21 -12
  327. package/fjs/types/sorted_list/proof.f.d.mts +3 -1
  328. package/fjs/types/sorted_list/proof.f.mjs +3 -1
  329. package/fjs/types/sorted_set/module.f.d.mts +31 -1
  330. package/fjs/types/sorted_set/module.f.mjs +4 -2
  331. package/fjs/types/sorted_set/proof.f.d.mts +3 -1
  332. package/fjs/types/sorted_set/proof.f.mjs +3 -1
  333. package/fjs/types/string/module.f.d.mts +4 -0
  334. package/fjs/types/string/module.f.mjs +4 -3
  335. package/fjs/types/string_set/module.f.d.mts +3 -1
  336. package/fjs/types/string_set/module.f.mjs +3 -2
  337. package/fjs/types/ts/module.f.d.mts +2 -0
  338. package/fjs/types/ts/module.f.mjs +3 -3
  339. package/fjs/types/ts/proof.f.d.mts +1 -0
  340. package/fjs/types/ts/proof.f.mjs +5 -0
  341. package/fjs/types/ts/types.d.ts +6 -1
  342. package/fjs/types/uint8array/module.f.d.mts +13 -2
  343. package/fjs/types/uint8array/module.f.mjs +20 -15
  344. package/fjs/website/module.f.d.mts +3 -0
  345. package/fjs/website/module.f.mjs +3 -2
  346. package/package.json +3 -3
  347. package/fjs/asn.1/types.js +0 -6
  348. package/fjs/asserts/types.js +0 -6
  349. package/fjs/basen/types.js +0 -6
  350. package/fjs/bnf/data/types.js +0 -6
  351. package/fjs/bnf/descent/types.js +0 -6
  352. package/fjs/bnf/ll1/types.js +0 -6
  353. package/fjs/bnf/token_symbol/types.js +0 -6
  354. package/fjs/bnf/types.js +0 -6
  355. package/fjs/cas/evo/types.js +0 -7
  356. package/fjs/cas/types.js +0 -6
  357. package/fjs/ci/common/types.js +0 -1
  358. package/fjs/ci/nix/types.js +0 -6
  359. package/fjs/ci/types.js +0 -6
  360. package/fjs/cli/types.js +0 -6
  361. package/fjs/common/monoid/types.js +0 -6
  362. package/fjs/crypto/pow/types.js +0 -6
  363. package/fjs/crypto/secp/types.js +0 -6
  364. package/fjs/crypto/sha2/types.js +0 -6
  365. package/fjs/crypto/sign/types.js +0 -6
  366. package/fjs/crypto/vdf/types.js +0 -6
  367. package/fjs/dev/types.js +0 -6
  368. package/fjs/djs/ast/types.js +0 -8
  369. package/fjs/djs/parser/types.js +0 -7
  370. package/fjs/djs/tokenizer/types.js +0 -7
  371. package/fjs/djs/types.js +0 -7
  372. package/fjs/effects/eff/types.js +0 -6
  373. package/fjs/effects/list/types.js +0 -6
  374. package/fjs/effects/memory/types.js +0 -6
  375. package/fjs/effects/mock/types.js +0 -6
  376. package/fjs/effects/node/types.js +0 -6
  377. package/fjs/effects/node/virtual/types.js +0 -7
  378. package/fjs/effects/types.js +0 -6
  379. package/fjs/emergent_testing/all.test.d.ts +0 -1
  380. package/fjs/emergent_testing/all.test.js +0 -5
  381. package/fjs/emergent_testing/scenarios/all.d.ts +0 -1
  382. package/fjs/emergent_testing/scenarios/all.js +0 -1
  383. package/fjs/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -6
  384. package/fjs/emergent_testing/scenarios/async-subtests.fail.js +0 -9
  385. package/fjs/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -6
  386. package/fjs/emergent_testing/scenarios/async-subtests.pass.js +0 -9
  387. package/fjs/emergent_testing/scenarios/async.fail.d.ts +0 -3
  388. package/fjs/emergent_testing/scenarios/async.fail.js +0 -6
  389. package/fjs/emergent_testing/scenarios/async.pass.d.ts +0 -3
  390. package/fjs/emergent_testing/scenarios/async.pass.js +0 -5
  391. package/fjs/emergent_testing/scenarios/fail.fail.d.ts +0 -3
  392. package/fjs/emergent_testing/scenarios/fail.fail.js +0 -3
  393. package/fjs/emergent_testing/scenarios/return-value.pass.d.ts +0 -3
  394. package/fjs/emergent_testing/scenarios/return-value.pass.js +0 -4
  395. package/fjs/emergent_testing/scenarios/thenable.pass.d.ts +0 -5
  396. package/fjs/emergent_testing/scenarios/thenable.pass.js +0 -11
  397. package/fjs/emergent_testing/scenarios/thenable2.pass.d.ts +0 -5
  398. package/fjs/emergent_testing/scenarios/thenable2.pass.js +0 -3
  399. package/fjs/emergent_testing/scenarios/throw.pass.d.ts +0 -5
  400. package/fjs/emergent_testing/scenarios/throw.pass.js +0 -3
  401. package/fjs/emergent_testing/types.js +0 -6
  402. package/fjs/js/tokenizer/types.js +0 -6
  403. package/fjs/media/html/types.js +0 -6
  404. package/fjs/media/json/parser/types.js +0 -6
  405. package/fjs/media/json/tokenizer/types.js +0 -6
  406. package/fjs/media/json/types.js +0 -13
  407. package/fjs/media/nix/types.js +0 -6
  408. package/fjs/media/revision/types.js +0 -8
  409. package/fjs/media/type/types.js +0 -6
  410. package/fjs/media/types.js +0 -7
  411. package/fjs/nanvm/types.js +0 -11
  412. package/fjs/protocol/json_rpc/types.js +0 -8
  413. package/fjs/protocol/mcp/types.js +0 -8
  414. package/fjs/sul/id/types.js +0 -6
  415. package/fjs/sul/level/hash/types.js +0 -6
  416. package/fjs/sul/level/literal/types.js +0 -6
  417. package/fjs/sul/types.js +0 -6
  418. package/fjs/text/sgr/types.js +0 -6
  419. package/fjs/text/types.js +0 -6
  420. package/fjs/text/utf16/types.js +0 -6
  421. package/fjs/text/utf8/types.js +0 -6
  422. package/fjs/types/array/types.js +0 -6
  423. package/fjs/types/bigfloat/types.js +0 -6
  424. package/fjs/types/bigint/types.js +0 -6
  425. package/fjs/types/bit_vec/types.js +0 -6
  426. package/fjs/types/btree/find/types.js +0 -6
  427. package/fjs/types/btree/types/types.js +0 -6
  428. package/fjs/types/byte_set/types.js +0 -6
  429. package/fjs/types/function/compare/types.js +0 -6
  430. package/fjs/types/function/operator/types.js +0 -6
  431. package/fjs/types/function/types.js +0 -6
  432. package/fjs/types/list/types.js +0 -6
  433. package/fjs/types/nibble_set/types.js +0 -6
  434. package/fjs/types/nominal/types.js +0 -6
  435. package/fjs/types/nullable/types.js +0 -6
  436. package/fjs/types/object/types.js +0 -8
  437. package/fjs/types/option/types.js +0 -6
  438. package/fjs/types/ordered_map/types.js +0 -6
  439. package/fjs/types/patricia_trie/types.js +0 -6
  440. package/fjs/types/phantom/types.js +0 -11
  441. package/fjs/types/prime_field/types.js +0 -6
  442. package/fjs/types/range/types.js +0 -6
  443. package/fjs/types/range_map/types.js +0 -6
  444. package/fjs/types/result/types.js +0 -6
  445. package/fjs/types/rtti/common/types.js +0 -1
  446. package/fjs/types/rtti/parse/types.js +0 -1
  447. package/fjs/types/rtti/ts/types.js +0 -1
  448. package/fjs/types/rtti/types.js +0 -1
  449. package/fjs/types/rtti/validate/types.js +0 -1
  450. package/fjs/types/sorted_list/types.js +0 -6
  451. package/fjs/types/sorted_set/types.js +0 -6
  452. package/fjs/types/string_set/types.js +0 -6
  453. package/fjs/types/ts/types.js +0 -8
@@ -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
@@ -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
  /**
@@ -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,7 +1,13 @@
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
12
  * @type {<T, R>(f: (value: T) => R) => (value: Nullable<T>) => Nullable<R>}
7
13
  */
@@ -2,11 +2,13 @@
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
14
  * @type {<T, R>(f: (value: T) => R) => (value: Nullable<T>) => Nullable<R>}
@@ -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>>} */
@@ -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
 
@@ -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,10 +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
 
7
- /** @import { Candidate, Create, PatriciaTrie } from './types.ts' */
8
-
9
9
  /**
10
10
  * Creates a Patricia trie whose node merging is delegated to `create`.
11
11
  *
@@ -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