functionalscript 0.36.0 → 0.38.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 (523) hide show
  1. package/README.md +1 -1
  2. package/{fs → fjs}/asn.1/module.f.js +1 -1
  3. package/{fs → fjs}/asn.1/proof.f.js +32 -94
  4. package/fjs/asserts/module.f.d.ts +36 -0
  5. package/fjs/asserts/module.f.js +39 -0
  6. package/fjs/asserts/proof.f.d.ts +11 -0
  7. package/fjs/asserts/proof.f.js +18 -0
  8. package/{fs → fjs}/base_n/module.f.js +3 -3
  9. package/{fs → fjs}/base_n/proof.f.js +15 -39
  10. package/{fs → fjs/basen}/base128/module.f.d.ts +1 -1
  11. package/{fs → fjs/basen}/base128/module.f.js +1 -1
  12. package/{fs → fjs/basen}/base128/proof.f.js +3 -3
  13. package/{fs → fjs/basen}/base64/module.f.d.ts +2 -2
  14. package/{fs → fjs/basen}/base64/module.f.js +25 -15
  15. package/{fs → fjs/basen}/base64/proof.f.d.ts +2 -0
  16. package/{fs → fjs/basen}/base64/proof.f.js +26 -6
  17. package/{fs → fjs/basen}/cbase32/module.f.d.ts +2 -2
  18. package/{fs → fjs/basen}/cbase32/module.f.js +2 -2
  19. package/{fs → fjs/basen}/cbase32/proof.f.js +16 -43
  20. package/fjs/bnf/data/module.f.d.ts +52 -0
  21. package/{fs → fjs}/bnf/data/module.f.js +56 -6
  22. package/{fs → fjs}/bnf/data/proof.f.d.ts +1 -0
  23. package/{fs → fjs}/bnf/data/proof.f.js +59 -24
  24. package/{fs → fjs}/bnf/descent/module.f.d.ts +4 -14
  25. package/fjs/bnf/descent/module.f.js +124 -0
  26. package/{fs → fjs}/bnf/descent/proof.f.d.ts +1 -0
  27. package/{fs → fjs}/bnf/descent/proof.f.js +59 -28
  28. package/{fs → fjs}/bnf/ll1/module.f.d.ts +4 -4
  29. package/{fs → fjs}/bnf/ll1/module.f.js +15 -13
  30. package/{fs → fjs}/bnf/ll1/proof.f.d.ts +1 -0
  31. package/{fs → fjs}/bnf/ll1/proof.f.js +33 -16
  32. package/{fs → fjs}/bnf/module.f.d.ts +19 -5
  33. package/{fs → fjs}/bnf/module.f.js +14 -15
  34. package/fjs/bnf/proof.f.js +69 -0
  35. package/{fs → fjs}/bnf/testlib.f.js +2 -2
  36. package/{fs → fjs}/cas/cli/module.f.js +7 -7
  37. package/{fs → fjs}/cas/cli/proof.f.d.ts +4 -1
  38. package/{fs → fjs}/cas/cli/proof.f.js +37 -74
  39. package/fjs/cas/evo/mcp/module.f.d.ts +19 -0
  40. package/fjs/cas/evo/mcp/module.f.js +56 -0
  41. package/fjs/cas/evo/mcp/proof.f.d.ts +9 -0
  42. package/fjs/cas/evo/mcp/proof.f.js +95 -0
  43. package/fjs/cas/evo/module.f.d.ts +138 -0
  44. package/fjs/cas/evo/module.f.js +309 -0
  45. package/fjs/cas/evo/proof.f.d.ts +32 -0
  46. package/fjs/cas/evo/proof.f.js +453 -0
  47. package/fjs/cas/mcp/module.f.d.ts +49 -0
  48. package/fjs/cas/mcp/module.f.js +267 -0
  49. package/{fs → fjs}/cas/mcp/proof.f.d.ts +7 -2
  50. package/{fs → fjs}/cas/mcp/proof.f.js +116 -60
  51. package/{fs → fjs}/cas/module.f.d.ts +10 -0
  52. package/{fs → fjs}/cas/module.f.js +36 -10
  53. package/{fs → fjs}/cas/proof.f.d.ts +8 -2
  54. package/{fs → fjs}/cas/proof.f.js +85 -94
  55. package/{fs → fjs}/ci/bun/module.f.js +2 -2
  56. package/{fs → fjs}/ci/common/module.f.d.ts +2 -2
  57. package/{fs → fjs}/ci/common/module.f.js +4 -4
  58. package/fjs/ci/config/module.f.d.ts +42 -0
  59. package/{fs → fjs}/ci/config/module.f.js +6 -8
  60. package/fjs/ci/deno/module.f.js +20 -0
  61. package/{fs → fjs}/ci/module.f.js +9 -9
  62. package/{fs → fjs}/ci/node/module.f.d.ts +1 -1
  63. package/{fs → fjs}/ci/node/module.f.js +3 -5
  64. package/{fs → fjs}/ci/playwright/module.f.js +3 -3
  65. package/{fs → fjs}/ci/proof.f.js +27 -22
  66. package/{fs → fjs}/ci/rust/module.f.js +11 -3
  67. package/{fs → fjs}/cli/module.f.js +3 -3
  68. package/{fs → fjs}/cli/proof.f.js +25 -66
  69. package/{fs/types → fjs/common}/monoid/module.f.d.ts +1 -1
  70. package/{fs/types → fjs/common}/monoid/proof.f.js +4 -9
  71. package/{fs → fjs}/crypto/hmac/module.f.js +2 -2
  72. package/{fs → fjs}/crypto/hmac/proof.f.js +9 -17
  73. package/{fs → fjs}/crypto/pow/module.f.js +3 -3
  74. package/fjs/crypto/pow/proof.f.js +111 -0
  75. package/{fs → fjs}/crypto/secp/module.f.js +2 -2
  76. package/{fs → fjs}/crypto/secp/proof.f.js +14 -35
  77. package/{fs → fjs}/crypto/sha2/module.f.js +2 -2
  78. package/{fs → fjs}/crypto/sha2/proof.f.js +23 -54
  79. package/{fs → fjs}/crypto/sign/module.f.d.ts +0 -5
  80. package/{fs → fjs}/crypto/sign/module.f.js +11 -8
  81. package/{fs → fjs}/crypto/sign/proof.f.js +36 -105
  82. package/{fs → fjs}/crypto/vdf/module.f.js +1 -1
  83. package/{fs → fjs}/crypto/vdf/proof.f.js +23 -64
  84. package/{fs → fjs}/dev/module.f.js +6 -6
  85. package/{fs → fjs}/dev/package_json/module.f.js +6 -6
  86. package/{fs → fjs}/dev/package_json/proof.f.js +9 -9
  87. package/{fs → fjs}/dev/proof.f.js +3 -5
  88. package/{fs → fjs}/djs/ast/module.f.js +2 -2
  89. package/{fs → fjs}/djs/ast/proof.f.js +8 -16
  90. package/fjs/djs/examples/m.f.d.ts +2 -0
  91. package/{fs → fjs}/djs/module.f.d.ts +1 -1
  92. package/{fs → fjs}/djs/module.f.js +5 -5
  93. package/{fs → fjs}/djs/parser/module.f.d.ts +5 -0
  94. package/{fs → fjs}/djs/parser/module.f.js +24 -4
  95. package/{fs → fjs}/djs/parser/proof.f.js +145 -407
  96. package/{fs → fjs}/djs/proof.f.js +16 -39
  97. package/{fs → fjs}/djs/serializer/module.f.js +6 -6
  98. package/{fs → fjs}/djs/serializer/proof.f.js +18 -43
  99. package/fjs/djs/tokenizer/module.f.d.ts +24 -0
  100. package/fjs/djs/tokenizer/module.f.js +472 -0
  101. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.d.ts +4 -3
  102. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.js +447 -446
  103. package/{fs → fjs}/djs/transpiler/module.f.d.ts +5 -0
  104. package/{fs → fjs}/djs/transpiler/module.f.js +21 -11
  105. package/{fs → fjs}/djs/transpiler/proof.f.d.ts +3 -0
  106. package/fjs/djs/transpiler/proof.f.js +67 -0
  107. package/{fs → fjs}/effects/memory/module.f.js +4 -4
  108. package/{fs → fjs}/effects/memory/proof.f.js +11 -24
  109. package/{fs → fjs}/effects/module.f.js +1 -1
  110. package/{fs → fjs}/effects/node/memory/module.js +2 -2
  111. package/{fs → fjs}/effects/node/memory/proof.js +8 -15
  112. package/{fs → fjs}/effects/node/module.d.ts +1 -1
  113. package/{fs → fjs}/effects/node/module.f.d.ts +1 -1
  114. package/{fs → fjs}/effects/node/module.f.js +7 -7
  115. package/{fs → fjs}/effects/node/module.js +13 -13
  116. package/{fs → fjs}/effects/node/proof.f.d.ts +1 -0
  117. package/{fs → fjs}/effects/node/proof.f.js +106 -292
  118. package/{fs → fjs}/effects/node/virtual/module.f.js +7 -7
  119. package/{fs → fjs}/effects/node/virtual/proof.f.d.ts +2 -0
  120. package/{fs → fjs}/effects/node/virtual/proof.f.js +44 -30
  121. package/{fs → fjs}/effects/proof.f.js +18 -47
  122. package/fjs/emergent_testing/all.test.js +4 -0
  123. package/{fs → fjs}/emergent_testing/example.f.d.ts +1 -1
  124. package/{fs → fjs}/emergent_testing/module.f.js +6 -6
  125. package/{fs → fjs}/emergent_testing/proof.f.d.ts +19 -17
  126. package/{fs → fjs}/emergent_testing/proof.f.js +14 -14
  127. package/fjs/emergent_testing/scenarios/all.js +1 -0
  128. package/{fs → fjs}/fsc/bnf.f.js +2 -2
  129. package/{fs → fjs}/fsc/json.f.js +1 -1
  130. package/{fs → fjs}/fsc/module.f.js +7 -7
  131. package/{fs → fjs}/fsc/proof.f.js +16 -38
  132. package/{fs → fjs}/fsm/module.f.js +9 -9
  133. package/{fs → fjs}/fsm/proof.f.js +12 -19
  134. package/{fs → fjs}/js/tokenizer/module.f.js +7 -7
  135. package/{fs → fjs}/js/tokenizer/proof.f.js +5 -5
  136. package/{fs → fjs}/mcp/module.f.d.ts +20 -13
  137. package/{fs → fjs}/mcp/module.f.js +16 -9
  138. package/{fs → fjs}/mcp/proof.f.js +17 -17
  139. package/{fs → fjs}/mcp/stdio/module.f.d.ts +4 -4
  140. package/{fs → fjs}/mcp/stdio/module.f.js +12 -12
  141. package/{fs → fjs}/mcp/stdio/proof.f.js +10 -10
  142. package/{fs → fjs/media}/html/module.f.d.ts +3 -3
  143. package/{fs → fjs/media}/html/module.f.js +9 -9
  144. package/{fs → fjs/media}/html/proof.f.js +12 -33
  145. package/fjs/media/json/module.f.d.ts +50 -0
  146. package/{fs → fjs/media}/json/module.f.js +7 -7
  147. package/{fs → fjs/media}/json/parser/module.f.d.ts +7 -2
  148. package/{fs → fjs/media}/json/parser/module.f.js +21 -7
  149. package/{fs → fjs/media}/json/parser/proof.f.js +45 -120
  150. package/{fs → fjs/media}/json/proof.f.js +4 -4
  151. package/fjs/media/json/rpc/module.f.d.ts +114 -0
  152. package/{fs → fjs/media}/json/rpc/module.f.js +4 -4
  153. package/{fs → fjs/media}/json/rpc/proof.f.js +4 -4
  154. package/fjs/media/json/schema/module.f.d.ts +78 -0
  155. package/{fs → fjs/media}/json/schema/module.f.js +25 -41
  156. package/{fs → fjs/media}/json/schema/proof.f.js +6 -9
  157. package/{fs → fjs/media}/json/serializer/module.f.d.ts +1 -1
  158. package/{fs → fjs/media}/json/serializer/module.f.js +2 -2
  159. package/{fs → fjs/media}/json/serializer/proof.f.js +12 -29
  160. package/{fs → fjs/media}/json/tokenizer/module.f.d.ts +2 -2
  161. package/{fs → fjs/media}/json/tokenizer/module.f.js +4 -4
  162. package/{fs → fjs/media}/json/tokenizer/proof.f.js +5 -5
  163. package/fjs/media/module.f.d.ts +37 -0
  164. package/fjs/media/module.f.js +23 -0
  165. package/fjs/media/proof.f.d.ts +9 -0
  166. package/fjs/media/proof.f.js +58 -0
  167. package/fjs/media/revision/module.f.d.ts +78 -0
  168. package/fjs/media/revision/module.f.js +122 -0
  169. package/fjs/media/revision/proof.f.d.ts +31 -0
  170. package/fjs/media/revision/proof.f.js +140 -0
  171. package/{fs/mime → fjs/media/type}/module.f.d.ts +6 -6
  172. package/{fs/mime → fjs/media/type}/module.f.js +6 -6
  173. package/{fs/mime → fjs/media/type}/proof.f.js +8 -12
  174. package/fjs/module.f.d.ts +2 -0
  175. package/{fs/fjs → fjs}/module.f.js +9 -9
  176. package/fjs/module.js +4 -0
  177. package/{fs → fjs}/path/module.f.js +2 -2
  178. package/{fs → fjs}/path/proof.f.js +27 -78
  179. package/{fs/fjs → fjs}/proof.f.js +6 -4
  180. package/{fs → fjs}/sul/id/module.f.js +9 -9
  181. package/{fs → fjs}/sul/id/proof.f.js +12 -26
  182. package/{fs → fjs}/sul/level/hash/module.f.js +3 -3
  183. package/{fs → fjs}/sul/level/hash/proof.f.js +8 -8
  184. package/{fs → fjs}/sul/level/literal/module.f.js +5 -5
  185. package/{fs → fjs}/sul/level/literal/proof.f.js +15 -29
  186. package/{fs → fjs}/sul/module.f.js +3 -3
  187. package/{fs → fjs}/sul/proof.f.js +3 -3
  188. package/fjs/text/ascii/proof.f.d.ts +6 -0
  189. package/fjs/text/ascii/proof.f.js +14 -0
  190. package/{fs → fjs}/text/code_point/module.f.js +12 -12
  191. package/{fs → fjs}/text/code_point/proof.f.js +1 -1
  192. package/{fs → fjs}/text/module.f.js +5 -5
  193. package/{fs → fjs}/text/proof.f.js +7 -12
  194. package/{fs → fjs}/text/sgr/module.f.js +2 -2
  195. package/{fs → fjs}/text/sgr/proof.f.js +8 -17
  196. package/{fs → fjs}/text/utf16/module.f.js +6 -6
  197. package/{fs → fjs}/text/utf16/proof.f.js +27 -70
  198. package/{fs → fjs}/text/utf8/module.f.js +22 -17
  199. package/{fs → fjs}/text/utf8/proof.f.js +59 -128
  200. package/{fs → fjs}/types/array/module.f.js +1 -1
  201. package/{fs → fjs}/types/array/proof.f.js +21 -55
  202. package/{fs → fjs}/types/bigfloat/module.f.js +1 -1
  203. package/fjs/types/bigfloat/proof.f.js +217 -0
  204. package/{fs → fjs}/types/bigint/module.f.js +2 -2
  205. package/{fs → fjs}/types/bigint/proof.f.js +51 -147
  206. package/{fs → fjs}/types/bit_vec/module.f.js +8 -8
  207. package/{fs → fjs}/types/bit_vec/proof.f.js +76 -218
  208. package/{fs → fjs}/types/btree/find/module.f.js +1 -1
  209. package/fjs/types/btree/find/proof.f.d.ts +3 -0
  210. package/fjs/types/btree/find/proof.f.js +108 -0
  211. package/{fs → fjs}/types/btree/module.f.js +2 -2
  212. package/fjs/types/btree/proof.f.d.ts +13 -0
  213. package/{fs → fjs}/types/btree/proof.f.js +12 -19
  214. package/{fs → fjs}/types/btree/remove/module.f.js +4 -4
  215. package/fjs/types/btree/remove/proof.f.d.ts +9 -0
  216. package/{fs → fjs}/types/btree/remove/proof.f.js +88 -235
  217. package/{fs → fjs}/types/btree/set/module.f.js +8 -5
  218. package/{fs → fjs}/types/btree/set/proof.f.js +39 -28
  219. package/{fs → fjs}/types/byte_set/module.f.js +2 -2
  220. package/fjs/types/byte_set/proof.f.js +79 -0
  221. package/{fs → fjs}/types/function/compare/proof.f.js +14 -37
  222. package/fjs/types/function/operator/proof.f.d.ts +23 -0
  223. package/{fs → fjs}/types/function/operator/proof.f.js +18 -49
  224. package/{fs → fjs}/types/function/proof.f.js +3 -4
  225. package/{fs → fjs}/types/list/module.f.js +2 -2
  226. package/fjs/types/list/proof.f.d.ts +30 -0
  227. package/{fs → fjs}/types/list/proof.f.js +59 -167
  228. package/{fs → fjs}/types/map/proof.f.js +6 -14
  229. package/fjs/types/nibble_set/proof.f.js +60 -0
  230. package/{fs → fjs}/types/nominal/proof.f.js +5 -10
  231. package/{fs → fjs}/types/nullable/module.f.js +2 -2
  232. package/fjs/types/nullable/proof.f.js +29 -0
  233. package/{fs → fjs}/types/number/module.f.js +5 -5
  234. package/{fs → fjs}/types/number/proof.f.js +10 -25
  235. package/{fs → fjs}/types/object/module.f.js +4 -4
  236. package/{fs → fjs}/types/object/proof.f.js +4 -7
  237. package/{fs → fjs}/types/ordered_map/module.f.js +6 -6
  238. package/{fs → fjs}/types/ordered_map/proof.f.js +3 -3
  239. package/fjs/types/patricia_trie/proof.f.d.ts +13 -0
  240. package/{fs → fjs}/types/patricia_trie/proof.f.js +22 -22
  241. package/{fs → fjs}/types/prime_field/module.f.js +3 -8
  242. package/{fs → fjs}/types/prime_field/proof.f.js +2 -2
  243. package/{fs → fjs}/types/range/module.f.d.ts +1 -1
  244. package/fjs/types/range/module.f.js +2 -0
  245. package/fjs/types/range/proof.f.js +9 -0
  246. package/{fs → fjs}/types/range_map/module.f.js +4 -4
  247. package/{fs → fjs}/types/range_map/proof.f.js +35 -88
  248. package/{fs → fjs}/types/result/module.js +1 -1
  249. package/fjs/types/result/proof.f.d.ts +12 -0
  250. package/fjs/types/result/proof.f.js +31 -0
  251. package/{fs → fjs}/types/rtti/common/module.f.d.ts +36 -1
  252. package/{fs → fjs}/types/rtti/common/module.f.js +48 -4
  253. package/fjs/types/rtti/common/proof.f.d.ts +8 -0
  254. package/fjs/types/rtti/common/proof.f.js +51 -0
  255. package/{fs → fjs}/types/rtti/module.f.d.ts +2 -2
  256. package/{fs → fjs}/types/rtti/module.f.js +1 -1
  257. package/{fs → fjs}/types/rtti/parse/module.f.js +16 -25
  258. package/{fs → fjs}/types/rtti/parse/proof.f.js +9 -20
  259. package/{fs → fjs}/types/rtti/ts/module.f.d.ts +10 -4
  260. package/{fs → fjs}/types/rtti/ts/module.f.js +1 -1
  261. package/{fs → fjs}/types/rtti/ts/proof.f.js +2 -2
  262. package/{fs → fjs}/types/rtti/validate/module.f.js +11 -32
  263. package/{fs → fjs}/types/rtti/validate/proof.f.js +6 -11
  264. package/{fs → fjs}/types/sorted_list/module.f.js +3 -3
  265. package/{fs → fjs}/types/sorted_list/proof.f.js +14 -27
  266. package/{fs → fjs}/types/sorted_set/module.f.js +1 -1
  267. package/{fs → fjs}/types/sorted_set/proof.f.js +20 -45
  268. package/{fs → fjs}/types/string/module.f.js +4 -4
  269. package/fjs/types/string/proof.f.js +77 -0
  270. package/{fs → fjs}/types/string_set/module.f.js +6 -6
  271. package/fjs/types/string_set/proof.f.js +43 -0
  272. package/{fs → fjs}/types/ts/proof.f.d.ts +18 -18
  273. package/{fs → fjs}/types/ts/proof.f.js +16 -43
  274. package/{fs → fjs}/types/uint8array/module.f.js +10 -10
  275. package/{fs → fjs}/types/uint8array/proof.f.d.ts +4 -1
  276. package/{fs → fjs}/types/uint8array/proof.f.js +11 -11
  277. package/{fs → fjs}/website/module.f.js +3 -3
  278. package/fjs/website/proof.f.js +13 -0
  279. package/package.json +8 -8
  280. package/fs/asserts/module.f.d.ts +0 -4
  281. package/fs/asserts/module.f.js +0 -9
  282. package/fs/asserts/proof.f.d.ts +0 -8
  283. package/fs/asserts/proof.f.js +0 -51
  284. package/fs/bnf/data/module.f.d.ts +0 -30
  285. package/fs/bnf/descent/module.f.js +0 -119
  286. package/fs/bnf/proof.f.js +0 -104
  287. package/fs/cas/mcp/module.f.d.ts +0 -36
  288. package/fs/cas/mcp/module.f.js +0 -249
  289. package/fs/ci/config/module.f.d.ts +0 -43
  290. package/fs/ci/deno/module.f.js +0 -16
  291. package/fs/crypto/pow/proof.f.js +0 -161
  292. package/fs/djs/examples/m.f.d.ts +0 -2
  293. package/fs/djs/tokenizer/module.f.d.ts +0 -12
  294. package/fs/djs/tokenizer/module.f.js +0 -62
  295. package/fs/djs/tokenizer/proof.f.d.ts +0 -7
  296. package/fs/djs/tokenizer/proof.f.js +0 -543
  297. package/fs/djs/tokenizer-new/module.f.d.ts +0 -3
  298. package/fs/djs/tokenizer-new/module.f.js +0 -155
  299. package/fs/djs/transpiler/proof.f.js +0 -68
  300. package/fs/emergent_testing/all.test.js +0 -4
  301. package/fs/emergent_testing/scenarios/all.js +0 -1
  302. package/fs/fjs/module.f.d.ts +0 -2
  303. package/fs/fjs/module.js +0 -4
  304. package/fs/json/module.f.d.ts +0 -50
  305. package/fs/json/rpc/module.f.d.ts +0 -114
  306. package/fs/json/schema/module.f.d.ts +0 -77
  307. package/fs/text/ascii/proof.f.d.ts +0 -4
  308. package/fs/text/ascii/proof.f.js +0 -24
  309. package/fs/types/bigfloat/proof.f.js +0 -348
  310. package/fs/types/btree/find/proof.f.js +0 -151
  311. package/fs/types/btree/proof.f.d.ts +0 -7
  312. package/fs/types/btree/remove/proof.f.d.ts +0 -4
  313. package/fs/types/byte_set/proof.f.js +0 -120
  314. package/fs/types/function/operator/proof.f.d.ts +0 -12
  315. package/fs/types/list/proof.f.d.ts +0 -22
  316. package/fs/types/nibble_set/proof.f.js +0 -89
  317. package/fs/types/nullable/proof.f.js +0 -50
  318. package/fs/types/patricia_trie/proof.f.d.ts +0 -7
  319. package/fs/types/range/module.f.js +0 -2
  320. package/fs/types/range/proof.f.d.ts +0 -1
  321. package/fs/types/range/proof.f.js +0 -18
  322. package/fs/types/result/proof.f.d.ts +0 -6
  323. package/fs/types/result/proof.f.js +0 -52
  324. package/fs/types/string/proof.f.js +0 -118
  325. package/fs/types/string_set/proof.f.js +0 -82
  326. package/fs/website/proof.f.js +0 -16
  327. /package/{fs → fjs}/asn.1/module.f.d.ts +0 -0
  328. /package/{fs → fjs}/asn.1/proof.f.d.ts +0 -0
  329. /package/{fs → fjs}/base_n/module.f.d.ts +0 -0
  330. /package/{fs → fjs}/base_n/proof.f.d.ts +0 -0
  331. /package/{fs → fjs/basen}/base128/proof.f.d.ts +0 -0
  332. /package/{fs → fjs/basen}/cbase32/proof.f.d.ts +0 -0
  333. /package/{fs → fjs}/bnf/proof.f.d.ts +0 -0
  334. /package/{fs → fjs}/bnf/testlib.f.d.ts +0 -0
  335. /package/{fs → fjs}/cas/cli/module.f.d.ts +0 -0
  336. /package/{fs → fjs}/ci/bun/module.f.d.ts +0 -0
  337. /package/{fs → fjs}/ci/deno/module.f.d.ts +0 -0
  338. /package/{fs → fjs}/ci/module.f.d.ts +0 -0
  339. /package/{fs → fjs}/ci/playwright/module.f.d.ts +0 -0
  340. /package/{fs → fjs}/ci/proof.f.d.ts +0 -0
  341. /package/{fs → fjs}/ci/rust/module.f.d.ts +0 -0
  342. /package/{fs → fjs}/cli/module.f.d.ts +0 -0
  343. /package/{fs → fjs}/cli/proof.f.d.ts +0 -0
  344. /package/{fs/types → fjs/common}/monoid/module.f.js +0 -0
  345. /package/{fs/types → fjs/common}/monoid/proof.f.d.ts +0 -0
  346. /package/{fs → fjs}/crypto/hmac/module.f.d.ts +0 -0
  347. /package/{fs → fjs}/crypto/hmac/proof.f.d.ts +0 -0
  348. /package/{fs → fjs}/crypto/pow/module.f.d.ts +0 -0
  349. /package/{fs → fjs}/crypto/pow/proof.f.d.ts +0 -0
  350. /package/{fs → fjs}/crypto/secp/module.f.d.ts +0 -0
  351. /package/{fs → fjs}/crypto/secp/proof.f.d.ts +0 -0
  352. /package/{fs → fjs}/crypto/sha2/module.f.d.ts +0 -0
  353. /package/{fs → fjs}/crypto/sha2/proof.f.d.ts +0 -0
  354. /package/{fs → fjs}/crypto/sign/proof.f.d.ts +0 -0
  355. /package/{fs → fjs}/crypto/vdf/module.f.d.ts +0 -0
  356. /package/{fs → fjs}/crypto/vdf/proof.f.d.ts +0 -0
  357. /package/{fs → fjs}/dev/module.f.d.ts +0 -0
  358. /package/{fs → fjs}/dev/package_json/module.f.d.ts +0 -0
  359. /package/{fs → fjs}/dev/package_json/proof.f.d.ts +0 -0
  360. /package/{fs → fjs}/dev/proof.f.d.ts +0 -0
  361. /package/{fs → fjs}/djs/ast/module.f.d.ts +0 -0
  362. /package/{fs → fjs}/djs/ast/proof.f.d.ts +0 -0
  363. /package/{fs → fjs}/djs/examples/input.f.d.ts +0 -0
  364. /package/{fs → fjs}/djs/examples/input.f.js +0 -0
  365. /package/{fs → fjs}/djs/examples/m.f.js +0 -0
  366. /package/{fs → fjs}/djs/parser/proof.f.d.ts +0 -0
  367. /package/{fs → fjs}/djs/proof.f.d.ts +0 -0
  368. /package/{fs → fjs}/djs/serializer/module.f.d.ts +0 -0
  369. /package/{fs → fjs}/djs/serializer/proof.f.d.ts +0 -0
  370. /package/{fs → fjs}/effects/list/module.f.d.ts +0 -0
  371. /package/{fs → fjs}/effects/list/module.f.js +0 -0
  372. /package/{fs → fjs}/effects/memory/module.f.d.ts +0 -0
  373. /package/{fs → fjs}/effects/memory/proof.f.d.ts +0 -0
  374. /package/{fs → fjs}/effects/mock/module.f.d.ts +0 -0
  375. /package/{fs → fjs}/effects/mock/module.f.js +0 -0
  376. /package/{fs → fjs}/effects/module.d.ts +0 -0
  377. /package/{fs → fjs}/effects/module.f.d.ts +0 -0
  378. /package/{fs → fjs}/effects/module.js +0 -0
  379. /package/{fs → fjs}/effects/node/memory/module.d.ts +0 -0
  380. /package/{fs → fjs}/effects/node/memory/proof.d.ts +0 -0
  381. /package/{fs → fjs}/effects/node/virtual/module.f.d.ts +0 -0
  382. /package/{fs → fjs}/effects/proof.f.d.ts +0 -0
  383. /package/{fs → fjs}/emergent_testing/all.test.d.ts +0 -0
  384. /package/{fs → fjs}/emergent_testing/example.f.js +0 -0
  385. /package/{fs → fjs}/emergent_testing/module.f.d.ts +0 -0
  386. /package/{fs → fjs}/emergent_testing/scenarios/all.d.ts +0 -0
  387. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -0
  388. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.js +0 -0
  389. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -0
  390. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.js +0 -0
  391. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.d.ts +0 -0
  392. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.js +0 -0
  393. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.d.ts +0 -0
  394. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.js +0 -0
  395. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.d.ts +0 -0
  396. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.js +0 -0
  397. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.d.ts +0 -0
  398. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.js +0 -0
  399. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.d.ts +0 -0
  400. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.js +0 -0
  401. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.d.ts +0 -0
  402. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.js +0 -0
  403. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.d.ts +0 -0
  404. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.js +0 -0
  405. /package/{fs → fjs}/fsc/bnf.f.d.ts +0 -0
  406. /package/{fs → fjs}/fsc/json.f.d.ts +0 -0
  407. /package/{fs → fjs}/fsc/module.f.d.ts +0 -0
  408. /package/{fs → fjs}/fsc/proof.f.d.ts +0 -0
  409. /package/{fs → fjs}/fsm/module.f.d.ts +0 -0
  410. /package/{fs → fjs}/fsm/proof.f.d.ts +0 -0
  411. /package/{fs → fjs}/js/tokenizer/module.f.d.ts +0 -0
  412. /package/{fs → fjs}/js/tokenizer/proof.f.d.ts +0 -0
  413. /package/{fs → fjs}/mcp/proof.f.d.ts +0 -0
  414. /package/{fs → fjs}/mcp/stdio/proof.f.d.ts +0 -0
  415. /package/{fs → fjs/media}/html/proof.f.d.ts +0 -0
  416. /package/{fs → fjs/media}/json/parser/proof.f.d.ts +0 -0
  417. /package/{fs → fjs/media}/json/proof.f.d.ts +0 -0
  418. /package/{fs → fjs/media}/json/rpc/proof.f.d.ts +0 -0
  419. /package/{fs → fjs/media}/json/schema/proof.f.d.ts +0 -0
  420. /package/{fs → fjs/media}/json/serializer/proof.f.d.ts +0 -0
  421. /package/{fs → fjs/media}/json/tokenizer/proof.f.d.ts +0 -0
  422. /package/{fs/mime → fjs/media/type}/proof.f.d.ts +0 -0
  423. /package/{fs/fjs → fjs}/module.d.ts +0 -0
  424. /package/{fs → fjs}/path/module.f.d.ts +0 -0
  425. /package/{fs → fjs}/path/proof.f.d.ts +0 -0
  426. /package/{fs/fjs → fjs}/proof.f.d.ts +0 -0
  427. /package/{fs → fjs}/sul/id/module.f.d.ts +0 -0
  428. /package/{fs → fjs}/sul/id/proof.f.d.ts +0 -0
  429. /package/{fs → fjs}/sul/level/hash/module.f.d.ts +0 -0
  430. /package/{fs → fjs}/sul/level/hash/proof.f.d.ts +0 -0
  431. /package/{fs → fjs}/sul/level/literal/module.f.d.ts +0 -0
  432. /package/{fs → fjs}/sul/level/literal/proof.f.d.ts +0 -0
  433. /package/{fs → fjs}/sul/module.f.d.ts +0 -0
  434. /package/{fs → fjs}/sul/proof.f.d.ts +0 -0
  435. /package/{fs → fjs}/text/ascii/module.f.d.ts +0 -0
  436. /package/{fs → fjs}/text/ascii/module.f.js +0 -0
  437. /package/{fs → fjs}/text/code_point/module.f.d.ts +0 -0
  438. /package/{fs → fjs}/text/code_point/proof.f.d.ts +0 -0
  439. /package/{fs → fjs}/text/module.f.d.ts +0 -0
  440. /package/{fs → fjs}/text/proof.f.d.ts +0 -0
  441. /package/{fs → fjs}/text/sgr/module.f.d.ts +0 -0
  442. /package/{fs → fjs}/text/sgr/proof.f.d.ts +0 -0
  443. /package/{fs → fjs}/text/utf16/module.f.d.ts +0 -0
  444. /package/{fs → fjs}/text/utf16/proof.f.d.ts +0 -0
  445. /package/{fs → fjs}/text/utf8/module.f.d.ts +0 -0
  446. /package/{fs → fjs}/text/utf8/proof.f.d.ts +0 -0
  447. /package/{fs → fjs}/types/array/module.f.d.ts +0 -0
  448. /package/{fs → fjs}/types/array/proof.f.d.ts +0 -0
  449. /package/{fs → fjs}/types/bigfloat/module.f.d.ts +0 -0
  450. /package/{fs → fjs}/types/bigfloat/proof.f.d.ts +0 -0
  451. /package/{fs → fjs}/types/bigint/module.f.d.ts +0 -0
  452. /package/{fs → fjs}/types/bigint/proof.f.d.ts +0 -0
  453. /package/{fs → fjs}/types/bit_vec/module.f.d.ts +0 -0
  454. /package/{fs → fjs}/types/bit_vec/proof.f.d.ts +0 -0
  455. /package/{fs → fjs}/types/btree/find/module.f.d.ts +0 -0
  456. /package/{fs → fjs}/types/btree/module.f.d.ts +0 -0
  457. /package/{fs → fjs}/types/btree/remove/module.f.d.ts +0 -0
  458. /package/{fs → fjs}/types/btree/set/module.f.d.ts +0 -0
  459. /package/{fs → fjs}/types/btree/set/proof.f.d.ts +0 -0
  460. /package/{fs → fjs}/types/btree/types/module.f.d.ts +0 -0
  461. /package/{fs → fjs}/types/btree/types/module.f.js +0 -0
  462. /package/{fs → fjs}/types/byte_set/module.f.d.ts +0 -0
  463. /package/{fs → fjs}/types/byte_set/proof.f.d.ts +0 -0
  464. /package/{fs → fjs}/types/function/compare/module.f.d.ts +0 -0
  465. /package/{fs → fjs}/types/function/compare/module.f.js +0 -0
  466. /package/{fs/types/btree/find → fjs/types/function/compare}/proof.f.d.ts +0 -0
  467. /package/{fs → fjs}/types/function/module.f.d.ts +0 -0
  468. /package/{fs → fjs}/types/function/module.f.js +0 -0
  469. /package/{fs → fjs}/types/function/operator/module.f.d.ts +0 -0
  470. /package/{fs → fjs}/types/function/operator/module.f.js +0 -0
  471. /package/{fs/types/function/compare → fjs/types/function}/proof.f.d.ts +0 -0
  472. /package/{fs → fjs}/types/list/module.f.d.ts +0 -0
  473. /package/{fs → fjs}/types/map/module.f.d.ts +0 -0
  474. /package/{fs → fjs}/types/map/module.f.js +0 -0
  475. /package/{fs → fjs}/types/map/proof.f.d.ts +0 -0
  476. /package/{fs → fjs}/types/nibble_set/module.f.d.ts +0 -0
  477. /package/{fs → fjs}/types/nibble_set/module.f.js +0 -0
  478. /package/{fs → fjs}/types/nibble_set/proof.f.d.ts +0 -0
  479. /package/{fs → fjs}/types/nominal/module.f.d.ts +0 -0
  480. /package/{fs → fjs}/types/nominal/module.f.js +0 -0
  481. /package/{fs → fjs}/types/nominal/proof.f.d.ts +0 -0
  482. /package/{fs → fjs}/types/nullable/module.f.d.ts +0 -0
  483. /package/{fs → fjs}/types/nullable/proof.f.d.ts +0 -0
  484. /package/{fs → fjs}/types/number/module.f.d.ts +0 -0
  485. /package/{fs → fjs}/types/number/proof.f.d.ts +0 -0
  486. /package/{fs → fjs}/types/object/module.f.d.ts +0 -0
  487. /package/{fs → fjs}/types/object/proof.f.d.ts +0 -0
  488. /package/{fs → fjs}/types/option/module.f.d.ts +0 -0
  489. /package/{fs → fjs}/types/option/module.f.js +0 -0
  490. /package/{fs → fjs}/types/ordered_map/module.f.d.ts +0 -0
  491. /package/{fs → fjs}/types/ordered_map/proof.f.d.ts +0 -0
  492. /package/{fs → fjs}/types/patricia_trie/module.f.d.ts +0 -0
  493. /package/{fs → fjs}/types/patricia_trie/module.f.js +0 -0
  494. /package/{fs → fjs}/types/phantom/module.f.d.ts +0 -0
  495. /package/{fs → fjs}/types/phantom/module.f.js +0 -0
  496. /package/{fs → fjs}/types/prime_field/module.f.d.ts +0 -0
  497. /package/{fs → fjs}/types/prime_field/proof.f.d.ts +0 -0
  498. /package/{fs/types/function → fjs/types/range}/proof.f.d.ts +0 -0
  499. /package/{fs → fjs}/types/range_map/module.f.d.ts +0 -0
  500. /package/{fs → fjs}/types/range_map/proof.f.d.ts +0 -0
  501. /package/{fs → fjs}/types/result/module.d.ts +0 -0
  502. /package/{fs → fjs}/types/result/module.f.d.ts +0 -0
  503. /package/{fs → fjs}/types/result/module.f.js +0 -0
  504. /package/{fs → fjs}/types/rtti/parse/module.f.d.ts +0 -0
  505. /package/{fs → fjs}/types/rtti/parse/proof.f.d.ts +0 -0
  506. /package/{fs → fjs}/types/rtti/proof.f.d.ts +0 -0
  507. /package/{fs → fjs}/types/rtti/proof.f.js +0 -0
  508. /package/{fs → fjs}/types/rtti/ts/proof.f.d.ts +0 -0
  509. /package/{fs → fjs}/types/rtti/validate/module.f.d.ts +0 -0
  510. /package/{fs → fjs}/types/rtti/validate/proof.f.d.ts +0 -0
  511. /package/{fs → fjs}/types/sorted_list/module.f.d.ts +0 -0
  512. /package/{fs → fjs}/types/sorted_list/proof.f.d.ts +0 -0
  513. /package/{fs → fjs}/types/sorted_set/module.f.d.ts +0 -0
  514. /package/{fs → fjs}/types/sorted_set/proof.f.d.ts +0 -0
  515. /package/{fs → fjs}/types/string/module.f.d.ts +0 -0
  516. /package/{fs → fjs}/types/string/proof.f.d.ts +0 -0
  517. /package/{fs → fjs}/types/string_set/module.f.d.ts +0 -0
  518. /package/{fs → fjs}/types/string_set/proof.f.d.ts +0 -0
  519. /package/{fs → fjs}/types/ts/module.f.d.ts +0 -0
  520. /package/{fs → fjs}/types/ts/module.f.js +0 -0
  521. /package/{fs → fjs}/types/uint8array/module.f.d.ts +0 -0
  522. /package/{fs → fjs}/website/module.f.d.ts +0 -0
  523. /package/{fs → fjs}/website/proof.f.d.ts +0 -0
@@ -1,9 +1,10 @@
1
- import { stringToCodePointList } from "../../text/utf16/module.f.js";
2
- import { map, toArray } from "../../types/list/module.f.js";
3
- import { commaJoin0Plus, option, range, repeat0Plus, set } from "../module.f.js";
4
- import { deterministic } from "../testlib.f.js";
5
- import { toData } from "../data/module.f.js";
6
- import { createEmptyTagMap, descentParser } from "./module.f.js";
1
+ import { stringToCodePointList } from '../../text/utf16/module.f.js';
2
+ import { map, toArray } from '../../types/list/module.f.js';
3
+ import { commaJoin0Plus, option, range, repeat0Plus, set } from '../module.f.js';
4
+ import { deterministic } from '../testlib.f.js';
5
+ import { emptyTagMap, toData } from '../data/module.f.js';
6
+ import { descentParser } from './module.f.js';
7
+ import { assertEq } from '../../asserts/module.f.js';
7
8
  const mapCodePoint = (cp) => [cp, undefined];
8
9
  const descentParserCpOnly = (m, name, cp) => {
9
10
  const cpm = toArray(map(mapCodePoint)(cp));
@@ -14,34 +15,34 @@ export const proof = {
14
15
  () => {
15
16
  const stringRule = 'true';
16
17
  const data = toData(stringRule);
17
- const emptyTags = createEmptyTagMap(data);
18
+ const emptyTags = emptyTagMap(data[0]);
18
19
  const result = JSON.stringify(emptyTags);
19
- if (result !== '{"0":false,"1":false,"2":false,"3":false,"":false}') {
20
+ if (result !== '{}') {
20
21
  throw result;
21
22
  }
22
23
  },
23
24
  () => {
24
25
  const terminalRangeRule = range('AF');
25
26
  const data = toData(terminalRangeRule);
26
- const emptyTags = createEmptyTagMap(data);
27
+ const emptyTags = emptyTagMap(data[0]);
27
28
  const result = JSON.stringify(emptyTags);
28
- if (result !== '{"":false}') {
29
+ if (result !== '{}') {
29
30
  throw result;
30
31
  }
31
32
  },
32
33
  () => {
33
34
  const varintRule = { true: 'true', false: 'false' };
34
35
  const data = toData(varintRule);
35
- const emptyTags = createEmptyTagMap(data);
36
+ const emptyTags = emptyTagMap(data[0]);
36
37
  const result = JSON.stringify(emptyTags);
37
- if (result !== '{"0":false,"1":false,"2":false,"3":false,"4":false,"5":false,"6":false,"7":false,"8":false,"9":false,"":false}') {
38
+ if (result !== '{}') {
38
39
  throw result;
39
40
  }
40
41
  },
41
42
  () => {
42
43
  const emptyRule = '';
43
44
  const data = toData(emptyRule);
44
- const emptyTags = createEmptyTagMap(data);
45
+ const emptyTags = emptyTagMap(data[0]);
45
46
  const result = JSON.stringify(emptyTags);
46
47
  if (result !== '{"":true}') {
47
48
  throw result;
@@ -51,27 +52,27 @@ export const proof = {
51
52
  const emptyRule = '';
52
53
  const varintRule = { true: 'true', e: emptyRule };
53
54
  const data = toData(varintRule);
54
- const emptyTags = createEmptyTagMap(data);
55
+ const emptyTags = emptyTagMap(data[0]);
55
56
  const result = JSON.stringify(emptyTags);
56
- if (result !== '{"0":false,"1":false,"2":false,"3":false,"4":false,"5":true,"":"e"}') {
57
+ if (result !== '{"5":true,"":"e"}') {
57
58
  throw result;
58
59
  }
59
60
  },
60
61
  () => {
61
62
  const repeatRule = repeat0Plus(option('a'));
62
63
  const data = toData(repeatRule);
63
- const emptyTags = createEmptyTagMap(data);
64
+ const emptyTags = emptyTagMap(data[0]);
64
65
  const result = JSON.stringify(emptyTags);
65
- if (result !== '{"0":"none","1":false,"2":false,"3":true,"r":"none","":true}') {
66
+ if (result !== '{"0":"none","3":true,"":true,"r":"none"}') {
66
67
  throw result;
67
68
  }
68
69
  },
69
70
  () => {
70
71
  const repeatRule = repeat0Plus(set(' \n\r\t'));
71
72
  const data = toData(repeatRule);
72
- const emptyTags = createEmptyTagMap(data);
73
+ const emptyTags = emptyTagMap(data[0]);
73
74
  const result = JSON.stringify(emptyTags);
74
- if (result !== '{"0":false,"1":false,"2":false,"3":false,"4":false,"5":true,"r":"none","":true}') {
75
+ if (result !== '{"5":true,"r":"none"}') {
75
76
  throw result;
76
77
  }
77
78
  }
@@ -151,6 +152,15 @@ export const proof = {
151
152
  throw result;
152
153
  }
153
154
  },
155
+ () => {
156
+ const emptyVariantRule = {};
157
+ const m = descentParser(emptyVariantRule);
158
+ const mr = m("", []);
159
+ const result = JSON.stringify(mr);
160
+ if (result !== '[{"sequence":[]},false,0]') {
161
+ throw result;
162
+ }
163
+ },
154
164
  () => {
155
165
  const stringRule = 'AB';
156
166
  const m = descentParser(stringRule);
@@ -214,9 +224,7 @@ export const proof = {
214
224
  const cp = toArray(stringToCodePointList(s));
215
225
  const mr = descentParserCpOnly(m, '', cp);
216
226
  const success = mr[1] && mr[2] === cp.length;
217
- if (success !== expected) {
218
- throw mr;
219
- }
227
+ assertEq(success, expected, mr);
220
228
  };
221
229
  expect('a', true);
222
230
  expect('', true);
@@ -236,9 +244,7 @@ export const proof = {
236
244
  const cp = toArray(stringToCodePointList(s));
237
245
  const mr = descentParserCpOnly(m, 'value', cp);
238
246
  const success = mr[1] && mr[2] === cp.length;
239
- if (success !== expected) {
240
- throw mr;
241
- }
247
+ assertEq(success, expected, mr);
242
248
  };
243
249
  expect('', false);
244
250
  expect('[]', true);
@@ -252,9 +258,7 @@ export const proof = {
252
258
  const cp = toArray(stringToCodePointList(s));
253
259
  const mr = descentParserCpOnly(m, '', cp);
254
260
  const success = mr[1] && mr[2] === cp.length;
255
- if (success !== expected) {
256
- throw mr;
257
- }
261
+ assertEq(success, expected, mr);
258
262
  };
259
263
  expect(' true ', true);
260
264
  expect(' tr2ue ', false);
@@ -278,6 +282,33 @@ export const proof = {
278
282
  expect(' [{ "q": [ 12, false, [}], "a"] }] ', false);
279
283
  }
280
284
  ],
285
+ // Regression for the stack-recursive matcher bug: the matcher used to recurse
286
+ // natively once per grammar step, so match depth grew with input length and these
287
+ // inputs threw "RangeError: Maximum call stack size exceeded" at a few thousand
288
+ // code points. The explicit-frame-stack matcher handles them in O(1) JS call stack.
289
+ longInput: [
290
+ () => {
291
+ // long right-recursive repetition: one repeat0Plus chain across the whole input
292
+ const rule = repeat0Plus(set(' \n\r\t'));
293
+ const name = toData(rule)[1];
294
+ const m = descentParser(rule);
295
+ const cp = toArray(stringToCodePointList(' '.repeat(10000)));
296
+ const [, ok, idx] = descentParserCpOnly(m, name, cp);
297
+ assertEq(ok, true);
298
+ assertEq(idx, 10000);
299
+ },
300
+ () => {
301
+ // deep non-repetition nesting: 5000 bracket levels in the JSON-like test
302
+ // grammar — a shape that repetition-specific fixes (a `repeat` primitive)
303
+ // would not cover
304
+ const m = descentParser(deterministic());
305
+ const n = 5000;
306
+ const cp = toArray(stringToCodePointList('['.repeat(n) + ']'.repeat(n)));
307
+ const [, ok, idx] = descentParserCpOnly(m, '', cp);
308
+ assertEq(ok, true);
309
+ assertEq(idx, n * 2);
310
+ },
311
+ ],
281
312
  descentParserWithMeta: [
282
313
  () => {
283
314
  const emptyRule = '';
@@ -1,20 +1,20 @@
1
1
  /**
2
2
  * LL(1) dispatch/matcher backend over the BNF data {@link RuleSet}.
3
3
  *
4
- * Built from the serializable IR in `fs/bnf/data`, this is one member of the
4
+ * Built from the serializable IR in `fjs/bnf/data`, this is one member of the
5
5
  * family of automaton builders that consume a {@link RuleSet}: it compiles the
6
6
  * grammar into a predictive {@link dispatchMap} and matches input into an AST
7
7
  * ({@link MatchResult}). It throws at build time (`can not merge …`) when the
8
- * grammar is not LL(1) — a first/first conflict.
8
+ * grammar is not LL(1) — a first/first conflict. Nullability is looked up from
9
+ * {@link emptyTagMap} in `fjs/bnf/data` rather than re-derived here.
9
10
  *
10
11
  * @module
11
12
  */
12
13
  import { type CodePoint } from '../../text/utf16/module.f.ts';
13
14
  import { type RangeMapArray } from '../../types/range_map/module.f.ts';
14
15
  import { type StringMap } from '../../types/object/module.f.ts';
15
- import { type RuleSet } from '../data/module.f.ts';
16
+ import { type EmptyTag, type RuleSet } from '../data/module.f.ts';
16
17
  import { type Rule as FRule } from '../module.f.ts';
17
- type EmptyTag = string | true | undefined;
18
18
  type DispatchRule = {
19
19
  readonly emptyTag: EmptyTag;
20
20
  readonly rangeMap: Dispatch;
@@ -1,23 +1,24 @@
1
1
  /**
2
2
  * LL(1) dispatch/matcher backend over the BNF data {@link RuleSet}.
3
3
  *
4
- * Built from the serializable IR in `fs/bnf/data`, this is one member of the
4
+ * Built from the serializable IR in `fjs/bnf/data`, this is one member of the
5
5
  * family of automaton builders that consume a {@link RuleSet}: it compiles the
6
6
  * grammar into a predictive {@link dispatchMap} and matches input into an AST
7
7
  * ({@link MatchResult}). It throws at build time (`can not merge …`) when the
8
- * grammar is not LL(1) — a first/first conflict.
8
+ * grammar is not LL(1) — a first/first conflict. Nullability is looked up from
9
+ * {@link emptyTagMap} in `fjs/bnf/data` rather than re-derived here.
9
10
  *
10
11
  * @module
11
12
  */
12
- import {} from "../../text/utf16/module.f.js";
13
- import { strictEqual } from "../../types/function/operator/module.f.js";
14
- import { toArray } from "../../types/list/module.f.js";
15
- import { rangeMap } from "../../types/range_map/module.f.js";
16
- import { contains, set } from "../../types/string_set/module.f.js";
17
- import { rangeDecode } from "../module.f.js";
18
- import { definedEntries } from "../../types/object/module.f.js";
19
- import { toData } from "../data/module.f.js";
20
- import {} from "../module.f.js";
13
+ import {} from '../../text/utf16/module.f.js';
14
+ import { strictEqual } from '../../types/function/operator/module.f.js';
15
+ import { toArray } from '../../types/list/module.f.js';
16
+ import { rangeMap } from '../../types/range_map/module.f.js';
17
+ import { contains, set } from '../../types/string_set/module.f.js';
18
+ import { rangeDecode } from '../module.f.js';
19
+ import { definedEntries } from '../../types/object/module.f.js';
20
+ import { emptyTagMap, toData } from '../data/module.f.js';
21
+ import {} from '../module.f.js';
21
22
  const dispatchOp = rangeMap({
22
23
  union: a => b => {
23
24
  if (a === null) {
@@ -35,6 +36,7 @@ const dispatchOp = rangeMap({
35
36
  * Builds a dispatch map for a {@link RuleSet} to enable predictive parsing.
36
37
  */
37
38
  export const dispatchMap = (ruleSet) => {
39
+ const nullMap = emptyTagMap(ruleSet);
38
40
  const addRuleToDispatch = (dr, name) => {
39
41
  if (dr === null)
40
42
  return null;
@@ -70,7 +72,7 @@ export const dispatchMap = (ruleSet) => {
70
72
  if (emptyTag === true) {
71
73
  result = result.map(x => [addRuleToDispatch(x[0], item), x[1]]);
72
74
  result = toArray(dispatchOp.merge(result)(dr.rangeMap));
73
- emptyTag = dr.emptyTag !== undefined ? true : undefined;
75
+ emptyTag = nullMap[item] !== undefined ? true : undefined;
74
76
  }
75
77
  else {
76
78
  result = result.map(x => [addRuleToDispatch(x[0], item), x[1]]);
@@ -87,7 +89,7 @@ export const dispatchMap = (ruleSet) => {
87
89
  for (const [tag, item] of entries) {
88
90
  dm = dispatchRule(dm, item, newCurrent);
89
91
  const dr = dm[item];
90
- if (dr.emptyTag !== undefined) {
92
+ if (nullMap[item] !== undefined) {
91
93
  emptyTag = tag;
92
94
  }
93
95
  else {
@@ -6,4 +6,5 @@ export declare const proof: {
6
6
  throw: {
7
7
  ambiguousVariantDispatch: () => void;
8
8
  };
9
+ cyclicNullability: () => void;
9
10
  };
@@ -1,9 +1,10 @@
1
- import { stringToCodePointList } from "../../text/utf16/module.f.js";
2
- import { toArray } from "../../types/list/module.f.js";
3
- import { commaJoin0Plus, option, range, repeat0Plus, set } from "../module.f.js";
4
- import { deterministic } from "../testlib.f.js";
5
- import { toData } from "../data/module.f.js";
6
- import { dispatchMap, parser, parserRuleSet } from "./module.f.js";
1
+ import { stringToCodePointList } from '../../text/utf16/module.f.js';
2
+ import { toArray } from '../../types/list/module.f.js';
3
+ import { commaJoin0Plus, option, range, repeat0Plus, set } from '../module.f.js';
4
+ import { deterministic } from '../testlib.f.js';
5
+ import { toData } from '../data/module.f.js';
6
+ import { dispatchMap, parser, parserRuleSet } from './module.f.js';
7
+ import { assertEq } from '../../asserts/module.f.js';
7
8
  export const proof = {
8
9
  dispatch: [
9
10
  () => {
@@ -238,9 +239,7 @@ export const proof = {
238
239
  const isSuccess = (mr) => mr[1] && mr[2]?.length === 0;
239
240
  const expect = (s, success) => {
240
241
  const mr = m('', toArray(stringToCodePointList(s)));
241
- if (isSuccess(mr) !== success) {
242
- throw mr;
243
- }
242
+ assertEq(isSuccess(mr), success, mr);
244
243
  };
245
244
  expect('a', true);
246
245
  expect('', true);
@@ -259,9 +258,7 @@ export const proof = {
259
258
  const isSuccess = (mr) => mr[1] && mr[2]?.length === 0;
260
259
  const expect = (s, success) => {
261
260
  const mr = m('value', toArray(stringToCodePointList(s)));
262
- if (isSuccess(mr) !== success) {
263
- throw mr;
264
- }
261
+ assertEq(isSuccess(mr), success, mr);
265
262
  };
266
263
  expect('', false);
267
264
  expect('[]', true);
@@ -274,9 +271,7 @@ export const proof = {
274
271
  const isSuccess = (mr) => mr[1] && mr[2]?.length === 0;
275
272
  const expect = (s, success) => {
276
273
  const mr = m('', toArray(stringToCodePointList(s)));
277
- if (isSuccess(mr) !== success) {
278
- throw mr;
279
- }
274
+ assertEq(isSuccess(mr), success, mr);
280
275
  };
281
276
  expect(' true ', true);
282
277
  expect(' tr2ue ', false);
@@ -354,5 +349,27 @@ export const proof = {
354
349
  const conflictRule = { 'a': range('AA'), 'b': range('AA') };
355
350
  dispatchMap(toData(conflictRule)[0]);
356
351
  }
357
- }
352
+ },
353
+ // Regression: `emptyTagMap` must stay correct for cyclic rule references.
354
+ // A naive single-pass, memoized derivation that marks a rule nullable as
355
+ // a placeholder *before* recursing into its own children (to break the
356
+ // cycle) over-approximates nullability here, and made `dispatchMap`
357
+ // falsely report a first/first conflict for this grammar even though it
358
+ // has none — `value` only ever nests inside brackets or is the literal
359
+ // `a`, and `ws` is genuinely optional on both sides of it.
360
+ cyclicNullability: () => {
361
+ const ws = option(' ');
362
+ const value = () => ({ array: ['[', value, ']'], leaf: 'a' });
363
+ const m = parser([ws, value, ws]); // must not throw 'can not merge'
364
+ const expect = (s, success) => {
365
+ const mr = m('', toArray(stringToCodePointList(s)));
366
+ assertEq(mr[1] && mr[2]?.length === 0, success, mr);
367
+ };
368
+ expect('a', true);
369
+ expect(' a ', true);
370
+ expect('[a]', true);
371
+ expect('[[a]]', true);
372
+ expect(' [[a]] ', true);
373
+ expect('b', false);
374
+ },
358
375
  };
@@ -6,6 +6,21 @@ import { type Array2 } from '../types/array/module.f.ts';
6
6
  * For example: 0xBBBBBB_EEEEEE
7
7
  * - 0xBBBBBB is the first symbol (24 bits)
8
8
  * - 0xEEEEEE is the last symbol (24 bits)
9
+ *
10
+ * 24 bits per half, not 26 (the most `float64`'s 52-bit safe-integer mantissa
11
+ * could fit two of): 24 is divisible by 4, so each half is exactly 6 hex
12
+ * digits, and the packed pair reads as a plain `0xYYYYYY_ZZZZZZ` literal with
13
+ * no partial hex digit at either boundary. 26 bits would still be safe to
14
+ * store but wouldn't align to hex nibbles, making the packed literal harder
15
+ * to read and split by eye.
16
+ *
17
+ * Not 16 bits (32 bits total) either, even though a 32-bit pair would fit in
18
+ * a JS bitwise operator's native 32-bit range (JS `|`/`&`/`<<`/etc. operate on
19
+ * 32-bit ints, whereas the 48-bit pair used here, and even a 52-bit one,
20
+ * would need converting to `BigInt` for bitwise operations). 16 bits per
21
+ * symbol can't hold a full Unicode code point: the max scalar value `0x10FFFF`
22
+ * needs 21 bits, well past `0xFFFF`. So the bitwise-op convenience of 16 loses
23
+ * to the requirement of representing every Unicode code point in one half.
9
24
  */
10
25
  export type TerminalRange = number;
11
26
  /**
@@ -16,10 +31,6 @@ export declare const fullRange: TerminalRange;
16
31
  * Unicode scalar value range packed into a single {@link TerminalRange}.
17
32
  */
18
33
  export declare const unicodeRange: TerminalRange;
19
- /**
20
- * Maximal non-Unicode symbol encoded as a string value.
21
- */
22
- export declare const max: string;
23
34
  /**
24
35
  * Maximal Unicode code point encoded as a string value.
25
36
  */
@@ -48,7 +59,10 @@ export declare const rangeEncode: (a: number, b: number) => TerminalRange;
48
59
  */
49
60
  export declare const oneEncode: (a: number) => TerminalRange;
50
61
  /**
51
- * End-of-file marker represented as one code point beyond Unicode range.
62
+ * End-of-file marker: `mask`, the single largest value the 24-bit symbol
63
+ * space can hold (the top of `fullRange`). Deliberately outside Unicode
64
+ * (`unicodeRange` tops out at `0x10FFFF`) so it can never collide with a
65
+ * real code point.
52
66
  */
53
67
  export declare const eof: TerminalRange;
54
68
  /**
@@ -6,10 +6,12 @@
6
6
  *
7
7
  * @module
8
8
  */
9
- import { codePointListToString, stringToCodePointList } from "../text/utf16/module.f.js";
10
- import { definedValues } from "../types/object/module.f.js";
11
- import { isArray2 } from "../types/array/module.f.js";
12
- import { map, toArray, repeat as listRepeat } from "../types/list/module.f.js";
9
+ import { codePointListToString, stringToCodePointList } from '../text/utf16/module.f.js';
10
+ import { definedValues } from '../types/object/module.f.js';
11
+ import { isArray2 } from '../types/array/module.f.js';
12
+ import { map, toArray, repeat as listRepeat } from '../types/list/module.f.js';
13
+ import { contains } from '../types/range/module.f.js';
14
+ import { assert } from '../asserts/module.f.js';
13
15
  /**
14
16
  * Full 24-bit symbol range packed into a single {@link TerminalRange}.
15
17
  */
@@ -18,10 +20,6 @@ export const fullRange = 0x000000_FFFFFF;
18
20
  * Unicode scalar value range packed into a single {@link TerminalRange}.
19
21
  */
20
22
  export const unicodeRange = 0x000000_10FFFF;
21
- /**
22
- * Maximal non-Unicode symbol encoded as a string value.
23
- */
24
- export const max = codePointListToString([0xFFFFFF]);
25
23
  /**
26
24
  * Maximal Unicode code point encoded as a string value.
27
25
  */
@@ -34,11 +32,9 @@ const { fromCodePoint } = String;
34
32
  */
35
33
  const offset = 24;
36
34
  const mask = (1 << offset) - 1;
37
- const isValid = (r) => r >= 0 && r <= mask;
35
+ const isValid = contains(0, mask);
38
36
  export const rangeEncode = (a, b) => {
39
- if (!isValid(a) || !isValid(b) || a > b) {
40
- throw `Invalid range ${a} ${b}.`;
41
- }
37
+ assert(isValid(a) && isValid(b) && a <= b);
42
38
  return Number((BigInt(a) << BigInt(offset)) | BigInt(b));
43
39
  };
44
40
  /**
@@ -46,13 +42,16 @@ export const rangeEncode = (a, b) => {
46
42
  */
47
43
  export const oneEncode = (a) => rangeEncode(a, a);
48
44
  /**
49
- * End-of-file marker represented as one code point beyond Unicode range.
45
+ * End-of-file marker: `mask`, the single largest value the 24-bit symbol
46
+ * space can hold (the top of `fullRange`). Deliberately outside Unicode
47
+ * (`unicodeRange` tops out at `0x10FFFF`) so it can never collide with a
48
+ * real code point.
50
49
  */
51
- export const eof = oneEncode(0x110000);
50
+ export const eof = oneEncode(mask);
52
51
  /**
53
52
  * Decodes a packed range into `[start, end]` symbols.
54
53
  */
55
- export const rangeDecode = (r) => [Number(BigInt(r) >> BigInt(offset)), Number(BigInt(r) & BigInt(mask))];
54
+ export const rangeDecode = (r) => [Number(BigInt(r) >> BigInt(offset)), r & mask];
56
55
  const mapOneEncode = map(oneEncode);
57
56
  export const toSequence = (s) => toArray(mapOneEncode(stringToCodePointList(s)));
58
57
  /**
@@ -0,0 +1,69 @@
1
+ import { assert, assertEq } from '../asserts/module.f.js';
2
+ import { classic, deterministic } from './testlib.f.js';
3
+ import { rangeEncode, str, set, range, commaJoin0Plus, isEmpty, oneEncode, repeat1Plus, } from './module.f.js';
4
+ export const proof = {
5
+ test: () => {
6
+ classic();
7
+ deterministic();
8
+ },
9
+ throw: {
10
+ rangeEncodeInvalid: [
11
+ () => { rangeEncode(-1, 0); },
12
+ () => { rangeEncode(0, -1); },
13
+ () => { rangeEncode(5, 3); },
14
+ ],
15
+ rangeInvalid: [
16
+ () => { range('a'); },
17
+ () => { range('abc'); },
18
+ ],
19
+ },
20
+ str: [
21
+ () => {
22
+ const result = str('a');
23
+ assertEq(typeof result, 'number', result);
24
+ assertEq(result, oneEncode(0x61));
25
+ },
26
+ () => {
27
+ const result = str('ab');
28
+ assert(Array.isArray(result), result);
29
+ assertEq(result.length, 2, result);
30
+ },
31
+ ],
32
+ set: () => {
33
+ const result = set('abc');
34
+ assert(!(typeof result !== 'object' || result === null), result);
35
+ assert('a' in result, result);
36
+ assert('b' in result, result);
37
+ assert('c' in result, result);
38
+ },
39
+ commaJoin0Plus: () => {
40
+ const ws = '';
41
+ const item = 'x';
42
+ const result = commaJoin0Plus(ws)('[]', item);
43
+ assert(Array.isArray(result), result);
44
+ assert(result[0] === '[', result);
45
+ },
46
+ isEmpty: [
47
+ () => { assert(isEmpty(''), 'empty string should be empty'); },
48
+ () => { assert(isEmpty([]), 'empty array should be empty'); },
49
+ () => { assert(!(isEmpty('a')), 'non-empty string should not be empty'); },
50
+ () => {
51
+ const f = () => '';
52
+ assert(isEmpty(f), 'function returning empty string should be empty');
53
+ },
54
+ ],
55
+ repeat1Plus: [
56
+ () => {
57
+ const result = repeat1Plus('x');
58
+ assert(result[0] === 'x');
59
+ assertEq(typeof result[1], 'function', 'expected repeat0Plus function');
60
+ },
61
+ () => {
62
+ const rule = 'ab';
63
+ const result = repeat1Plus(rule);
64
+ assertEq(result[0], rule);
65
+ const inner = result[1]();
66
+ assert(!(!('some' in inner) || !('none' in inner)), 'expected Option shape');
67
+ },
68
+ ],
69
+ };
@@ -1,4 +1,4 @@
1
- import { commaJoin0Plus, max, none, option, range, remove, repeat, repeat0Plus, set } from "./module.f.js";
1
+ import { commaJoin0Plus, none, option, range, remove, repeat, repeat0Plus, set, unicodeMax } from './module.f.js';
2
2
  export const classic = () => {
3
3
  // https://www.json.org/json-en.html
4
4
  const json = () => [element];
@@ -93,7 +93,7 @@ export const deterministic = () => {
93
93
  const string = [
94
94
  '"',
95
95
  repeat0Plus({
96
- ...remove(range(` ${max}`), set('"\\')),
96
+ ...remove(range(` ${unicodeMax}`), set('"\\')),
97
97
  escape: [
98
98
  '\\',
99
99
  {
@@ -3,13 +3,13 @@
3
3
  *
4
4
  * @module
5
5
  */
6
- import { sha256 } from "../../crypto/sha2/module.f.js";
7
- import { cBase32ToVec, vecToCBase32 } from "../../cbase32/module.f.js";
8
- import { forEachStep, pure } from "../../effects/module.f.js";
9
- import { errorExit, log, writeFromStream } from "../../effects/node/module.f.js";
10
- import { dispatch } from "../../cli/module.f.js";
11
- import {} from "../../effects/memory/module.f.js";
12
- import { casAddFile, fileCas } from "../module.f.js";
6
+ import { sha256 } from '../../crypto/sha2/module.f.js';
7
+ import { cBase32ToVec, vecToCBase32 } from '../../basen/cbase32/module.f.js';
8
+ import { forEachStep, pure } from '../../effects/module.f.js';
9
+ import { errorExit, log, writeFromStream } from '../../effects/node/module.f.js';
10
+ import { dispatch } from '../../cli/module.f.js';
11
+ import {} from '../../effects/memory/module.f.js';
12
+ import { casAddFile, fileCas } from '../module.f.js';
13
13
  export const commands = [
14
14
  {
15
15
  names: ['add'],
@@ -2,13 +2,16 @@ export declare const proof: {
2
2
  mainAdd: () => void;
3
3
  mainAddGetBig: () => void;
4
4
  mainAddWrongArgs: () => void;
5
+ mainAddMissingFile: () => void;
5
6
  mainGetFound: () => void;
6
7
  mainGetNotFound: () => void;
7
8
  mainGetWrongArgs: () => void;
8
9
  mainGetInvalidHash: () => void;
9
10
  mainList: () => void;
10
11
  mainListEmptyStore: () => void;
11
- mainListCorruptStore: () => void;
12
12
  mainNoCmd: () => void;
13
13
  mainUnknownCmd: () => void;
14
+ throw: {
15
+ mainListCorruptStore: () => readonly [import("../../effects/node/virtual/module.f.ts").State, number];
16
+ };
14
17
  };