functionalscript 0.37.0 → 0.39.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 (517) hide show
  1. package/README.md +1 -1
  2. package/{fs → fjs}/asn.1/proof.f.js +32 -94
  3. package/fjs/asserts/module.f.d.ts +36 -0
  4. package/fjs/asserts/module.f.js +39 -0
  5. package/fjs/asserts/proof.f.d.ts +11 -0
  6. package/fjs/asserts/proof.f.js +18 -0
  7. package/{fs → fjs}/base_n/proof.f.js +12 -36
  8. package/{fs → fjs}/basen/base64/proof.f.d.ts +1 -0
  9. package/{fs → fjs}/basen/base64/proof.f.js +15 -1
  10. package/{fs → fjs}/basen/cbase32/proof.f.js +15 -42
  11. package/fjs/bnf/data/module.f.d.ts +52 -0
  12. package/{fs → fjs}/bnf/data/module.f.js +53 -3
  13. package/{fs → fjs}/bnf/data/proof.f.d.ts +1 -0
  14. package/{fs → fjs}/bnf/data/proof.f.js +54 -19
  15. package/{fs → fjs}/bnf/descent/module.f.d.ts +4 -14
  16. package/fjs/bnf/descent/module.f.js +124 -0
  17. package/{fs → fjs}/bnf/descent/proof.f.d.ts +1 -0
  18. package/{fs → fjs}/bnf/descent/proof.f.js +55 -24
  19. package/{fs → fjs}/bnf/ll1/module.f.d.ts +4 -4
  20. package/{fs → fjs}/bnf/ll1/module.f.js +7 -5
  21. package/{fs → fjs}/bnf/ll1/proof.f.d.ts +1 -0
  22. package/{fs → fjs}/bnf/ll1/proof.f.js +27 -10
  23. package/{fs → fjs}/bnf/module.f.d.ts +19 -5
  24. package/{fs → fjs}/bnf/module.f.js +10 -11
  25. package/fjs/bnf/proof.f.js +69 -0
  26. package/{fs → fjs}/bnf/testlib.f.js +2 -2
  27. package/fjs/bnf/token_symbol/module.f.d.ts +38 -0
  28. package/fjs/bnf/token_symbol/module.f.js +48 -0
  29. package/fjs/bnf/token_symbol/proof.f.d.ts +10 -0
  30. package/fjs/bnf/token_symbol/proof.f.js +37 -0
  31. package/{fs → fjs}/cas/cli/module.f.js +6 -9
  32. package/{fs → fjs}/cas/cli/proof.f.d.ts +4 -1
  33. package/{fs → fjs}/cas/cli/proof.f.js +29 -66
  34. package/fjs/cas/evo/mcp/module.f.d.ts +27 -0
  35. package/fjs/cas/evo/mcp/module.f.js +94 -0
  36. package/fjs/cas/evo/mcp/proof.f.d.ts +11 -0
  37. package/fjs/cas/evo/mcp/proof.f.js +126 -0
  38. package/fjs/cas/evo/module.f.d.ts +202 -0
  39. package/fjs/cas/evo/module.f.js +421 -0
  40. package/fjs/cas/evo/proof.f.d.ts +39 -0
  41. package/fjs/cas/evo/proof.f.js +572 -0
  42. package/fjs/cas/mcp/module.f.d.ts +49 -0
  43. package/{fs → fjs}/cas/mcp/module.f.js +61 -81
  44. package/{fs → fjs}/cas/mcp/proof.f.d.ts +4 -1
  45. package/{fs → fjs}/cas/mcp/proof.f.js +45 -17
  46. package/{fs → fjs}/cas/module.f.d.ts +10 -0
  47. package/{fs → fjs}/cas/module.f.js +89 -36
  48. package/fjs/cas/proof.f.d.ts +18 -0
  49. package/fjs/cas/proof.f.js +305 -0
  50. package/{fs → fjs}/ci/bun/module.f.js +3 -3
  51. package/{fs → fjs}/ci/common/module.f.d.ts +1 -2
  52. package/{fs → fjs}/ci/common/module.f.js +1 -5
  53. package/{fs → fjs}/ci/config/module.f.d.ts +8 -8
  54. package/{fs → fjs}/ci/config/module.f.js +8 -8
  55. package/{fs → fjs}/ci/deno/module.f.js +3 -3
  56. package/{fs → fjs}/ci/module.f.js +3 -4
  57. package/{fs → fjs}/ci/node/module.f.js +11 -9
  58. package/{fs → fjs}/ci/proof.f.js +16 -9
  59. package/{fs → fjs}/ci/rust/module.f.js +9 -1
  60. package/{fs → fjs}/cli/module.f.js +2 -2
  61. package/{fs → fjs}/cli/proof.f.js +22 -63
  62. package/{fs → fjs}/common/monoid/module.f.d.ts +46 -2
  63. package/fjs/common/monoid/module.f.js +88 -0
  64. package/fjs/common/monoid/proof.f.d.ts +9 -0
  65. package/fjs/common/monoid/proof.f.js +48 -0
  66. package/{fs → fjs}/crypto/hmac/proof.f.js +4 -12
  67. package/fjs/crypto/pow/proof.f.js +111 -0
  68. package/{fs → fjs}/crypto/secp/proof.f.js +12 -33
  69. package/{fs → fjs}/crypto/sha2/proof.f.js +18 -49
  70. package/{fs → fjs}/crypto/sign/module.f.d.ts +0 -5
  71. package/{fs → fjs}/crypto/sign/module.f.js +7 -4
  72. package/{fs → fjs}/crypto/sign/proof.f.js +36 -105
  73. package/{fs → fjs}/crypto/vdf/proof.f.js +22 -63
  74. package/{fs → fjs}/dev/module.f.js +25 -25
  75. package/{fs → fjs}/dev/package_json/proof.f.js +7 -7
  76. package/{fs → fjs}/dev/proof.f.js +2 -4
  77. package/{fs → fjs}/djs/ast/proof.f.js +4 -12
  78. package/{fs → fjs}/djs/module.f.js +5 -8
  79. package/{fs → fjs}/djs/parser/module.f.d.ts +8 -0
  80. package/{fs → fjs}/djs/parser/module.f.js +37 -0
  81. package/{fs → fjs}/djs/parser/proof.f.js +138 -400
  82. package/{fs → fjs}/djs/proof.f.js +13 -36
  83. package/{fs → fjs}/djs/serializer/proof.f.js +14 -39
  84. package/fjs/djs/tokenizer/module.f.d.ts +24 -0
  85. package/fjs/djs/tokenizer/module.f.js +472 -0
  86. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.d.ts +4 -3
  87. package/{fs/djs/tokenizer-new → fjs/djs/tokenizer}/proof.f.js +446 -445
  88. package/{fs → fjs}/djs/transpiler/module.f.js +6 -6
  89. package/{fs → fjs}/djs/transpiler/proof.f.d.ts +3 -0
  90. package/{fs → fjs}/djs/transpiler/proof.f.js +29 -30
  91. package/fjs/effects/eff/module.f.d.ts +72 -0
  92. package/fjs/effects/eff/module.f.js +46 -0
  93. package/fjs/effects/eff/proof.f.d.ts +11 -0
  94. package/fjs/effects/eff/proof.f.js +58 -0
  95. package/{fs → fjs}/effects/list/module.f.d.ts +11 -5
  96. package/{fs → fjs}/effects/list/module.f.js +2 -1
  97. package/{fs → fjs}/effects/memory/proof.f.js +15 -29
  98. package/fjs/effects/module.f.d.ts +388 -0
  99. package/fjs/effects/module.f.js +288 -0
  100. package/{fs → fjs}/effects/node/memory/proof.js +7 -13
  101. package/{fs → fjs}/effects/node/module.d.ts +1 -1
  102. package/{fs → fjs}/effects/node/module.f.d.ts +2 -2
  103. package/{fs → fjs}/effects/node/module.f.js +9 -11
  104. package/{fs → fjs}/effects/node/module.js +3 -3
  105. package/{fs → fjs}/effects/node/proof.f.d.ts +1 -0
  106. package/{fs → fjs}/effects/node/proof.f.js +121 -299
  107. package/{fs → fjs}/effects/node/virtual/proof.f.d.ts +1 -0
  108. package/{fs → fjs}/effects/node/virtual/proof.f.js +36 -29
  109. package/fjs/effects/proof.f.d.ts +51 -0
  110. package/fjs/effects/proof.f.js +178 -0
  111. package/{fs → fjs}/emergent_testing/module.f.js +55 -39
  112. package/{fs → fjs}/emergent_testing/proof.f.d.ts +4 -0
  113. package/{fs → fjs}/emergent_testing/proof.f.js +60 -27
  114. package/{fs → fjs}/fsc/proof.f.js +12 -34
  115. package/{fs → fjs}/fsm/proof.f.js +5 -12
  116. package/{fs → fjs}/mcp/module.f.d.ts +7 -0
  117. package/{fs → fjs}/mcp/module.f.js +17 -10
  118. package/{fs → fjs}/mcp/proof.f.js +17 -16
  119. package/{fs → fjs}/mcp/stdio/module.f.d.ts +4 -4
  120. package/{fs → fjs}/mcp/stdio/module.f.js +14 -14
  121. package/{fs → fjs}/media/html/proof.f.js +12 -33
  122. package/{fs → fjs}/media/json/parser/module.f.d.ts +5 -0
  123. package/{fs → fjs}/media/json/parser/module.f.js +14 -0
  124. package/{fs → fjs}/media/json/parser/proof.f.js +39 -114
  125. package/{fs → fjs}/media/json/rpc/module.f.js +1 -1
  126. package/{fs → fjs}/media/json/schema/module.f.d.ts +2 -2
  127. package/{fs → fjs}/media/json/schema/module.f.js +23 -39
  128. package/{fs → fjs}/media/json/schema/proof.f.js +3 -6
  129. package/{fs → fjs}/media/json/serializer/proof.f.js +10 -27
  130. package/{fs → fjs}/media/module.f.d.ts +6 -6
  131. package/{fs → fjs}/media/module.f.js +3 -4
  132. package/{fs → fjs}/media/proof.f.js +5 -4
  133. package/{fs → fjs}/media/revision/module.f.d.ts +31 -4
  134. package/{fs → fjs}/media/revision/module.f.js +35 -23
  135. package/{fs → fjs}/media/revision/proof.f.d.ts +10 -8
  136. package/fjs/media/revision/proof.f.js +140 -0
  137. package/{fs → fjs}/media/type/module.f.js +2 -2
  138. package/{fs → fjs}/media/type/proof.f.js +8 -15
  139. package/{fs → fjs}/module.f.js +5 -9
  140. package/{fs → fjs}/path/proof.f.js +27 -78
  141. package/{fs → fjs}/proof.f.js +2 -0
  142. package/{fs → fjs}/sul/id/proof.f.js +7 -21
  143. package/{fs → fjs}/sul/level/hash/proof.f.js +5 -5
  144. package/{fs → fjs}/sul/level/literal/proof.f.js +12 -26
  145. package/fjs/text/ascii/proof.f.d.ts +6 -0
  146. package/{fs → fjs}/text/ascii/proof.f.js +4 -14
  147. package/{fs → fjs}/text/code_point/module.f.js +10 -10
  148. package/{fs → fjs}/text/proof.f.js +4 -9
  149. package/{fs → fjs}/text/sgr/proof.f.js +6 -15
  150. package/{fs → fjs}/text/utf16/module.f.js +1 -1
  151. package/{fs → fjs}/text/utf16/proof.f.js +23 -66
  152. package/{fs → fjs}/text/utf8/proof.f.js +56 -125
  153. package/{fs → fjs}/types/array/proof.f.js +18 -52
  154. package/fjs/types/bigfloat/proof.f.js +217 -0
  155. package/{fs → fjs}/types/bigint/module.f.js +4 -3
  156. package/{fs → fjs}/types/bigint/proof.f.js +49 -145
  157. package/{fs → fjs}/types/bit_vec/module.f.js +5 -15
  158. package/{fs → fjs}/types/bit_vec/proof.f.js +72 -214
  159. package/{fs → fjs}/types/btree/find/proof.f.js +23 -66
  160. package/{fs → fjs}/types/btree/proof.f.js +5 -12
  161. package/{fs → fjs}/types/btree/remove/module.f.d.ts +5 -0
  162. package/{fs → fjs}/types/btree/remove/module.f.js +12 -0
  163. package/{fs → fjs}/types/btree/remove/proof.f.d.ts +2 -0
  164. package/{fs → fjs}/types/btree/remove/proof.f.js +83 -230
  165. package/{fs → fjs}/types/btree/set/module.f.js +5 -2
  166. package/{fs → fjs}/types/btree/set/proof.f.js +35 -24
  167. package/{fs → fjs}/types/byte_set/proof.f.js +22 -63
  168. package/{fs → fjs}/types/function/compare/proof.f.js +13 -36
  169. package/{fs → fjs}/types/function/operator/proof.f.js +17 -48
  170. package/{fs → fjs}/types/function/proof.f.js +2 -3
  171. package/{fs → fjs}/types/list/module.f.d.ts +21 -0
  172. package/{fs → fjs}/types/list/module.f.js +17 -0
  173. package/{fs → fjs}/types/list/proof.f.d.ts +1 -0
  174. package/{fs → fjs}/types/list/proof.f.js +79 -164
  175. package/{fs → fjs}/types/map/proof.f.js +4 -12
  176. package/{fs → fjs}/types/nibble_set/proof.f.js +16 -45
  177. package/{fs → fjs}/types/nominal/proof.f.js +5 -10
  178. package/fjs/types/nullable/proof.f.js +29 -0
  179. package/{fs → fjs}/types/number/module.f.js +2 -1
  180. package/{fs → fjs}/types/number/proof.f.js +9 -24
  181. package/{fs → fjs}/types/object/proof.f.js +3 -6
  182. package/{fs → fjs}/types/patricia_trie/proof.f.js +21 -21
  183. package/{fs → fjs}/types/prime_field/module.f.js +2 -7
  184. package/{fs → fjs}/types/range/module.f.d.ts +1 -1
  185. package/fjs/types/range/module.f.js +2 -0
  186. package/fjs/types/range/proof.f.js +9 -0
  187. package/{fs → fjs}/types/range_map/proof.f.js +28 -81
  188. package/{fs → fjs}/types/result/proof.f.d.ts +3 -2
  189. package/fjs/types/result/proof.f.js +31 -0
  190. package/{fs → fjs}/types/rtti/common/module.f.d.ts +36 -1
  191. package/{fs → fjs}/types/rtti/common/module.f.js +44 -0
  192. package/fjs/types/rtti/common/proof.f.d.ts +8 -0
  193. package/fjs/types/rtti/common/proof.f.js +51 -0
  194. package/{fs → fjs}/types/rtti/parse/module.f.js +13 -22
  195. package/{fs → fjs}/types/rtti/parse/proof.f.js +7 -18
  196. package/{fs → fjs}/types/rtti/ts/module.f.d.ts +10 -4
  197. package/{fs → fjs}/types/rtti/validate/module.f.js +8 -29
  198. package/{fs → fjs}/types/rtti/validate/proof.f.js +4 -9
  199. package/{fs → fjs}/types/sorted_list/proof.f.js +8 -21
  200. package/{fs → fjs}/types/sorted_set/proof.f.js +14 -39
  201. package/{fs → fjs}/types/string/module.f.js +10 -2
  202. package/fjs/types/string/proof.f.js +77 -0
  203. package/fjs/types/string_set/proof.f.js +43 -0
  204. package/{fs → fjs}/types/ts/proof.f.js +15 -42
  205. package/{fs → fjs}/types/uint8array/module.f.js +7 -7
  206. package/{fs → fjs}/types/uint8array/proof.f.d.ts +4 -1
  207. package/{fs → fjs}/types/uint8array/proof.f.js +7 -7
  208. package/{fs → fjs}/website/module.f.js +2 -3
  209. package/{fs → fjs}/website/proof.f.js +3 -6
  210. package/package.json +8 -8
  211. package/fs/asserts/module.f.d.ts +0 -4
  212. package/fs/asserts/module.f.js +0 -9
  213. package/fs/asserts/proof.f.d.ts +0 -8
  214. package/fs/asserts/proof.f.js +0 -51
  215. package/fs/bnf/data/module.f.d.ts +0 -30
  216. package/fs/bnf/descent/module.f.js +0 -119
  217. package/fs/bnf/proof.f.js +0 -104
  218. package/fs/cas/mcp/module.f.d.ts +0 -36
  219. package/fs/cas/proof.f.d.ts +0 -20
  220. package/fs/cas/proof.f.js +0 -294
  221. package/fs/common/monoid/module.f.js +0 -44
  222. package/fs/common/monoid/proof.f.d.ts +0 -4
  223. package/fs/common/monoid/proof.f.js +0 -27
  224. package/fs/crypto/pow/proof.f.js +0 -161
  225. package/fs/djs/tokenizer/module.f.d.ts +0 -12
  226. package/fs/djs/tokenizer/module.f.js +0 -62
  227. package/fs/djs/tokenizer/proof.f.d.ts +0 -7
  228. package/fs/djs/tokenizer/proof.f.js +0 -543
  229. package/fs/djs/tokenizer-new/module.f.d.ts +0 -3
  230. package/fs/djs/tokenizer-new/module.f.js +0 -155
  231. package/fs/effects/module.f.d.ts +0 -106
  232. package/fs/effects/module.f.js +0 -80
  233. package/fs/effects/proof.f.d.ts +0 -25
  234. package/fs/effects/proof.f.js +0 -115
  235. package/fs/media/revision/proof.f.js +0 -119
  236. package/fs/text/ascii/proof.f.d.ts +0 -4
  237. package/fs/types/bigfloat/proof.f.js +0 -348
  238. package/fs/types/nullable/proof.f.js +0 -50
  239. package/fs/types/range/module.f.js +0 -2
  240. package/fs/types/range/proof.f.js +0 -18
  241. package/fs/types/result/proof.f.js +0 -52
  242. package/fs/types/string/proof.f.js +0 -118
  243. package/fs/types/string_set/proof.f.js +0 -82
  244. /package/{fs → fjs}/asn.1/module.f.d.ts +0 -0
  245. /package/{fs → fjs}/asn.1/module.f.js +0 -0
  246. /package/{fs → fjs}/asn.1/proof.f.d.ts +0 -0
  247. /package/{fs → fjs}/base_n/module.f.d.ts +0 -0
  248. /package/{fs → fjs}/base_n/module.f.js +0 -0
  249. /package/{fs → fjs}/base_n/proof.f.d.ts +0 -0
  250. /package/{fs → fjs}/basen/base128/module.f.d.ts +0 -0
  251. /package/{fs → fjs}/basen/base128/module.f.js +0 -0
  252. /package/{fs → fjs}/basen/base128/proof.f.d.ts +0 -0
  253. /package/{fs → fjs}/basen/base128/proof.f.js +0 -0
  254. /package/{fs → fjs}/basen/base64/module.f.d.ts +0 -0
  255. /package/{fs → fjs}/basen/base64/module.f.js +0 -0
  256. /package/{fs → fjs}/basen/cbase32/module.f.d.ts +0 -0
  257. /package/{fs → fjs}/basen/cbase32/module.f.js +0 -0
  258. /package/{fs → fjs}/basen/cbase32/proof.f.d.ts +0 -0
  259. /package/{fs → fjs}/bnf/proof.f.d.ts +0 -0
  260. /package/{fs → fjs}/bnf/testlib.f.d.ts +0 -0
  261. /package/{fs → fjs}/cas/cli/module.f.d.ts +0 -0
  262. /package/{fs → fjs}/ci/bun/module.f.d.ts +0 -0
  263. /package/{fs → fjs}/ci/deno/module.f.d.ts +0 -0
  264. /package/{fs → fjs}/ci/module.f.d.ts +0 -0
  265. /package/{fs → fjs}/ci/node/module.f.d.ts +0 -0
  266. /package/{fs → fjs}/ci/playwright/module.f.d.ts +0 -0
  267. /package/{fs → fjs}/ci/playwright/module.f.js +0 -0
  268. /package/{fs → fjs}/ci/proof.f.d.ts +0 -0
  269. /package/{fs → fjs}/ci/rust/module.f.d.ts +0 -0
  270. /package/{fs → fjs}/cli/module.f.d.ts +0 -0
  271. /package/{fs → fjs}/cli/proof.f.d.ts +0 -0
  272. /package/{fs → fjs}/crypto/hmac/module.f.d.ts +0 -0
  273. /package/{fs → fjs}/crypto/hmac/module.f.js +0 -0
  274. /package/{fs → fjs}/crypto/hmac/proof.f.d.ts +0 -0
  275. /package/{fs → fjs}/crypto/pow/module.f.d.ts +0 -0
  276. /package/{fs → fjs}/crypto/pow/module.f.js +0 -0
  277. /package/{fs → fjs}/crypto/pow/proof.f.d.ts +0 -0
  278. /package/{fs → fjs}/crypto/secp/module.f.d.ts +0 -0
  279. /package/{fs → fjs}/crypto/secp/module.f.js +0 -0
  280. /package/{fs → fjs}/crypto/secp/proof.f.d.ts +0 -0
  281. /package/{fs → fjs}/crypto/sha2/module.f.d.ts +0 -0
  282. /package/{fs → fjs}/crypto/sha2/module.f.js +0 -0
  283. /package/{fs → fjs}/crypto/sha2/proof.f.d.ts +0 -0
  284. /package/{fs → fjs}/crypto/sign/proof.f.d.ts +0 -0
  285. /package/{fs → fjs}/crypto/vdf/module.f.d.ts +0 -0
  286. /package/{fs → fjs}/crypto/vdf/module.f.js +0 -0
  287. /package/{fs → fjs}/crypto/vdf/proof.f.d.ts +0 -0
  288. /package/{fs → fjs}/dev/module.f.d.ts +0 -0
  289. /package/{fs → fjs}/dev/package_json/module.f.d.ts +0 -0
  290. /package/{fs → fjs}/dev/package_json/module.f.js +0 -0
  291. /package/{fs → fjs}/dev/package_json/proof.f.d.ts +0 -0
  292. /package/{fs → fjs}/dev/proof.f.d.ts +0 -0
  293. /package/{fs → fjs}/djs/ast/module.f.d.ts +0 -0
  294. /package/{fs → fjs}/djs/ast/module.f.js +0 -0
  295. /package/{fs → fjs}/djs/ast/proof.f.d.ts +0 -0
  296. /package/{fs → fjs}/djs/examples/input.f.d.ts +0 -0
  297. /package/{fs → fjs}/djs/examples/input.f.js +0 -0
  298. /package/{fs → fjs}/djs/examples/m.f.d.ts +0 -0
  299. /package/{fs → fjs}/djs/examples/m.f.js +0 -0
  300. /package/{fs → fjs}/djs/module.f.d.ts +0 -0
  301. /package/{fs → fjs}/djs/parser/proof.f.d.ts +0 -0
  302. /package/{fs → fjs}/djs/proof.f.d.ts +0 -0
  303. /package/{fs → fjs}/djs/serializer/module.f.d.ts +0 -0
  304. /package/{fs → fjs}/djs/serializer/module.f.js +0 -0
  305. /package/{fs → fjs}/djs/serializer/proof.f.d.ts +0 -0
  306. /package/{fs → fjs}/djs/transpiler/module.f.d.ts +0 -0
  307. /package/{fs → fjs}/effects/memory/module.f.d.ts +0 -0
  308. /package/{fs → fjs}/effects/memory/module.f.js +0 -0
  309. /package/{fs → fjs}/effects/memory/proof.f.d.ts +0 -0
  310. /package/{fs → fjs}/effects/mock/module.f.d.ts +0 -0
  311. /package/{fs → fjs}/effects/mock/module.f.js +0 -0
  312. /package/{fs → fjs}/effects/module.d.ts +0 -0
  313. /package/{fs → fjs}/effects/module.js +0 -0
  314. /package/{fs → fjs}/effects/node/memory/module.d.ts +0 -0
  315. /package/{fs → fjs}/effects/node/memory/module.js +0 -0
  316. /package/{fs → fjs}/effects/node/memory/proof.d.ts +0 -0
  317. /package/{fs → fjs}/effects/node/virtual/module.f.d.ts +0 -0
  318. /package/{fs → fjs}/effects/node/virtual/module.f.js +0 -0
  319. /package/{fs → fjs}/emergent_testing/all.test.d.ts +0 -0
  320. /package/{fs → fjs}/emergent_testing/all.test.js +0 -0
  321. /package/{fs → fjs}/emergent_testing/example.f.d.ts +0 -0
  322. /package/{fs → fjs}/emergent_testing/example.f.js +0 -0
  323. /package/{fs → fjs}/emergent_testing/module.f.d.ts +0 -0
  324. /package/{fs → fjs}/emergent_testing/scenarios/all.d.ts +0 -0
  325. /package/{fs → fjs}/emergent_testing/scenarios/all.js +0 -0
  326. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -0
  327. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.fail.js +0 -0
  328. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -0
  329. /package/{fs → fjs}/emergent_testing/scenarios/async-subtests.pass.js +0 -0
  330. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.d.ts +0 -0
  331. /package/{fs → fjs}/emergent_testing/scenarios/async.fail.js +0 -0
  332. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.d.ts +0 -0
  333. /package/{fs → fjs}/emergent_testing/scenarios/async.pass.js +0 -0
  334. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.d.ts +0 -0
  335. /package/{fs → fjs}/emergent_testing/scenarios/fail.fail.js +0 -0
  336. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.d.ts +0 -0
  337. /package/{fs → fjs}/emergent_testing/scenarios/return-value.pass.js +0 -0
  338. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.d.ts +0 -0
  339. /package/{fs → fjs}/emergent_testing/scenarios/thenable.pass.js +0 -0
  340. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.d.ts +0 -0
  341. /package/{fs → fjs}/emergent_testing/scenarios/thenable2.pass.js +0 -0
  342. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.d.ts +0 -0
  343. /package/{fs → fjs}/emergent_testing/scenarios/throw.pass.js +0 -0
  344. /package/{fs → fjs}/fsc/bnf.f.d.ts +0 -0
  345. /package/{fs → fjs}/fsc/bnf.f.js +0 -0
  346. /package/{fs → fjs}/fsc/json.f.d.ts +0 -0
  347. /package/{fs → fjs}/fsc/json.f.js +0 -0
  348. /package/{fs → fjs}/fsc/module.f.d.ts +0 -0
  349. /package/{fs → fjs}/fsc/module.f.js +0 -0
  350. /package/{fs → fjs}/fsc/proof.f.d.ts +0 -0
  351. /package/{fs → fjs}/fsm/module.f.d.ts +0 -0
  352. /package/{fs → fjs}/fsm/module.f.js +0 -0
  353. /package/{fs → fjs}/fsm/proof.f.d.ts +0 -0
  354. /package/{fs → fjs}/js/tokenizer/module.f.d.ts +0 -0
  355. /package/{fs → fjs}/js/tokenizer/module.f.js +0 -0
  356. /package/{fs → fjs}/js/tokenizer/proof.f.d.ts +0 -0
  357. /package/{fs → fjs}/js/tokenizer/proof.f.js +0 -0
  358. /package/{fs → fjs}/mcp/proof.f.d.ts +0 -0
  359. /package/{fs → fjs}/mcp/stdio/proof.f.d.ts +0 -0
  360. /package/{fs → fjs}/mcp/stdio/proof.f.js +0 -0
  361. /package/{fs → fjs}/media/html/module.f.d.ts +0 -0
  362. /package/{fs → fjs}/media/html/module.f.js +0 -0
  363. /package/{fs → fjs}/media/html/proof.f.d.ts +0 -0
  364. /package/{fs → fjs}/media/json/module.f.d.ts +0 -0
  365. /package/{fs → fjs}/media/json/module.f.js +0 -0
  366. /package/{fs → fjs}/media/json/parser/proof.f.d.ts +0 -0
  367. /package/{fs → fjs}/media/json/proof.f.d.ts +0 -0
  368. /package/{fs → fjs}/media/json/proof.f.js +0 -0
  369. /package/{fs → fjs}/media/json/rpc/module.f.d.ts +0 -0
  370. /package/{fs → fjs}/media/json/rpc/proof.f.d.ts +0 -0
  371. /package/{fs → fjs}/media/json/rpc/proof.f.js +0 -0
  372. /package/{fs → fjs}/media/json/schema/proof.f.d.ts +0 -0
  373. /package/{fs → fjs}/media/json/serializer/module.f.d.ts +0 -0
  374. /package/{fs → fjs}/media/json/serializer/module.f.js +0 -0
  375. /package/{fs → fjs}/media/json/serializer/proof.f.d.ts +0 -0
  376. /package/{fs → fjs}/media/json/tokenizer/module.f.d.ts +0 -0
  377. /package/{fs → fjs}/media/json/tokenizer/module.f.js +0 -0
  378. /package/{fs → fjs}/media/json/tokenizer/proof.f.d.ts +0 -0
  379. /package/{fs → fjs}/media/json/tokenizer/proof.f.js +0 -0
  380. /package/{fs → fjs}/media/proof.f.d.ts +0 -0
  381. /package/{fs → fjs}/media/type/module.f.d.ts +0 -0
  382. /package/{fs → fjs}/media/type/proof.f.d.ts +0 -0
  383. /package/{fs → fjs}/module.d.ts +0 -0
  384. /package/{fs → fjs}/module.f.d.ts +0 -0
  385. /package/{fs → fjs}/module.js +0 -0
  386. /package/{fs → fjs}/path/module.f.d.ts +0 -0
  387. /package/{fs → fjs}/path/module.f.js +0 -0
  388. /package/{fs → fjs}/path/proof.f.d.ts +0 -0
  389. /package/{fs → fjs}/proof.f.d.ts +0 -0
  390. /package/{fs → fjs}/sul/id/module.f.d.ts +0 -0
  391. /package/{fs → fjs}/sul/id/module.f.js +0 -0
  392. /package/{fs → fjs}/sul/id/proof.f.d.ts +0 -0
  393. /package/{fs → fjs}/sul/level/hash/module.f.d.ts +0 -0
  394. /package/{fs → fjs}/sul/level/hash/module.f.js +0 -0
  395. /package/{fs → fjs}/sul/level/hash/proof.f.d.ts +0 -0
  396. /package/{fs → fjs}/sul/level/literal/module.f.d.ts +0 -0
  397. /package/{fs → fjs}/sul/level/literal/module.f.js +0 -0
  398. /package/{fs → fjs}/sul/level/literal/proof.f.d.ts +0 -0
  399. /package/{fs → fjs}/sul/module.f.d.ts +0 -0
  400. /package/{fs → fjs}/sul/module.f.js +0 -0
  401. /package/{fs → fjs}/sul/proof.f.d.ts +0 -0
  402. /package/{fs → fjs}/sul/proof.f.js +0 -0
  403. /package/{fs → fjs}/text/ascii/module.f.d.ts +0 -0
  404. /package/{fs → fjs}/text/ascii/module.f.js +0 -0
  405. /package/{fs → fjs}/text/code_point/module.f.d.ts +0 -0
  406. /package/{fs → fjs}/text/code_point/proof.f.d.ts +0 -0
  407. /package/{fs → fjs}/text/code_point/proof.f.js +0 -0
  408. /package/{fs → fjs}/text/module.f.d.ts +0 -0
  409. /package/{fs → fjs}/text/module.f.js +0 -0
  410. /package/{fs → fjs}/text/proof.f.d.ts +0 -0
  411. /package/{fs → fjs}/text/sgr/module.f.d.ts +0 -0
  412. /package/{fs → fjs}/text/sgr/module.f.js +0 -0
  413. /package/{fs → fjs}/text/sgr/proof.f.d.ts +0 -0
  414. /package/{fs → fjs}/text/utf16/module.f.d.ts +0 -0
  415. /package/{fs → fjs}/text/utf16/proof.f.d.ts +0 -0
  416. /package/{fs → fjs}/text/utf8/module.f.d.ts +0 -0
  417. /package/{fs → fjs}/text/utf8/module.f.js +0 -0
  418. /package/{fs → fjs}/text/utf8/proof.f.d.ts +0 -0
  419. /package/{fs → fjs}/types/array/module.f.d.ts +0 -0
  420. /package/{fs → fjs}/types/array/module.f.js +0 -0
  421. /package/{fs → fjs}/types/array/proof.f.d.ts +0 -0
  422. /package/{fs → fjs}/types/bigfloat/module.f.d.ts +0 -0
  423. /package/{fs → fjs}/types/bigfloat/module.f.js +0 -0
  424. /package/{fs → fjs}/types/bigfloat/proof.f.d.ts +0 -0
  425. /package/{fs → fjs}/types/bigint/module.f.d.ts +0 -0
  426. /package/{fs → fjs}/types/bigint/proof.f.d.ts +0 -0
  427. /package/{fs → fjs}/types/bit_vec/module.f.d.ts +0 -0
  428. /package/{fs → fjs}/types/bit_vec/proof.f.d.ts +0 -0
  429. /package/{fs → fjs}/types/btree/find/module.f.d.ts +0 -0
  430. /package/{fs → fjs}/types/btree/find/module.f.js +0 -0
  431. /package/{fs → fjs}/types/btree/find/proof.f.d.ts +0 -0
  432. /package/{fs → fjs}/types/btree/module.f.d.ts +0 -0
  433. /package/{fs → fjs}/types/btree/module.f.js +0 -0
  434. /package/{fs → fjs}/types/btree/proof.f.d.ts +0 -0
  435. /package/{fs → fjs}/types/btree/set/module.f.d.ts +0 -0
  436. /package/{fs → fjs}/types/btree/set/proof.f.d.ts +0 -0
  437. /package/{fs → fjs}/types/btree/types/module.f.d.ts +0 -0
  438. /package/{fs → fjs}/types/btree/types/module.f.js +0 -0
  439. /package/{fs → fjs}/types/byte_set/module.f.d.ts +0 -0
  440. /package/{fs → fjs}/types/byte_set/module.f.js +0 -0
  441. /package/{fs → fjs}/types/byte_set/proof.f.d.ts +0 -0
  442. /package/{fs → fjs}/types/function/compare/module.f.d.ts +0 -0
  443. /package/{fs → fjs}/types/function/compare/module.f.js +0 -0
  444. /package/{fs → fjs}/types/function/compare/proof.f.d.ts +0 -0
  445. /package/{fs → fjs}/types/function/module.f.d.ts +0 -0
  446. /package/{fs → fjs}/types/function/module.f.js +0 -0
  447. /package/{fs → fjs}/types/function/operator/module.f.d.ts +0 -0
  448. /package/{fs → fjs}/types/function/operator/module.f.js +0 -0
  449. /package/{fs → fjs}/types/function/operator/proof.f.d.ts +0 -0
  450. /package/{fs → fjs}/types/function/proof.f.d.ts +0 -0
  451. /package/{fs → fjs}/types/map/module.f.d.ts +0 -0
  452. /package/{fs → fjs}/types/map/module.f.js +0 -0
  453. /package/{fs → fjs}/types/map/proof.f.d.ts +0 -0
  454. /package/{fs → fjs}/types/nibble_set/module.f.d.ts +0 -0
  455. /package/{fs → fjs}/types/nibble_set/module.f.js +0 -0
  456. /package/{fs → fjs}/types/nibble_set/proof.f.d.ts +0 -0
  457. /package/{fs → fjs}/types/nominal/module.f.d.ts +0 -0
  458. /package/{fs → fjs}/types/nominal/module.f.js +0 -0
  459. /package/{fs → fjs}/types/nominal/proof.f.d.ts +0 -0
  460. /package/{fs → fjs}/types/nullable/module.f.d.ts +0 -0
  461. /package/{fs → fjs}/types/nullable/module.f.js +0 -0
  462. /package/{fs → fjs}/types/nullable/proof.f.d.ts +0 -0
  463. /package/{fs → fjs}/types/number/module.f.d.ts +0 -0
  464. /package/{fs → fjs}/types/number/proof.f.d.ts +0 -0
  465. /package/{fs → fjs}/types/object/module.f.d.ts +0 -0
  466. /package/{fs → fjs}/types/object/module.f.js +0 -0
  467. /package/{fs → fjs}/types/object/proof.f.d.ts +0 -0
  468. /package/{fs → fjs}/types/option/module.f.d.ts +0 -0
  469. /package/{fs → fjs}/types/option/module.f.js +0 -0
  470. /package/{fs → fjs}/types/ordered_map/module.f.d.ts +0 -0
  471. /package/{fs → fjs}/types/ordered_map/module.f.js +0 -0
  472. /package/{fs → fjs}/types/ordered_map/proof.f.d.ts +0 -0
  473. /package/{fs → fjs}/types/ordered_map/proof.f.js +0 -0
  474. /package/{fs → fjs}/types/patricia_trie/module.f.d.ts +0 -0
  475. /package/{fs → fjs}/types/patricia_trie/module.f.js +0 -0
  476. /package/{fs → fjs}/types/patricia_trie/proof.f.d.ts +0 -0
  477. /package/{fs → fjs}/types/phantom/module.f.d.ts +0 -0
  478. /package/{fs → fjs}/types/phantom/module.f.js +0 -0
  479. /package/{fs → fjs}/types/prime_field/module.f.d.ts +0 -0
  480. /package/{fs → fjs}/types/prime_field/proof.f.d.ts +0 -0
  481. /package/{fs → fjs}/types/prime_field/proof.f.js +0 -0
  482. /package/{fs → fjs}/types/range/proof.f.d.ts +0 -0
  483. /package/{fs → fjs}/types/range_map/module.f.d.ts +0 -0
  484. /package/{fs → fjs}/types/range_map/module.f.js +0 -0
  485. /package/{fs → fjs}/types/range_map/proof.f.d.ts +0 -0
  486. /package/{fs → fjs}/types/result/module.d.ts +0 -0
  487. /package/{fs → fjs}/types/result/module.f.d.ts +0 -0
  488. /package/{fs → fjs}/types/result/module.f.js +0 -0
  489. /package/{fs → fjs}/types/result/module.js +0 -0
  490. /package/{fs → fjs}/types/rtti/module.f.d.ts +0 -0
  491. /package/{fs → fjs}/types/rtti/module.f.js +0 -0
  492. /package/{fs → fjs}/types/rtti/parse/module.f.d.ts +0 -0
  493. /package/{fs → fjs}/types/rtti/parse/proof.f.d.ts +0 -0
  494. /package/{fs → fjs}/types/rtti/proof.f.d.ts +0 -0
  495. /package/{fs → fjs}/types/rtti/proof.f.js +0 -0
  496. /package/{fs → fjs}/types/rtti/ts/module.f.js +0 -0
  497. /package/{fs → fjs}/types/rtti/ts/proof.f.d.ts +0 -0
  498. /package/{fs → fjs}/types/rtti/ts/proof.f.js +0 -0
  499. /package/{fs → fjs}/types/rtti/validate/module.f.d.ts +0 -0
  500. /package/{fs → fjs}/types/rtti/validate/proof.f.d.ts +0 -0
  501. /package/{fs → fjs}/types/sorted_list/module.f.d.ts +0 -0
  502. /package/{fs → fjs}/types/sorted_list/module.f.js +0 -0
  503. /package/{fs → fjs}/types/sorted_list/proof.f.d.ts +0 -0
  504. /package/{fs → fjs}/types/sorted_set/module.f.d.ts +0 -0
  505. /package/{fs → fjs}/types/sorted_set/module.f.js +0 -0
  506. /package/{fs → fjs}/types/sorted_set/proof.f.d.ts +0 -0
  507. /package/{fs → fjs}/types/string/module.f.d.ts +0 -0
  508. /package/{fs → fjs}/types/string/proof.f.d.ts +0 -0
  509. /package/{fs → fjs}/types/string_set/module.f.d.ts +0 -0
  510. /package/{fs → fjs}/types/string_set/module.f.js +0 -0
  511. /package/{fs → fjs}/types/string_set/proof.f.d.ts +0 -0
  512. /package/{fs → fjs}/types/ts/module.f.d.ts +0 -0
  513. /package/{fs → fjs}/types/ts/module.f.js +0 -0
  514. /package/{fs → fjs}/types/ts/proof.f.d.ts +0 -0
  515. /package/{fs → fjs}/types/uint8array/module.f.d.ts +0 -0
  516. /package/{fs → fjs}/website/module.f.d.ts +0 -0
  517. /package/{fs → fjs}/website/proof.f.d.ts +0 -0
@@ -0,0 +1,472 @@
1
+ /**
2
+ * Experimental DJS parser implementation.
3
+ *
4
+ * @module
5
+ */
6
+ import { descentParser } from "../../bnf/descent/module.f.js";
7
+ import { eof, none, notSet, option, range, remove, repeat, repeat0Plus, set, unicodeMax, unicodeRange } from "../../bnf/module.f.js";
8
+ import { isKeywordToken, } from "../../js/tokenizer/module.f.js";
9
+ import { multiply } from "../../types/bigfloat/module.f.js";
10
+ import { asterisk, backspace, ht, lf, ff, cr, quotationMark, solidus, reverseSolidus, digitRange, digit0, latinCapitalLetterA, latinSmallLetterA, latinSmallLetterB, latinSmallLetterF, latinSmallLetterN, latinSmallLetterR, latinSmallLetterT, latinSmallLetterU, range as asciiRange, } from "../../text/ascii/module.f.js";
11
+ import { codePointListToString, stringToCodePointList } from "../../text/utf16/module.f.js";
12
+ import { contains } from "../../types/range/module.f.js";
13
+ import { concat, empty, filter, flat, flatMap, fold, map, stateScan, toArray } from "../../types/list/module.f.js";
14
+ import { stringifyAsTree } from "../serializer/module.f.js";
15
+ import { sort } from "../../types/object/module.f.js";
16
+ // Builds the single-token grammar that jsGrammar's whole-file `tokens` rule repeats.
17
+ const buildToken = () => {
18
+ const onenine = range('19');
19
+ const digit = range('09');
20
+ const string = [
21
+ '"',
22
+ repeat0Plus({
23
+ ...remove(range(` ${unicodeMax}`), set('"\\')),
24
+ escape: [
25
+ '\\',
26
+ {
27
+ ...set('"\\bfnrt'),
28
+ solidus: '/',
29
+ u: [
30
+ 'u',
31
+ ...repeat(4)({
32
+ digit,
33
+ AF: range('AF'),
34
+ af: range('af'),
35
+ })
36
+ ],
37
+ }
38
+ ],
39
+ }),
40
+ '"'
41
+ ];
42
+ const digits0 = repeat0Plus(digit);
43
+ const digits = [digit, digits0];
44
+ const ws = set(' \t');
45
+ const newLine = set('\n\r');
46
+ const idStart = {
47
+ smallLetter: range('az'),
48
+ bigLetter: range('AZ'),
49
+ lowLine: '_',
50
+ dollarSign: '$'
51
+ };
52
+ const idChar = {
53
+ ...idStart,
54
+ digit
55
+ };
56
+ // '.' and 'e'/'E' always succeed once seen, tagging missing digits as `numError`,
57
+ // so a malformed fraction/exponent (e.g. `0.`, `0e`) fails the whole number instead
58
+ // of silently ending it early. The sign is matched via string-literal branches
59
+ // (not `set('+-')`) because a range-variant branch's tag is the matched character
60
+ // itself, which would collide with the '+'/'-' operator tags in filterFunc.
61
+ const fracPart = { withDot: ['.', { valid: digits, numError: none }], noDot: none };
62
+ const expPart = { withExp: [set('Ee'), option({ plus: '+', minus: '-' }), { valid: digits, numError: none }], noExp: none };
63
+ // ECMAScript disallows a NumericLiteral immediately followed by an IdentifierStart
64
+ // or DecimalDigit (e.g. `00`, `123abc`). Consume that character into the number and
65
+ // tag it `numError` instead of leaving it to silently start a new token. idChar is
66
+ // wrapped in a sequence so this branch's own `numError` tag survives — a variant
67
+ // referenced directly as another variant's branch loses the outer tag to whichever
68
+ // of its own branches matches.
69
+ const number = [
70
+ {
71
+ 0: '0',
72
+ onenine: [onenine, digits0],
73
+ },
74
+ option({
75
+ bigint: 'n',
76
+ frac: [fracPart, expPart]
77
+ }),
78
+ { numError: [idChar], ok: none }
79
+ ];
80
+ const id = [idStart, repeat0Plus(idChar)];
81
+ const operator = {
82
+ '.': '.',
83
+ '=>': '=>',
84
+ '===': '===',
85
+ '==': '==',
86
+ '=': '=',
87
+ '!==': '!==',
88
+ '!=': '!=',
89
+ '!': '!',
90
+ '>>>=': '>>>=',
91
+ '>>>': '>>>',
92
+ '>>=': '>>=',
93
+ '>>': '>>',
94
+ '>=': '>=',
95
+ '>': '>',
96
+ '<<=': '<<=',
97
+ '<<': '<<',
98
+ '<=': '<=',
99
+ '<': '<',
100
+ '+=': '+=',
101
+ '++': '++',
102
+ '+': '+',
103
+ '-=': '-=',
104
+ '--': '--',
105
+ '-': '-',
106
+ '**=': '**=',
107
+ '**': '**',
108
+ '*=': '*=',
109
+ '*': '*',
110
+ '/=': '/=',
111
+ '/': '/',
112
+ '%=': '%=',
113
+ '%': '%',
114
+ '&&=': '&&=',
115
+ '&&': '&&',
116
+ '&=': '&=',
117
+ '&': '&',
118
+ '||=': '||=',
119
+ '||': '||',
120
+ '|=': '|=',
121
+ '|': '|',
122
+ '^=': '^=',
123
+ '^': '^',
124
+ '~': '~',
125
+ '??=': '??=',
126
+ '??': '??',
127
+ '?.': '?.',
128
+ '?': '?',
129
+ '[': '[',
130
+ ']': ']',
131
+ '{': '{',
132
+ '}': '}',
133
+ '(': '(',
134
+ ')': ')',
135
+ ',': ',',
136
+ ':': ':'
137
+ };
138
+ // Recursive rule: tries end (*/) first at every position so **/ → content(*) + terminator(*/).
139
+ // Falls back to the empty `unterminated` alternative at EOF instead of failing, so `comment`
140
+ // always succeeds and the descent parser never backtracks into matching '/' and '*' as
141
+ // separate operators. Callers detect an unterminated comment by checking for this tag.
142
+ const multilineContent = () => {
143
+ const char = { na: notSet('*'), a: '*' };
144
+ const end = ['*', '/'];
145
+ const more = [char, multilineContent];
146
+ return { end, more, unterminated: none };
147
+ };
148
+ const comment = ['/', {
149
+ // TODO: investigate why `not(commentEnd)` instead of `remove(unicodeRange, newLine)` fail tests.
150
+ oneline: ['/', repeat0Plus(remove(unicodeRange, newLine)), option(newLine)],
151
+ multiline: ['*', multilineContent]
152
+ }
153
+ ];
154
+ const token = {
155
+ number,
156
+ string,
157
+ id,
158
+ comment,
159
+ operator,
160
+ ws,
161
+ newLine,
162
+ eof
163
+ };
164
+ return token;
165
+ };
166
+ // The whole file's token stream as one right-recursive grammar rule. Safe at any input
167
+ // length: descentParser matches on an explicit frame stack, not the JS call stack
168
+ // (see fjs/bnf/descent/module.f.ts).
169
+ export const jsGrammar = () => repeat0Plus(buildToken());
170
+ const stringify = stringifyAsTree(sort);
171
+ const mapCodePoint = (cp) => [cp, undefined];
172
+ export const descentParserCpOnly = (m, name, cp) => {
173
+ const cpm = toArray(map(mapCodePoint)(cp));
174
+ return m(name, cpm);
175
+ };
176
+ // Advances path/line/column by one code point, mirroring fjs/js/tokenizer's tokenizeWithPositionOp.
177
+ const advanceMetadata = cp => metadata => cp === lf
178
+ ? { path: metadata.path, line: metadata.line + 1, column: 1 }
179
+ : { path: metadata.path, line: metadata.line, column: metadata.column + 1 };
180
+ // Pairs each code point with the metadata of its position *before* it's consumed.
181
+ const metadataScan = (cp, metadata) => [[[cp, metadata]], advanceMetadata(cp)(metadata)];
182
+ const codePointsWithMetadata = path => cp => toArray(flat(stateScan(metadataScan)({ path, line: 1, column: 1 })(cp)));
183
+ const isNlTag = (tag) => tag === '\n' || tag === '\r';
184
+ const isWsTag = (tag) => tag === ' ' || tag === '\t';
185
+ const scanFunc = (input, state) => {
186
+ const [stateTag, stateMetadata, stateCodePoints] = state;
187
+ if (typeof input === 'string') {
188
+ if (isNlTag(input) && isNlTag(stateTag))
189
+ return [null, state];
190
+ if (isWsTag(input) && isWsTag(stateTag))
191
+ return [null, state];
192
+ if (isNlTag(input) && isWsTag(stateTag))
193
+ return [null, [input, null, []]];
194
+ if (isWsTag(input) && isNlTag(stateTag))
195
+ return [null, state];
196
+ const newState = [input, null, []];
197
+ if (stateTag === '') {
198
+ return [null, newState];
199
+ }
200
+ const tk = [stateTag, stateMetadata, toArray(stateCodePoints)];
201
+ return [[tk], newState];
202
+ }
203
+ const [cp, codePointMetadata] = input;
204
+ const startMetadata = stateMetadata === null ? codePointMetadata : stateMetadata;
205
+ return [null, [stateTag, startMetadata, concat(stateCodePoints)([cp])]];
206
+ };
207
+ // All operator tag strings produced by the grammar's operator rule
208
+ const operatorTags = new Set([
209
+ '.', '=>', '===', '==', '=', '!==', '!=', '!',
210
+ '>>>=', '>>>', '>>=', '>>', '>=', '>',
211
+ '<<=', '<<', '<=', '<',
212
+ '+=', '++', '+', '-=', '--', '-',
213
+ '**=', '**', '*=', '*', '/=', '/', '%=', '%', // TODO: '/' here causes multi-char line comments (e.g. //ab\n) to fall through as two '/' operator tokens because the oneline rule only consumes one non-newline character (option vs repeat0Plus). Fix the comment rule to use repeat0Plus, or make filterFunc distinguish operator-branch '/' from slash characters inside comments.
214
+ '&&=', '&&', '&=', '&', '||=', '||', '|=', '|',
215
+ '^=', '^', '~', '??=', '??', '?.', '?',
216
+ '[', ']', '{', '}', '(', ')', ',', ':'
217
+ ]);
218
+ const filterFunc = tk => {
219
+ if (tk instanceof Array)
220
+ return true;
221
+ switch (tk) {
222
+ case 'number':
223
+ case 'string':
224
+ case 'id':
225
+ case 'comment':
226
+ case '\n':
227
+ case '\r':
228
+ case ' ':
229
+ case '\t':
230
+ return true;
231
+ default:
232
+ return operatorTags.has(tk);
233
+ }
234
+ };
235
+ const rangeCapitalAF = asciiRange('AF');
236
+ const stringDecodeScan = (cp, state) => {
237
+ switch (state.kind) {
238
+ case 'escape':
239
+ switch (cp) {
240
+ case quotationMark: return [[quotationMark], { kind: 'normal' }]; // \" → "
241
+ case reverseSolidus: return [[reverseSolidus], { kind: 'normal' }]; // \\ → \
242
+ case solidus: return [[solidus], { kind: 'normal' }]; // \/ → /
243
+ case latinSmallLetterB: return [[backspace], { kind: 'normal' }]; // \b → backspace (BS)
244
+ case latinSmallLetterF: return [[ff], { kind: 'normal' }]; // \f → form feed (FF)
245
+ case latinSmallLetterN: return [[lf], { kind: 'normal' }]; // \n → line feed (LF)
246
+ case latinSmallLetterR: return [[cr], { kind: 'normal' }]; // \r → carriage return (CR)
247
+ case latinSmallLetterT: return [[ht], { kind: 'normal' }]; // \t → horizontal tab (HT)
248
+ case latinSmallLetterU: return [null, { kind: 'unicode', acc: 0, count: 0 }]; // \u → start 4 hex digits
249
+ default: return [[cp], { kind: 'normal' }];
250
+ }
251
+ case 'unicode': {
252
+ // convert hex digit char to its numeric value: '0'-'9', 'A'-'F', 'a'-'f'
253
+ const digit = contains(...digitRange)(cp) ? cp - digit0
254
+ : contains(...rangeCapitalAF)(cp) ? cp - (latinCapitalLetterA - 10)
255
+ : cp - (latinSmallLetterA - 10);
256
+ const acc = (state.acc << 4) | digit;
257
+ return state.count === 3 ? [[acc], { kind: 'normal' }] : [null, { kind: 'unicode', acc, count: state.count + 1 }];
258
+ }
259
+ default:
260
+ return cp === reverseSolidus ? [null, { kind: 'escape' }] : [[cp], { kind: 'normal' }];
261
+ }
262
+ };
263
+ const decodeJsonString = codePoints => codePointListToString(flat(stateScan(stringDecodeScan)({ kind: 'normal' })(codePoints.slice(1, -1))));
264
+ // value is grammar-validated: (0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)? — no need to re-check its shape here.
265
+ const decodeNumber = value => {
266
+ // at most one of 'e'/'E' can occur, so whichever indexOf finds it (if any) is the exponent marker
267
+ const lowerEIndex = value.indexOf('e');
268
+ const eIndex = lowerEIndex < 0 ? value.indexOf('E') : lowerEIndex;
269
+ const mantissaText = eIndex < 0 ? value : value.slice(0, eIndex);
270
+ const expText = eIndex < 0 ? '' : value.slice(eIndex + 1);
271
+ const dotIndex = mantissaText.indexOf('.');
272
+ const intDigits = dotIndex < 0 ? mantissaText : mantissaText.slice(0, dotIndex);
273
+ const fracDigits = dotIndex < 0 ? '' : mantissaText.slice(dotIndex + 1);
274
+ const mantissa = BigInt(intDigits + fracDigits);
275
+ const exp = (expText === '' ? 0 : Number(expText)) - fracDigits.length;
276
+ return [mantissa, exp];
277
+ };
278
+ const keywords = new Set([
279
+ 'true', 'false', 'null', 'undefined',
280
+ 'arguments', 'await', 'break', 'case', 'catch', 'class', 'const', 'continue',
281
+ 'debugger', 'default', 'delete', 'do', 'else', 'enum', 'eval', 'export',
282
+ 'extends', 'finally', 'for', 'function', 'if', 'implements', 'import', 'in',
283
+ 'instanceof', 'interface', 'let', 'new', 'package', 'private', 'protected',
284
+ 'public', 'return', 'static', 'super', 'switch', 'this', 'throw', 'try',
285
+ 'typeof', 'var', 'void', 'while', 'with', 'yield',
286
+ ]);
287
+ const toJsToken = tk => {
288
+ const [tag, , codePoints] = tk;
289
+ switch (tag) {
290
+ case '\n':
291
+ case '\r':
292
+ return { kind: 'nl' };
293
+ case ' ':
294
+ case '\t':
295
+ return { kind: 'ws' };
296
+ case 'string':
297
+ return { kind: 'string', value: decodeJsonString(codePoints) };
298
+ case 'id': {
299
+ const value = codePointListToString(codePoints);
300
+ if (keywords.has(value))
301
+ return { kind: value };
302
+ return { kind: 'id', value };
303
+ }
304
+ case 'number': {
305
+ const value = codePointListToString(codePoints);
306
+ if (value.endsWith('n'))
307
+ return { kind: 'bigint', value: BigInt(value.slice(0, -1)) };
308
+ return { kind: 'number', value, bf: decodeNumber(value) };
309
+ }
310
+ case 'comment':
311
+ if (codePoints[1] === asterisk) // block comment /*...*/
312
+ return { kind: '/*', value: codePointListToString(codePoints.slice(2, -2)) };
313
+ return { kind: '//', value: codePointListToString(codePoints.slice(2)) };
314
+ default:
315
+ return { kind: tag };
316
+ }
317
+ };
318
+ const toJsTokens = tk => {
319
+ const token = toJsToken(tk);
320
+ if (token.kind === '/*') {
321
+ const hasNl = token.value.includes('\n') || token.value.includes('\r');
322
+ if (hasNl)
323
+ return [token, { kind: 'nl' }];
324
+ }
325
+ return [token];
326
+ };
327
+ // Same as toJsTokens, but pairs each emitted token with tk's start metadata instead of
328
+ // discarding it — used by tokenize (the metadata-aware entry point), not tokenizeString.
329
+ const toJsTokenWithMetadata = tk => {
330
+ const [, metadata] = tk;
331
+ const token = toJsToken(tk);
332
+ if (token.kind === '/*') {
333
+ const hasNl = token.value.includes('\n') || token.value.includes('\r');
334
+ if (hasNl)
335
+ return [{ token, metadata }, { token: { kind: 'nl' }, metadata }];
336
+ }
337
+ return [{ token, metadata }];
338
+ };
339
+ const getTokensFromAstRuleOrCodePoint = value => {
340
+ if (value instanceof Array)
341
+ return [value];
342
+ return getTokensFromAstRule(value);
343
+ };
344
+ const getTokensFromAstSequence = seq => {
345
+ return flatMap(getTokensFromAstRuleOrCodePoint)(seq);
346
+ };
347
+ const tagToToken = tag => {
348
+ switch (typeof tag) {
349
+ case 'string': return tag;
350
+ case 'undefined': return 'undefined';
351
+ default: return 'true';
352
+ }
353
+ };
354
+ const getTokensFromAstRule = ast => {
355
+ const token = tagToToken(ast.tag);
356
+ if (ast.sequence.length === 0)
357
+ return [token];
358
+ return { first: token, tail: getTokensFromAstSequence(ast.sequence) };
359
+ };
360
+ export const tokenizeString = s => {
361
+ const cp = toArray(stringToCodePointList(s));
362
+ if (cp.length === 0) {
363
+ return stringify([{ kind: 'eof' }]);
364
+ }
365
+ const m = descentParser(jsGrammar());
366
+ const cpm = codePointsWithMetadata('')(cp);
367
+ const [ast, ok, len] = m('', cpm);
368
+ if (!ok || len !== cp.length)
369
+ return 'error';
370
+ const flatTokens = toArray(getTokensFromAstRule(ast));
371
+ // multilineContent tags an unterminated block comment as 'unterminated', and number
372
+ // tags a malformed fraction/exponent or a disallowed trailing char as 'numError',
373
+ // rather than failing outright — detect them here instead.
374
+ if (flatTokens.includes('unterminated') || flatTokens.includes('numError'))
375
+ return 'error';
376
+ const filterTokens = concat(filter(filterFunc)(flatTokens))(['']);
377
+ const tokens = flat(stateScan(scanFunc)(['', null, []])(filterTokens));
378
+ const jsTokens = concat(flatMap(toJsTokens)(tokens))([{ kind: 'eof' }]);
379
+ const result = toArray(jsTokens);
380
+ return stringify(result);
381
+ };
382
+ // Finds `tag` in flatTokens and returns the metadata of the next code point after it.
383
+ // numError/unterminated tags are followed by the poisoning char / EOF-hitting position
384
+ // in the flattened AST walk order, so this pinpoints roughly where tokenization failed.
385
+ const metadataAfterTag = (tag, flatTokens, fallback) => {
386
+ const idx = flatTokens.indexOf(tag);
387
+ const found = idx < 0 ? undefined : flatTokens.slice(idx + 1).find((t) => t instanceof Array);
388
+ return found === undefined ? fallback : found[1];
389
+ };
390
+ export const tokenizeJs = input => path => {
391
+ const cp = toArray(input);
392
+ const initial = { path, line: 1, column: 1 };
393
+ if (cp.length === 0)
394
+ return [{ token: { kind: 'eof' }, metadata: initial }];
395
+ const m = descentParser(jsGrammar());
396
+ const cpm = codePointsWithMetadata(path)(cp);
397
+ const [ast, ok, len] = m('', cpm);
398
+ const finalMetadata = fold(advanceMetadata)(initial)(cp);
399
+ if (!ok || len !== cp.length) {
400
+ const errorMetadata = len < cpm.length ? cpm[len][1] : finalMetadata;
401
+ return [{ token: { kind: 'error', message: 'invalid token' }, metadata: errorMetadata }];
402
+ }
403
+ const flatTokens = toArray(getTokensFromAstRule(ast));
404
+ const structuralError = flatTokens.includes('unterminated') ? 'unterminated'
405
+ : flatTokens.includes('numError') ? 'numError'
406
+ : null;
407
+ if (structuralError !== null) {
408
+ const errorMetadata = metadataAfterTag(structuralError, flatTokens, finalMetadata);
409
+ return [{ token: { kind: 'error', message: 'invalid token' }, metadata: errorMetadata }];
410
+ }
411
+ const filterTokens = concat(filter(filterFunc)(flatTokens))(['']);
412
+ const tokens = flat(stateScan(scanFunc)(['', null, []])(filterTokens));
413
+ const withMetadata = concat(flatMap(toJsTokenWithMetadata)(tokens));
414
+ return withMetadata([{ token: { kind: 'eof' }, metadata: finalMetadata }]);
415
+ };
416
+ const mapDjsToken = input => {
417
+ switch (input.kind) {
418
+ case 'id':
419
+ case 'bigint':
420
+ case '{':
421
+ case '}':
422
+ case ':':
423
+ case ',':
424
+ case '[':
425
+ case ']':
426
+ case '.':
427
+ case '=':
428
+ case 'true':
429
+ case 'false':
430
+ case 'null':
431
+ case 'string':
432
+ case 'number':
433
+ case 'ws':
434
+ case 'nl':
435
+ case 'undefined':
436
+ case '//':
437
+ case '/*':
438
+ case 'eof':
439
+ case 'error': return [input];
440
+ default: return isKeywordToken(input) ? [{ kind: 'id', value: input.kind }] : [{ kind: 'error', message: 'invalid token' }];
441
+ }
442
+ };
443
+ const parseDjsDefaultState = input => {
444
+ switch (input.kind) {
445
+ case 'eof': return [[{ kind: 'eof' }], { kind: 'def' }];
446
+ case '-': return [empty, { kind: '-' }];
447
+ default: return [mapDjsToken(input), { kind: 'def' }];
448
+ }
449
+ };
450
+ // Folds a leading '-' into the following number/bigint token, mirroring the old
451
+ // fjs/djs/tokenizer's minus-state exactly.
452
+ const parseDjsMinusState = input => {
453
+ switch (input.kind) {
454
+ case 'eof': return [[{ kind: 'error', message: 'invalid token' }, { kind: 'eof' }], { kind: 'def' }];
455
+ case '-': return [[{ kind: 'error', message: 'invalid token' }], { kind: '-' }];
456
+ case 'bigint': return [[{ kind: 'bigint', value: -1n * input.value }], { kind: 'def' }];
457
+ case 'number': return [[{ kind: 'number', bf: multiply(input.bf)(-1n), value: `-${input.value}` }], { kind: 'def' }];
458
+ default: return [{ first: { kind: 'error', message: 'invalid token' }, tail: mapDjsToken(input) }, { kind: 'def' }];
459
+ }
460
+ };
461
+ const scanDjsToken = (input, state) => {
462
+ switch (state.kind) {
463
+ case '-': return parseDjsMinusState(input);
464
+ default: return parseDjsDefaultState(input);
465
+ }
466
+ };
467
+ const mapDjsTokenWithMetadata = metadata => token => ({ token, metadata });
468
+ const scanDjsTokenWithMetadata = (input, state) => {
469
+ const [djsTokens, newState] = scanDjsToken(input.token, state);
470
+ return [map(mapDjsTokenWithMetadata(input.metadata))(djsTokens), newState];
471
+ };
472
+ export const tokenize = input => path => flat(stateScan(scanDjsTokenWithMetadata)({ kind: 'def' })(tokenizeJs(input)(path)));
@@ -6,7 +6,8 @@ export declare const proof: {
6
6
  ws: (() => void)[];
7
7
  id: (() => void)[];
8
8
  keywords: (() => void)[];
9
- throw: {
10
- parse: () => void;
11
- };
9
+ comments: (() => void)[];
10
+ metadata: (() => void)[];
11
+ djsTokenize: (() => void)[];
12
+ largeInputs: (() => void)[];
12
13
  };