functionalscript 0.2.5 → 0.3.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 (433) hide show
  1. package/.github/workflows/ci.yml +19 -4
  2. package/CHANGELOG.md +9 -0
  3. package/com/cpp/{module.f.mjs → module.f.ts} +65 -44
  4. package/com/cpp/{test.f.mjs → test.f.ts} +1 -1
  5. package/com/cpp/testlib.f.ts +8 -0
  6. package/com/cs/{module.f.mjs → module.f.ts} +47 -38
  7. package/com/cs/{test.f.mjs → test.f.ts} +2 -2
  8. package/com/cs/testlib.f.ts +8 -0
  9. package/com/rust/module.f.ts +287 -0
  10. package/com/rust/{test.f.mjs → test.f.ts} +1 -1
  11. package/com/rust/testlib.f.ts +8 -0
  12. package/com/test/{build.f.mjs → build.f.ts} +47 -45
  13. package/com/test/{build.mjs → build.ts} +7 -6
  14. package/com/types/module.f.ts +62 -0
  15. package/com/types/{testlib.f.mjs → testlib.f.ts} +2 -3
  16. package/commonjs/build/module.f.ts +100 -0
  17. package/commonjs/build/{test.f.mjs → test.f.ts} +21 -17
  18. package/commonjs/module/function/module.f.ts +13 -0
  19. package/commonjs/module/module.f.ts +41 -0
  20. package/commonjs/module.f.ts +7 -0
  21. package/commonjs/{module.mjs → module.ts} +12 -9
  22. package/commonjs/package/dependencies/module.f.ts +22 -0
  23. package/commonjs/package/dependencies/{test.f.mjs → test.f.ts} +1 -1
  24. package/commonjs/package/module.f.ts +31 -0
  25. package/commonjs/package/{test.f.mjs → test.f.ts} +1 -1
  26. package/commonjs/path/{module.f.mjs → module.f.ts} +72 -67
  27. package/commonjs/path/{test.f.mjs → test.f.ts} +25 -19
  28. package/commonjs/{test.mjs → test.ts} +5 -4
  29. package/crypto/prime_field/{module.f.mjs → module.f.ts} +40 -37
  30. package/crypto/prime_field/{test.f.mjs → test.f.ts} +7 -5
  31. package/crypto/secp/{module.f.mjs → module.f.ts} +44 -44
  32. package/crypto/secp/{test.f.mjs → test.f.ts} +16 -11
  33. package/crypto/sha2/{module.f.mjs → module.f.ts} +61 -46
  34. package/crypto/sha2/{test.f.mjs → test.f.ts} +12 -9
  35. package/deno.json +71 -0
  36. package/dev/README.md +8 -0
  37. package/dev/index.ts +3 -0
  38. package/dev/{module.f.mjs → module.f.ts} +0 -2
  39. package/dev/{module.mjs → module.ts} +65 -60
  40. package/dev/test/{module.f.mjs → module.f.ts} +57 -70
  41. package/dev/{test.f.mjs → test.f.ts} +7 -5
  42. package/dev/test.ts +53 -0
  43. package/djs/{module.f.mjs → module.f.ts} +31 -31
  44. package/djs/parser/{module.f.mjs → module.f.ts} +190 -182
  45. package/djs/parser/{test.f.mjs → test.f.ts} +173 -150
  46. package/djs/serializer/module.f.ts +90 -0
  47. package/djs/{test.f.mjs → test.f.ts} +4 -4
  48. package/djs/tokenizer/{module.f.mjs → module.f.ts} +35 -42
  49. package/djs/tokenizer/{test.f.mjs → test.f.ts} +9 -8
  50. package/fsc/{module.f.mjs → module.f.ts} +41 -44
  51. package/fsc/{test.f.mjs → test.f.ts} +8 -6
  52. package/fsm/module.f.ts +107 -0
  53. package/fsm/{test.f.mjs → test.f.ts} +10 -9
  54. package/html/README.md +10 -9
  55. package/html/module.f.ts +108 -0
  56. package/html/{test.f.mjs → test.f.ts} +10 -7
  57. package/issues/README.md +3 -0
  58. package/issues/lang/3110-function.md +25 -1
  59. package/issues/{test.f.mjs → test.f.ts} +3 -2
  60. package/js/tokenizer/module.f.ts +882 -0
  61. package/js/tokenizer/{test.f.mjs → test.f.ts} +11 -10
  62. package/json/module.f.ts +94 -0
  63. package/json/parser/{module.f.mjs → module.f.ts} +113 -109
  64. package/json/parser/{test.f.mjs → test.f.ts} +10 -9
  65. package/json/serializer/module.f.ts +70 -0
  66. package/json/serializer/{test.f.mjs → test.f.ts} +3 -3
  67. package/json/{test.f.mjs → test.f.ts} +3 -3
  68. package/json/tokenizer/{module.f.mjs → module.f.ts} +29 -36
  69. package/json/tokenizer/{test.f.mjs → test.f.ts} +9 -8
  70. package/nanvm-lib/src/extension.rs +15 -4
  71. package/nanvm-lib/src/interface.rs +7 -10
  72. package/nanvm-lib/src/lib.rs +3 -3
  73. package/nanvm-lib/src/naive.rs +10 -3
  74. package/nanvm-lib/src/nanenum.rs +5 -1
  75. package/nanvm-lib/tests/{test.f.mjs → test.f.ts} +7 -6
  76. package/nodejs/version/{main.mjs → main.ts} +1 -1
  77. package/nodejs/version/module.f.ts +42 -0
  78. package/nodejs/version/{test.f.mjs → test.f.ts} +11 -12
  79. package/package.json +9 -9
  80. package/text/ascii/{module.f.mjs → module.f.ts} +10 -8
  81. package/text/ascii/{test.f.mjs → test.f.ts} +4 -4
  82. package/text/module.f.ts +30 -0
  83. package/text/sgr/{module.f.mjs → module.f.ts} +3 -5
  84. package/text/{test.f.mjs → test.f.ts} +5 -4
  85. package/text/utf16/module.f.ts +108 -0
  86. package/text/utf16/{test.f.mjs → test.f.ts} +7 -6
  87. package/text/utf8/{module.f.mjs → module.f.ts} +29 -23
  88. package/text/utf8/{test.f.mjs → test.f.ts} +4 -4
  89. package/tsconfig.json +4 -1
  90. package/types/array/module.f.ts +89 -0
  91. package/types/array/{test.f.mjs → test.f.ts} +3 -3
  92. package/types/bigfloat/{module.f.mjs → module.f.ts} +25 -20
  93. package/types/bigfloat/{test.f.mjs → test.f.ts} +1 -1
  94. package/types/bigint/{module.f.mjs → module.f.ts} +29 -28
  95. package/types/bigint/{test.f.mjs → test.f.ts} +2 -2
  96. package/types/bit_vec/README.md +18 -0
  97. package/types/bit_vec/module.f.ts +185 -0
  98. package/types/bit_vec/test.f.ts +129 -0
  99. package/types/btree/find/module.f.ts +92 -0
  100. package/types/btree/find/{test.f.mjs → test.f.ts} +20 -16
  101. package/types/btree/{module.f.mjs → module.f.ts} +9 -9
  102. package/types/btree/remove/{module.f.mjs → module.f.ts} +43 -53
  103. package/types/btree/remove/{test.f.mjs → test.f.ts} +19 -15
  104. package/types/btree/set/{module.f.mjs → module.f.ts} +17 -20
  105. package/types/btree/set/{test.f.mjs → test.f.ts} +96 -66
  106. package/types/btree/{test.f.mjs → test.f.ts} +34 -26
  107. package/types/btree/types/module.f.ts +27 -0
  108. package/types/byte_set/module.f.ts +70 -0
  109. package/types/byte_set/{test.f.mjs → test.f.ts} +8 -7
  110. package/types/function/compare/module.f.ts +26 -0
  111. package/types/function/compare/{test.f.mjs → test.f.ts} +1 -1
  112. package/types/function/module.f.ts +43 -0
  113. package/types/function/operator/module.f.ts +63 -0
  114. package/types/function/test.f.ts +20 -0
  115. package/types/list/module.f.ts +345 -0
  116. package/types/list/{test.f.mjs → test.f.ts} +30 -24
  117. package/types/map/module.f.ts +65 -0
  118. package/types/map/{test.f.mjs → test.f.ts} +6 -5
  119. package/types/nibble_set/module.f.ts +34 -0
  120. package/types/nibble_set/{test.f.mjs → test.f.ts} +3 -3
  121. package/types/nullable/module.f.ts +9 -0
  122. package/types/nullable/{test.f.mjs → test.f.ts} +2 -2
  123. package/types/number/module.f.ts +16 -0
  124. package/types/number/{test.f.mjs → test.f.ts} +7 -5
  125. package/types/object/module.f.ts +30 -0
  126. package/types/object/{test.f.mjs → test.f.ts} +2 -2
  127. package/types/range/module.f.ts +10 -0
  128. package/types/range/{test.f.mjs → test.f.ts} +1 -1
  129. package/types/range_map/module.f.ts +70 -0
  130. package/types/range_map/{test.f.mjs → test.f.ts} +82 -57
  131. package/types/result/module.f.ts +20 -0
  132. package/types/result/{module.mjs → module.ts} +4 -3
  133. package/types/sorted_list/module.f.ts +83 -0
  134. package/types/sorted_list/{test.f.mjs → test.f.ts} +14 -12
  135. package/types/sorted_set/module.f.ts +36 -0
  136. package/types/sorted_set/{test.f.mjs → test.f.ts} +14 -12
  137. package/types/string/module.f.ts +24 -0
  138. package/types/string/{test.f.mjs → test.f.ts} +2 -2
  139. package/types/string_set/module.f.ts +37 -0
  140. package/types/string_set/{test.f.mjs → test.f.ts} +2 -2
  141. package/com/cpp/testlib.f.mjs +0 -8
  142. package/com/cs/testlib.f.mjs +0 -8
  143. package/com/rust/module.f.mjs +0 -272
  144. package/com/rust/testlib.f.mjs +0 -8
  145. package/com/types/module.f.mjs +0 -67
  146. package/commonjs/build/module.f.mjs +0 -100
  147. package/commonjs/module/function/module.f.mjs +0 -21
  148. package/commonjs/module/module.f.mjs +0 -53
  149. package/commonjs/module.f.mjs +0 -11
  150. package/commonjs/package/dependencies/module.f.mjs +0 -22
  151. package/commonjs/package/module.f.mjs +0 -36
  152. package/dev/index.mjs +0 -3
  153. package/dev/test.mjs +0 -60
  154. package/fsm/module.f.mjs +0 -99
  155. package/html/module.f.mjs +0 -102
  156. package/js/tokenizer/module.f.mjs +0 -872
  157. package/json/module.f.mjs +0 -89
  158. package/json/serializer/module.f.mjs +0 -87
  159. package/jsr.json +0 -66
  160. package/nodejs/version/module.f.mjs +0 -47
  161. package/out/com/cpp/module.f.d.mts +0 -7
  162. package/out/com/cpp/module.f.mjs +0 -130
  163. package/out/com/cpp/test.f.d.mts +0 -2
  164. package/out/com/cpp/test.f.mjs +0 -40
  165. package/out/com/cpp/testlib.f.d.mts +0 -2
  166. package/out/com/cpp/testlib.f.mjs +0 -7
  167. package/out/com/cs/module.f.d.mts +0 -7
  168. package/out/com/cs/module.f.mjs +0 -104
  169. package/out/com/cs/test.f.d.mts +0 -2
  170. package/out/com/cs/test.f.mjs +0 -43
  171. package/out/com/cs/testlib.f.d.mts +0 -2
  172. package/out/com/cs/testlib.f.mjs +0 -7
  173. package/out/com/rust/module.f.d.mts +0 -23
  174. package/out/com/rust/module.f.mjs +0 -224
  175. package/out/com/rust/test.f.d.mts +0 -2
  176. package/out/com/rust/test.f.mjs +0 -123
  177. package/out/com/rust/testlib.f.d.mts +0 -2
  178. package/out/com/rust/testlib.f.mjs +0 -7
  179. package/out/com/test/build.d.mts +0 -1
  180. package/out/com/test/build.f.d.mts +0 -26
  181. package/out/com/test/build.f.mjs +0 -98
  182. package/out/com/test/build.mjs +0 -40
  183. package/out/com/types/module.f.d.mts +0 -23
  184. package/out/com/types/module.f.mjs +0 -51
  185. package/out/com/types/testlib.f.d.mts +0 -44
  186. package/out/com/types/testlib.f.mjs +0 -30
  187. package/out/commonjs/build/module.f.d.mts +0 -20
  188. package/out/commonjs/build/module.f.mjs +0 -107
  189. package/out/commonjs/build/test.f.d.mts +0 -3
  190. package/out/commonjs/build/test.f.mjs +0 -102
  191. package/out/commonjs/module/function/module.f.d.mts +0 -5
  192. package/out/commonjs/module/function/module.f.mjs +0 -15
  193. package/out/commonjs/module/module.f.d.mts +0 -52
  194. package/out/commonjs/module/module.f.mjs +0 -48
  195. package/out/commonjs/module.d.mts +0 -3
  196. package/out/commonjs/module.f.d.mts +0 -2
  197. package/out/commonjs/module.f.mjs +0 -10
  198. package/out/commonjs/module.mjs +0 -26
  199. package/out/commonjs/package/dependencies/module.f.d.mts +0 -6
  200. package/out/commonjs/package/dependencies/module.f.mjs +0 -21
  201. package/out/commonjs/package/dependencies/test.f.d.mts +0 -2
  202. package/out/commonjs/package/dependencies/test.f.mjs +0 -15
  203. package/out/commonjs/package/module.f.d.mts +0 -21
  204. package/out/commonjs/package/module.f.mjs +0 -40
  205. package/out/commonjs/package/test.f.d.mts +0 -2
  206. package/out/commonjs/package/test.f.mjs +0 -27
  207. package/out/commonjs/path/module.f.d.mts +0 -60
  208. package/out/commonjs/path/module.f.mjs +0 -171
  209. package/out/commonjs/path/test.f.d.mts +0 -25
  210. package/out/commonjs/path/test.f.mjs +0 -231
  211. package/out/commonjs/test.d.mts +0 -8
  212. package/out/commonjs/test.mjs +0 -87
  213. package/out/crypto/prime_field/module.f.d.mts +0 -67
  214. package/out/crypto/prime_field/module.f.mjs +0 -110
  215. package/out/crypto/prime_field/test.f.d.mts +0 -13
  216. package/out/crypto/prime_field/test.f.mjs +0 -152
  217. package/out/crypto/secp/module.f.d.mts +0 -110
  218. package/out/crypto/secp/module.f.mjs +0 -173
  219. package/out/crypto/secp/test.f.d.mts +0 -5
  220. package/out/crypto/secp/test.f.mjs +0 -78
  221. package/out/crypto/sha2/module.f.d.mts +0 -15
  222. package/out/crypto/sha2/module.f.mjs +0 -172
  223. package/out/crypto/sha2/test.f.d.mts +0 -10
  224. package/out/crypto/sha2/test.f.mjs +0 -86
  225. package/out/dev/index.d.mts +0 -1
  226. package/out/dev/index.mjs +0 -2
  227. package/out/dev/module.d.mts +0 -26
  228. package/out/dev/module.f.d.mts +0 -1
  229. package/out/dev/module.f.mjs +0 -2
  230. package/out/dev/module.mjs +0 -167
  231. package/out/dev/test/module.f.d.mts +0 -25
  232. package/out/dev/test/module.f.mjs +0 -134
  233. package/out/dev/test.d.mts +0 -3
  234. package/out/dev/test.f.d.mts +0 -9
  235. package/out/dev/test.f.mjs +0 -58
  236. package/out/dev/test.mjs +0 -52
  237. package/out/djs/module.f.d.mts +0 -20
  238. package/out/djs/module.f.mjs +0 -79
  239. package/out/djs/parser/module.f.d.mts +0 -56
  240. package/out/djs/parser/module.f.mjs +0 -448
  241. package/out/djs/parser/test.f.d.mts +0 -13
  242. package/out/djs/parser/test.f.mjs +0 -569
  243. package/out/djs/test.f.d.mts +0 -12
  244. package/out/djs/test.f.mjs +0 -84
  245. package/out/djs/tokenizer/module.f.d.mts +0 -13
  246. package/out/djs/tokenizer/module.f.mjs +0 -91
  247. package/out/djs/tokenizer/test.f.d.mts +0 -7
  248. package/out/djs/tokenizer/test.f.mjs +0 -530
  249. package/out/fsc/module.f.d.mts +0 -7
  250. package/out/fsc/module.f.mjs +0 -105
  251. package/out/fsc/test.f.d.mts +0 -4
  252. package/out/fsc/test.f.mjs +0 -19
  253. package/out/fsm/module.f.d.mts +0 -14
  254. package/out/fsm/module.f.mjs +0 -80
  255. package/out/fsm/test.f.d.mts +0 -5
  256. package/out/fsm/test.f.mjs +0 -138
  257. package/out/html/module.f.d.mts +0 -17
  258. package/out/html/module.f.mjs +0 -80
  259. package/out/html/test.f.d.mts +0 -10
  260. package/out/html/test.f.mjs +0 -45
  261. package/out/issues/test.f.d.mts +0 -16
  262. package/out/issues/test.f.mjs +0 -66
  263. package/out/js/tokenizer/module.f.d.mts +0 -163
  264. package/out/js/tokenizer/module.f.mjs +0 -729
  265. package/out/js/tokenizer/test.f.d.mts +0 -9
  266. package/out/js/tokenizer/test.f.mjs +0 -906
  267. package/out/json/module.f.d.mts +0 -33
  268. package/out/json/module.f.mjs +0 -89
  269. package/out/json/parser/module.f.d.mts +0 -32
  270. package/out/json/parser/module.f.mjs +0 -224
  271. package/out/json/parser/test.f.d.mts +0 -5
  272. package/out/json/parser/test.f.mjs +0 -329
  273. package/out/json/serializer/module.f.d.mts +0 -36
  274. package/out/json/serializer/module.f.mjs +0 -67
  275. package/out/json/serializer/test.f.d.mts +0 -8
  276. package/out/json/serializer/test.f.mjs +0 -87
  277. package/out/json/test.f.d.mts +0 -8
  278. package/out/json/test.f.mjs +0 -61
  279. package/out/json/tokenizer/module.f.d.mts +0 -13
  280. package/out/json/tokenizer/module.f.mjs +0 -78
  281. package/out/json/tokenizer/test.f.d.mts +0 -6
  282. package/out/json/tokenizer/test.f.mjs +0 -420
  283. package/out/nanvm-lib/tests/test.f.d.mts +0 -36
  284. package/out/nanvm-lib/tests/test.f.mjs +0 -87
  285. package/out/nodejs/version/main.d.mts +0 -1
  286. package/out/nodejs/version/main.mjs +0 -3
  287. package/out/nodejs/version/module.f.d.mts +0 -12
  288. package/out/nodejs/version/module.f.mjs +0 -34
  289. package/out/nodejs/version/test.f.d.mts +0 -2
  290. package/out/nodejs/version/test.f.mjs +0 -97
  291. package/out/text/ascii/module.f.d.mts +0 -70
  292. package/out/text/ascii/module.f.mjs +0 -154
  293. package/out/text/ascii/test.f.d.mts +0 -4
  294. package/out/text/ascii/test.f.mjs +0 -14
  295. package/out/text/module.f.d.mts +0 -13
  296. package/out/text/module.f.mjs +0 -19
  297. package/out/text/sgr/module.f.d.mts +0 -12
  298. package/out/text/sgr/module.f.mjs +0 -17
  299. package/out/text/test.f.d.mts +0 -2
  300. package/out/text/test.f.mjs +0 -19
  301. package/out/text/utf16/module.f.d.mts +0 -12
  302. package/out/text/utf16/module.f.mjs +0 -86
  303. package/out/text/utf16/test.f.d.mts +0 -6
  304. package/out/text/utf16/test.f.mjs +0 -145
  305. package/out/text/utf8/module.f.d.mts +0 -10
  306. package/out/text/utf8/module.f.mjs +0 -126
  307. package/out/text/utf8/test.f.d.mts +0 -6
  308. package/out/text/utf8/test.f.mjs +0 -175
  309. package/out/types/array/module.f.d.mts +0 -31
  310. package/out/types/array/module.f.mjs +0 -95
  311. package/out/types/array/test.f.d.mts +0 -10
  312. package/out/types/array/test.f.mjs +0 -116
  313. package/out/types/bigfloat/module.f.d.mts +0 -6
  314. package/out/types/bigfloat/module.f.mjs +0 -77
  315. package/out/types/bigfloat/test.f.d.mts +0 -6
  316. package/out/types/bigfloat/test.f.mjs +0 -349
  317. package/out/types/bigint/module.f.d.mts +0 -29
  318. package/out/types/bigint/module.f.mjs +0 -114
  319. package/out/types/bigint/test.f.d.mts +0 -16
  320. package/out/types/bigint/test.f.mjs +0 -199
  321. package/out/types/bit_vec/module.f.d.mts +0 -72
  322. package/out/types/bit_vec/module.f.mjs +0 -83
  323. package/out/types/bit_vec/test.f.d.mts +0 -9
  324. package/out/types/bit_vec/test.f.mjs +0 -60
  325. package/out/types/btree/find/module.f.d.mts +0 -36
  326. package/out/types/btree/find/module.f.mjs +0 -137
  327. package/out/types/btree/find/test.f.d.mts +0 -2
  328. package/out/types/btree/find/test.f.mjs +0 -156
  329. package/out/types/btree/module.f.d.mts +0 -5
  330. package/out/types/btree/module.f.mjs +0 -34
  331. package/out/types/btree/remove/module.f.d.mts +0 -14
  332. package/out/types/btree/remove/module.f.mjs +0 -209
  333. package/out/types/btree/remove/test.f.d.mts +0 -7
  334. package/out/types/btree/remove/test.f.mjs +0 -638
  335. package/out/types/btree/set/module.f.d.mts +0 -5
  336. package/out/types/btree/set/module.f.mjs +0 -114
  337. package/out/types/btree/set/test.f.d.mts +0 -2
  338. package/out/types/btree/set/test.f.mjs +0 -390
  339. package/out/types/btree/test.f.d.mts +0 -13
  340. package/out/types/btree/test.f.mjs +0 -83
  341. package/out/types/btree/types/module.f.d.mts +0 -14
  342. package/out/types/btree/types/module.f.mjs +0 -50
  343. package/out/types/byte_set/module.f.d.mts +0 -25
  344. package/out/types/byte_set/module.f.mjs +0 -42
  345. package/out/types/byte_set/test.f.d.mts +0 -13
  346. package/out/types/byte_set/test.f.mjs +0 -123
  347. package/out/types/function/compare/module.f.d.mts +0 -23
  348. package/out/types/function/compare/module.f.mjs +0 -22
  349. package/out/types/function/compare/test.f.d.mts +0 -2
  350. package/out/types/function/compare/test.f.mjs +0 -8
  351. package/out/types/function/module.f.d.mts +0 -51
  352. package/out/types/function/module.f.mjs +0 -44
  353. package/out/types/function/operator/module.f.d.mts +0 -60
  354. package/out/types/function/operator/module.f.mjs +0 -60
  355. package/out/types/function/test.f.d.mts +0 -2
  356. package/out/types/function/test.f.mjs +0 -15
  357. package/out/types/list/module.f.d.mts +0 -82
  358. package/out/types/list/module.f.mjs +0 -269
  359. package/out/types/list/test.f.d.mts +0 -38
  360. package/out/types/list/test.f.mjs +0 -401
  361. package/out/types/map/module.f.d.mts +0 -21
  362. package/out/types/map/module.f.mjs +0 -54
  363. package/out/types/map/test.f.d.mts +0 -5
  364. package/out/types/map/test.f.mjs +0 -115
  365. package/out/types/nibble_set/module.f.d.mts +0 -16
  366. package/out/types/nibble_set/module.f.mjs +0 -19
  367. package/out/types/nibble_set/test.f.d.mts +0 -13
  368. package/out/types/nibble_set/test.f.mjs +0 -90
  369. package/out/types/nullable/module.f.d.mts +0 -9
  370. package/out/types/nullable/module.f.mjs +0 -9
  371. package/out/types/nullable/test.f.d.mts +0 -2
  372. package/out/types/nullable/test.f.mjs +0 -12
  373. package/out/types/number/module.f.d.mts +0 -7
  374. package/out/types/number/module.f.mjs +0 -12
  375. package/out/types/number/test.f.d.mts +0 -11
  376. package/out/types/number/test.f.mjs +0 -126
  377. package/out/types/object/module.f.d.mts +0 -22
  378. package/out/types/object/module.f.mjs +0 -27
  379. package/out/types/object/test.f.d.mts +0 -5
  380. package/out/types/object/test.f.mjs +0 -17
  381. package/out/types/range/module.f.d.mts +0 -6
  382. package/out/types/range/module.f.mjs +0 -6
  383. package/out/types/range/test.f.d.mts +0 -2
  384. package/out/types/range/test.f.mjs +0 -18
  385. package/out/types/range_map/module.f.d.mts +0 -19
  386. package/out/types/range_map/module.f.mjs +0 -84
  387. package/out/types/range_map/test.f.d.mts +0 -6
  388. package/out/types/range_map/test.f.mjs +0 -201
  389. package/out/types/result/module.d.mts +0 -7
  390. package/out/types/result/module.f.d.mts +0 -22
  391. package/out/types/result/module.f.mjs +0 -25
  392. package/out/types/result/module.mjs +0 -16
  393. package/out/types/sorted_list/module.f.d.mts +0 -53
  394. package/out/types/sorted_list/module.f.mjs +0 -102
  395. package/out/types/sorted_list/test.f.d.mts +0 -5
  396. package/out/types/sorted_list/test.f.mjs +0 -66
  397. package/out/types/sorted_set/module.f.d.mts +0 -19
  398. package/out/types/sorted_set/module.f.mjs +0 -29
  399. package/out/types/sorted_set/test.f.d.mts +0 -6
  400. package/out/types/sorted_set/test.f.mjs +0 -80
  401. package/out/types/string/module.f.d.mts +0 -9
  402. package/out/types/string/module.f.mjs +0 -17
  403. package/out/types/string/test.f.d.mts +0 -15
  404. package/out/types/string/test.f.mjs +0 -58
  405. package/out/types/string_set/module.f.d.mts +0 -13
  406. package/out/types/string_set/module.f.mjs +0 -29
  407. package/out/types/string_set/test.f.d.mts +0 -5
  408. package/out/types/string_set/test.f.mjs +0 -65
  409. package/text/module.f.mjs +0 -27
  410. package/text/utf16/module.f.mjs +0 -96
  411. package/types/array/module.f.mjs +0 -119
  412. package/types/bit_vec/module.f.mjs +0 -90
  413. package/types/bit_vec/test.f.mjs +0 -41
  414. package/types/btree/find/module.f.mjs +0 -125
  415. package/types/btree/types/module.f.mjs +0 -64
  416. package/types/byte_set/module.f.mjs +0 -61
  417. package/types/function/compare/module.f.mjs +0 -29
  418. package/types/function/module.f.mjs +0 -50
  419. package/types/function/operator/module.f.mjs +0 -78
  420. package/types/function/test.f.mjs +0 -17
  421. package/types/list/module.f.mjs +0 -320
  422. package/types/map/module.f.mjs +0 -67
  423. package/types/nibble_set/module.f.mjs +0 -28
  424. package/types/nullable/module.f.mjs +0 -11
  425. package/types/number/module.f.mjs +0 -16
  426. package/types/object/module.f.mjs +0 -33
  427. package/types/range/module.f.mjs +0 -8
  428. package/types/range_map/module.f.mjs +0 -84
  429. package/types/result/module.f.mjs +0 -28
  430. package/types/sorted_list/module.f.mjs +0 -107
  431. package/types/sorted_set/module.f.mjs +0 -38
  432. package/types/string/module.f.mjs +0 -22
  433. package/types/string_set/module.f.mjs +0 -36
@@ -1,872 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- import * as operator from '../../types/function/operator/module.f.mjs'
3
- import * as range_map from '../../types/range_map/module.f.mjs'
4
- const { merge, fromRange, get } = range_map
5
- import * as list from '../../types/list/module.f.mjs'
6
- import * as map from '../../types/map/module.f.mjs'
7
- const { at } = map
8
- import * as _range from '../../types/range/module.f.mjs'
9
- const { one } = _range
10
- const { empty, stateScan, flat, toArray, reduce: listReduce, scan } = list
11
- import * as bigfloatT from '../../types/bigfloat/module.f.mjs'
12
- const { fromCharCode } = String
13
- import * as ascii from '../../text/ascii/module.f.mjs'
14
- const { range } = ascii
15
- const {
16
- //
17
- backspace,
18
- ht,
19
- lf,
20
- ff,
21
- cr,
22
- //
23
- exclamationMark,
24
- percentSign,
25
- ampersand,
26
- asterisk,
27
- lessThanSign,
28
- equalsSign,
29
- greaterThanSign,
30
- questionMark,
31
- circumflexAccent,
32
- verticalLine,
33
- tilde,
34
- //
35
- space,
36
- quotationMark,
37
- leftParenthesis,
38
- rightParenthesis,
39
- plusSign,
40
- comma,
41
- hyphenMinus,
42
- fullStop,
43
- solidus,
44
- //
45
- digitRange,
46
- digit0,
47
- colon,
48
- //
49
- latinCapitalLetterRange,
50
- latinCapitalLetterA,
51
- latinCapitalLetterE,
52
- //
53
- leftSquareBracket,
54
- reverseSolidus,
55
- rightSquareBracket,
56
- lowLine,
57
- //
58
- latinSmallLetterRange,
59
- latinSmallLetterA,
60
- latinSmallLetterB,
61
- latinSmallLetterE,
62
- latinSmallLetterF,
63
- latinSmallLetterN,
64
- latinSmallLetterR,
65
- latinSmallLetterT,
66
- latinSmallLetterU,
67
- //
68
- leftCurlyBracket,
69
- rightCurlyBracket,
70
- dollarSign
71
- } = ascii.ascii
72
-
73
- /**
74
- * @typedef {{
75
- * readonly kind: 'string'
76
- * readonly value: string
77
- * }} StringToken
78
- * */
79
-
80
- /**
81
- * @typedef {{
82
- * readonly kind: 'number'
83
- * readonly value: string
84
- * readonly bf: bigfloatT.BigFloat
85
- * }} NumberToken
86
- * */
87
-
88
- /**
89
- * @typedef {{
90
- * readonly kind: 'bigint'
91
- * readonly value: bigint
92
- * }} BigIntToken
93
- * */
94
-
95
- /** @typedef {{readonly kind: 'error', message: ErrorMessage}} ErrorToken */
96
-
97
- /** @typedef {{readonly kind: 'ws'}} WhitespaceToken */
98
-
99
- /** @typedef {{readonly kind: 'nl'}} NewLineToken */
100
-
101
- /** @typedef {{readonly kind: 'true'}} TrueToken */
102
-
103
- /** @typedef {{readonly kind: 'false'}} FalseToken */
104
-
105
- /** @typedef {{readonly kind: 'null'}} NullToken */
106
-
107
- /** @typedef {{readonly kind: 'undefined'}} UndefinedToken */
108
-
109
- /**
110
- * @typedef {|
111
- * {readonly kind: 'arguments' | 'await' | 'break' | 'case' | 'catch' | 'class' | 'const' | 'continue' } |
112
- * {readonly kind: 'debugger' | 'default' | 'delete' | 'do' | 'else' | 'enum' | 'eval' | 'export' } |
113
- * {readonly kind: 'extends' | 'finally' | 'for' | 'function' | 'if' | 'implements' | 'import' | 'in' } |
114
- * {readonly kind: 'instanceof' | 'interface' | 'let' | 'new' | 'package' | 'private' | 'protected' | 'public' } |
115
- * {readonly kind: 'return' | 'static' | 'super' | 'switch' | 'this' | 'throw' | 'try' | 'typeof' } |
116
- * {readonly kind: 'var' | 'void' | 'while' | 'with' | 'yield' }
117
- * } KeywordToken
118
- */
119
-
120
- /**
121
- * @typedef {{
122
- * readonly kind: 'id'
123
- * readonly value: string
124
- * }} IdToken
125
- * */
126
-
127
- /**
128
- * @typedef {|
129
- * {readonly kind: '{' | '}' | ':' | ',' | '[' | ']' } |
130
- * {readonly kind: '.' | '=' } |
131
- * {readonly kind: '(' | ')' } |
132
- * {readonly kind: '==' | '!=' | '===' | '!==' | '>' | '>=' | '<' | '<=' } |
133
- * {readonly kind: '+' | '-' | '*' | '/' | '%' | '++' | '--' | '**' } |
134
- * {readonly kind: '+=' | '-=' | '*=' | '/=' | '%=' | '**='} |
135
- * {readonly kind: '&' | '|' | '^' | '~' | '<<' | '>>' | '>>>' } |
136
- * {readonly kind: '&=' | '|=' | '^=' | '<<=' | '>>=' | '>>>='} |
137
- * {readonly kind: '&&' | '||' | '!' | '??' } |
138
- * {readonly kind: '&&=' | '||=' | '??=' } |
139
- * {readonly kind: '?' | '?.' | '=>'}
140
- * } OperatorToken
141
- */
142
-
143
- /**
144
- * @typedef {{
145
- * readonly kind: '//' | '/*'
146
- * readonly value: string
147
- * }} CommentToken
148
- * */
149
-
150
- /**
151
- * @typedef {|
152
- * KeywordToken |
153
- * TrueToken |
154
- * FalseToken |
155
- * NullToken |
156
- * WhitespaceToken |
157
- * NewLineToken |
158
- * StringToken |
159
- * NumberToken |
160
- * ErrorToken |
161
- * IdToken |
162
- * BigIntToken |
163
- * UndefinedToken |
164
- * OperatorToken |
165
- * CommentToken
166
- * } JsToken
167
- */
168
-
169
- const rangeOneNine = range('19')
170
-
171
- const rangeSetNewLine = [
172
- one(lf),
173
- one(cr)
174
- ]
175
-
176
- const rangeSetWhiteSpace = [
177
- one(ht),
178
- one(space)
179
- ]
180
-
181
- const rangeSetTerminalForNumber = [
182
- ...rangeSetWhiteSpace,
183
- ...rangeSetNewLine,
184
- one(exclamationMark),
185
- one(percentSign),
186
- one(ampersand),
187
- one(leftParenthesis),
188
- one(rightParenthesis),
189
- one(asterisk),
190
- one(comma),
191
- one(solidus),
192
- one(colon),
193
- one(lessThanSign),
194
- one(equalsSign),
195
- one(greaterThanSign),
196
- one(questionMark),
197
- one(circumflexAccent),
198
- one(leftSquareBracket),
199
- one(rightSquareBracket),
200
- one(leftCurlyBracket),
201
- one(verticalLine),
202
- one(rightCurlyBracket),
203
- one(tilde),
204
- ]
205
-
206
- const rangeSmallAF = range('af')
207
- const rangeCapitalAF = range('AF')
208
-
209
- const rangeIdStart = [
210
- latinSmallLetterRange,
211
- latinCapitalLetterRange,
212
- one(lowLine),
213
- one(dollarSign)
214
- ]
215
-
216
- const rangeOpStart = [
217
- one(exclamationMark),
218
- one(percentSign),
219
- one(ampersand),
220
- one(leftParenthesis),
221
- one(rightParenthesis),
222
- one(asterisk),
223
- one(plusSign),
224
- one(comma),
225
- one(hyphenMinus),
226
- one(fullStop),
227
- one(solidus),
228
- one(colon),
229
- one(lessThanSign),
230
- one(equalsSign),
231
- one(greaterThanSign),
232
- one(questionMark),
233
- one(circumflexAccent),
234
- one(leftSquareBracket),
235
- one(rightSquareBracket),
236
- one(leftCurlyBracket),
237
- one(verticalLine),
238
- one(rightCurlyBracket),
239
- one(tilde)
240
- ]
241
-
242
- const rangeId = [digitRange, ...rangeIdStart]
243
-
244
- /**
245
- * @typedef {|
246
- * InitialState |
247
- * ParseIdState |
248
- * ParseStringState |
249
- * ParseEscapeCharState |
250
- * ParseUnicodeCharState |
251
- * ParseNumberState |
252
- * InvalidNumberState |
253
- * ParseOperatorState |
254
- * ParseWhitespaceState |
255
- * ParseNewLineState |
256
- * ParseCommentState |
257
- * EofState
258
- * } TokenizerState
259
- */
260
-
261
- /**
262
- * @typedef {|
263
- * '" are missing' |
264
- * 'unescaped character' |
265
- * 'invalid hex value' |
266
- * 'unexpected character' |
267
- * 'invalid number' |
268
- * 'invalid token' |
269
- * '*\/ expected' |
270
- * 'unterminated string literal' |
271
- * 'eof'
272
- * } ErrorMessage
273
- */
274
-
275
- /** @typedef {{ readonly kind: 'initial'}} InitialState */
276
-
277
- /** @typedef {{ readonly kind: 'id', readonly value: string}} ParseIdState */
278
-
279
- /** @typedef {{ readonly kind: 'ws'}} ParseWhitespaceState */
280
-
281
- /** @typedef {{ readonly kind: 'nl'}} ParseNewLineState */
282
-
283
- /** @typedef {{ readonly kind: 'string', readonly value: string}} ParseStringState */
284
-
285
- /** @typedef {{ readonly kind: 'escapeChar', readonly value: string}} ParseEscapeCharState */
286
-
287
- /** @typedef {{ readonly kind: 'op', readonly value: string}} ParseOperatorState */
288
-
289
- /** @typedef {{ readonly kind: '-'}} ParseMinusState */
290
-
291
- /**
292
- * @typedef {{
293
- * readonly kind: '//' | '/*' | '/**'
294
- * readonly value: string
295
- * readonly newLine: boolean
296
- * }} ParseCommentState
297
- */
298
-
299
- /**
300
- * @typedef {{
301
- * readonly kind: 'unicodeChar'
302
- * readonly value: string
303
- * readonly unicode: number
304
- * readonly hexIndex: number
305
- * }} ParseUnicodeCharState
306
- */
307
-
308
- /**
309
- * @typedef {{
310
- * readonly kind: 'number'
311
- * readonly numberKind: '0' | 'int' | '.' | 'fractional' | 'e' | 'e+' | 'e-' | 'expDigits' | 'bigint'
312
- * readonly value: string
313
- * readonly b: ParseNumberBuffer
314
- * }} ParseNumberState
315
- */
316
-
317
- /**
318
- * @typedef {{
319
- * readonly s: -1n | 1n
320
- * readonly m: bigint
321
- * readonly f: number
322
- * readonly es: -1 | 1
323
- * readonly e: number
324
- * }} ParseNumberBuffer
325
- */
326
-
327
- /** @typedef {{ readonly kind: 'invalidNumber'}} InvalidNumberState */
328
-
329
- /** @typedef {{ readonly kind: 'eof'}} EofState */
330
-
331
- /** @typedef {number|null} CharCodeOrEof */
332
-
333
- /** @typedef {(input: number) => readonly[list.List<JsToken>, TokenizerState]} ToToken */
334
-
335
- /**
336
- * @template T
337
- * @typedef {(state: T) => ToToken} CreateToToken<T>
338
- */
339
-
340
- /** @typedef {list.List<_range.Range>} RangeSet */
341
-
342
- /**
343
- * @template T
344
- * @typedef {(def: CreateToToken<T>) => (RangeMapToToken<T>)} RangeFunc<T>
345
- */
346
-
347
- /**
348
- * @template T
349
- * @typedef {range_map.RangeMapArray<CreateToToken<T>>} RangeMapToToken<T>
350
- */
351
-
352
- /** @type {(old: string) => (input: number) => string} */
353
- const appendChar = old => input => `${old}${fromCharCode(input)}`
354
-
355
- /** @type {<T>(def: CreateToToken<T>) => (a: CreateToToken<T>) => (b: CreateToToken<T>) => CreateToToken<T>} */
356
- const union = def => a => b => {
357
- if (a === def || a === b) { return b }
358
- if (b === def) { return a }
359
- throw [a, b]
360
- }
361
-
362
- /** @type {<T>(def: CreateToToken<T>) => range_map.RangeMerge<CreateToToken<T>>} */
363
- const rangeMapMerge = def => merge({
364
- union: union(def),
365
- equal: operator.strictEqual,
366
- })
367
-
368
- /** @type {<T>(r: _range.Range) => (f: CreateToToken<T>) => RangeFunc<T>} */
369
- const rangeFunc = r => f => def => fromRange(def)(r)(f)
370
-
371
- /** @type {<T>(def: CreateToToken<T>) => (operator.Scan<RangeFunc<T>, RangeMapToToken<T>>)} */
372
- const scanRangeOp = def => f => [f(def), scanRangeOp(def)]
373
-
374
- /** @type {<T>(def: CreateToToken<T>) => (a: list.List<RangeFunc<T>>) => RangeMapToToken<T>} */
375
- const reduceRangeMap = def => a => {
376
- const rm = scan(scanRangeOp(def))(a)
377
- return toArray(listReduce(rangeMapMerge(def))(empty)(rm))
378
- }
379
-
380
- /** @type {<T>(def: CreateToToken<T>) => (f: CreateToToken<T>) => (operator.Scan<_range.Range, RangeMapToToken<T>>)} */
381
- const scanRangeSetOp = def => f => r => [fromRange(def)(r)(f), scanRangeSetOp(def)(f)]
382
-
383
- /** @type {<T>(rs: list.List<_range.Range>) => (f: CreateToToken<T>) => RangeFunc<T>} */
384
- const rangeSetFunc = rs => f => def => {
385
- const rm = scan(scanRangeSetOp(def)(f))(rs)
386
- return toArray(listReduce(rangeMapMerge(def))(empty)(rm))
387
- }
388
-
389
- /** @type {<T>(def: CreateToToken<T>) => (a: list.List<RangeFunc<T>>) => CreateToToken<T>} */
390
- const create = def => a => {
391
- /** @typedef {typeof def extends CreateToToken<infer T> ? T : never} T */
392
- const i = reduceRangeMap(def)(a)
393
- /** @type {(v: number) => (i: RangeMapToToken<T>) => (v: T) => ToToken} */
394
- const x = get(def)
395
- return v => c => x(c)(i)(v)(c)
396
- }
397
-
398
- /** @type {(digit: number) => bigint} */
399
- const digitToBigInt = d => BigInt(d - digit0)
400
-
401
- /** @type {(digit: number) => ParseNumberBuffer} */
402
- const startNumber = digit => ({ s: 1n, m: digitToBigInt(digit), f: 0, es: 1, e: 0 })
403
-
404
- /** @type {ParseNumberBuffer} */
405
- const startNegativeNumber = { s: -1n, m: 0n, f: 0, es: 1, e: 0 }
406
-
407
- /** @type {(digit: number) => (b: ParseNumberBuffer) => ParseNumberBuffer} */
408
- const addIntDigit = digit => b => ({ ... b, m: b.m * 10n + digitToBigInt(digit)})
409
-
410
- /** @type {(digit: number) => (b: ParseNumberBuffer) => ParseNumberBuffer} */
411
- const addFracDigit = digit => b => ({ ... b, m: b.m * 10n + digitToBigInt(digit), f: b.f - 1})
412
-
413
- /** @type {(digit: number) => (b: ParseNumberBuffer) => ParseNumberBuffer} */
414
- const addExpDigit = digit => b => ({ ... b, e: b.e * 10 + digit - digit0})
415
-
416
- /** @type {(s: ParseNumberState) => JsToken} */
417
- const bufferToNumberToken = ({numberKind, value, b}) =>
418
- {
419
- if (numberKind === 'bigint')
420
- return { kind: 'bigint', value: b.s * b.m }
421
- return { kind: 'number', value: value, bf: [b.s * b.m, b.f + b.es * b.e] }
422
- }
423
-
424
- /**
425
- * @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#keywords
426
- * @type {list.List<map.Entry<JsToken>>}
427
- */
428
- const keywordEntries = [
429
- ['arguments', { kind: 'arguments'}],
430
- ['await', { kind: 'await'}],
431
- ['break', { kind: 'break'}],
432
- ['case', { kind: 'case'}],
433
- ['catch', { kind: 'catch'}],
434
- ['class', { kind: 'class'}],
435
- ['const', { kind: 'const'}],
436
- ['continue', { kind: 'continue'}],
437
- ['debugger', { kind: 'debugger'}],
438
- ['default', { kind: 'default'}],
439
- ['delete', { kind: 'delete'}],
440
- ['do', { kind: 'do'}],
441
- ['else', { kind: 'else'}],
442
- ['enum', { kind: 'enum'}],
443
- ['eval', { kind: 'eval'}],
444
- ['export', { kind: 'export'}],
445
- ['extends', { kind: 'extends'}],
446
- ['false', { kind: 'false'}],
447
- ['finally', { kind: 'finally'}],
448
- ['for', { kind: 'for'}],
449
- ['function', { kind: 'function'}],
450
- ['if', { kind: 'if'}],
451
- ['implements', { kind: 'implements'}],
452
- ['import', { kind: 'import'}],
453
- ['in', { kind: 'in'}],
454
- ['instanceof', { kind: 'instanceof'}],
455
- ['interface', { kind: 'interface'}],
456
- ['let', { kind: 'let'}],
457
- ['new', { kind: 'new'}],
458
- ['null', { kind: 'null'}],
459
- ['package', { kind: 'package'}],
460
- ['private', { kind: 'private'}],
461
- ['protected', { kind: 'protected'}],
462
- ['public', { kind: 'public'}],
463
- ['return', { kind: 'return'}],
464
- ['static', { kind: 'static'}],
465
- ['super', { kind: 'super'}],
466
- ['switch', { kind: 'switch'}],
467
- ['this', { kind: 'this'}],
468
- ['throw', { kind: 'throw'}],
469
- ['true', { kind: 'true'}],
470
- ['try', { kind: 'try'}],
471
- ['typeof', { kind: 'typeof'}],
472
- ['undefined', { kind: 'undefined'}],
473
- ['var', { kind: 'var'}],
474
- ['void', { kind: 'void'}],
475
- ['while', { kind: 'while'}],
476
- ['with', { kind: 'with'}],
477
- ['yield', { kind: 'yield'}],
478
- ]
479
-
480
- const keywordMap = map.fromEntries(keywordEntries)
481
-
482
- /** @type {(token: JsToken) => Boolean} */
483
- export const isKeywordToken = token => at(token.kind)(keywordMap) !== null
484
-
485
- /**
486
- * @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators
487
- * @type {list.List<map.Entry<JsToken>>}
488
- */
489
- const operatorEntries = [
490
- ['!', { kind: '!'}],
491
- ['!=', { kind: '!='}],
492
- ['!==', { kind: '!=='}],
493
- ['%', { kind: '%'}],
494
- ['%=', { kind: '%='}],
495
- ['&', { kind: '&'}],
496
- ['&&', { kind: '&&'}],
497
- ['&&=', { kind: '&&='}],
498
- ['&=', { kind: '&='}],
499
- ['(', { kind: '('}],
500
- [')', { kind: ')'}],
501
- ['*', { kind: '*'}],
502
- ['**', { kind: '**'}],
503
- ['**=', { kind: '**='}],
504
- ['*=', { kind: '*='}],
505
- ['+', { kind: '+'}],
506
- ['++', { kind: '++'}],
507
- ['+=', { kind: '+='}],
508
- [',', { kind: ','}],
509
- ['-', { kind: '-'}],
510
- ['--', { kind: '--'}],
511
- ['-=', { kind: '-='}],
512
- ['.', { kind: '.'}],
513
- ['/', { kind: '/'}],
514
- ['/=', { kind: '/='}],
515
- [':', { kind: ':'}],
516
- ['<', { kind: '<'}],
517
- ['<<', { kind: '<<'}],
518
- ['<<=', { kind: '<<='}],
519
- ['<=', {kind: '<='}],
520
- ['=', { kind: '='}],
521
- ['==', { kind: '=='}],
522
- ['===', { kind: '==='}],
523
- ['=>', {kind: '=>'}],
524
- ['>', { kind: '>'}],
525
- ['>=', { kind: '>='}],
526
- ['>>', { kind: '>>'}],
527
- ['>>=', {kind: '>>='}],
528
- ['>>>', {kind: '>>>'}],
529
- ['>>>=', {kind: '>>>='}],
530
- ['?', { kind: '?'}],
531
- ['?.', { kind: '?.'}],
532
- ['??', { kind: '??'}],
533
- ['??=', { kind: '??='}],
534
- ['^', { kind: '^'}],
535
- ['^=', { kind: '^='}],
536
- ['[', { kind: '['}],
537
- [']', { kind: ']'}],
538
- ['{', { kind: '{'}],
539
- ['|', { kind: '|'}],
540
- ['|=', { kind: '|='}],
541
- ['||', { kind: '||'}],
542
- ['||=', { kind: '||='}],
543
- ['}', { kind: '}'}],
544
- ['~', { kind: '~' }]
545
- ]
546
-
547
- const operatorMap = map.fromEntries(operatorEntries)
548
-
549
- /** @type {(op: string) => JsToken} */
550
- const getOperatorToken = op => at(op)(operatorMap) ?? { kind: 'error', message: 'invalid token' }
551
-
552
- /** @type {(op: string) => Boolean} */
553
- const hasOperatorToken = op => at(op)(operatorMap) !== null
554
-
555
- /** @type {(state: InitialState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
556
- const initialStateOp = create(state => () => [[{ kind: 'error', message: 'unexpected character' }], state])([
557
- rangeFunc(rangeOneNine)(() => input => [empty, { kind: 'number', value: fromCharCode(input), b: startNumber(input), numberKind: 'int' }]),
558
- rangeSetFunc(rangeIdStart)(() => input => [empty, { kind: 'id', value: fromCharCode(input) }]),
559
- rangeSetFunc(rangeSetWhiteSpace)(() => () => [empty, { kind: 'ws' }]),
560
- rangeSetFunc(rangeSetNewLine)(() => () => [empty, { kind: 'nl' }]),
561
- rangeFunc(one(quotationMark))(() => () => [empty, { kind: 'string', value: '' }]),
562
- rangeFunc(one(digit0))(() => input => [empty, { kind: 'number', value: fromCharCode(input), b: startNumber(input), numberKind: '0' }]),
563
- rangeSetFunc(rangeOpStart)(() => input => [empty, { kind: 'op', value: fromCharCode(input) }])
564
- ])
565
-
566
- /** @type {(state: ParseNumberState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
567
- const invalidNumberToToken = () => input =>
568
- {
569
- const next = tokenizeOp({ kind: 'initial' })(input)
570
- return [{ first: { kind: 'error', message: 'invalid number' }, tail: next[0] }, next[1]]
571
- }
572
-
573
- /** @type {(state: ParseNumberState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
574
- const fullStopToToken = state => input => {
575
- switch (state.numberKind) {
576
- case '0':
577
- case 'int': return [empty, { kind: 'number', value: appendChar(state.value)(input), b: state.b, numberKind: '.' }]
578
- default: return tokenizeOp({ kind: 'invalidNumber' })(input)
579
- }
580
- }
581
-
582
- /** @type {(state: ParseNumberState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
583
- const digit0ToToken = state => input => {
584
- switch (state.numberKind) {
585
- case '0': return tokenizeOp({ kind: 'invalidNumber' })(input)
586
- case '.':
587
- case 'fractional': return [empty, { kind: 'number', value: appendChar(state.value)(input), b: addFracDigit(input)(state.b), numberKind: 'fractional' }]
588
- case 'e':
589
- case 'e+':
590
- case 'e-':
591
- case 'expDigits': return [empty, { kind: 'number', value: appendChar(state.value)(input), b: addExpDigit(input)(state.b), numberKind: 'expDigits' }]
592
- default: return [empty, { kind: 'number', value: appendChar(state.value)(input), b: addIntDigit(input)(state.b), numberKind: state.numberKind }]
593
- }
594
- }
595
-
596
- /** @type {(state: ParseNumberState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
597
- const digit19ToToken = state => input => {
598
- switch (state.numberKind) {
599
- case '0': return tokenizeOp({ kind: 'invalidNumber' })(input)
600
- case '.':
601
- case 'fractional': return [empty, { kind: 'number', value: appendChar(state.value)(input), b: addFracDigit(input)(state.b), numberKind: 'fractional' }]
602
- case 'e':
603
- case 'e+':
604
- case 'e-':
605
- case 'expDigits': return [empty, { kind: 'number', value: appendChar(state.value)(input), b: addExpDigit(input)(state.b), numberKind: 'expDigits' }]
606
- default: return [empty, { kind: 'number', value: appendChar(state.value)(input), b: addIntDigit(input)(state.b), numberKind: 'int' }]
607
- }
608
- }
609
-
610
- /** @type {(state: ParseNumberState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
611
- const expToToken = state => input => {
612
- switch (state.numberKind) {
613
- case '0':
614
- case 'int':
615
- case 'fractional': return [empty, { kind: 'number', value: appendChar(state.value)(input), b: state.b, numberKind: 'e' }]
616
- default: return tokenizeOp({ kind: 'invalidNumber' })(input)
617
- }
618
- }
619
-
620
- /** @type {(state: ParseNumberState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
621
- const hyphenMinusToToken = state => input => {
622
- switch (state.numberKind) {
623
- case 'e': return [empty, { kind: 'number', value: appendChar(state.value)(input), b: { ... state.b, es: -1}, numberKind: 'e-' }]
624
- default: return terminalToToken(state)(input)
625
- }
626
- }
627
-
628
- /** @type {(state: ParseNumberState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
629
- const plusSignToToken = state => input => {
630
- switch (state.numberKind) {
631
- case 'e': return [empty, { kind: 'number', value: appendChar(state.value)(input), b: state.b, numberKind: 'e+' }]
632
- default: return tokenizeOp({ kind: 'invalidNumber' })(input)
633
- }
634
- }
635
-
636
- /** @type {(state: ParseNumberState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
637
- const terminalToToken = state => input => {
638
- switch (state.numberKind) {
639
- case '.':
640
- case 'e':
641
- case 'e+':
642
- case 'e-':
643
- {
644
- const next = tokenizeOp({ kind: 'initial' })(input)
645
- return [{ first: { kind: 'error', message: 'invalid number' }, tail: next[0] }, next[1]]
646
- }
647
- default:
648
- {
649
- const next = tokenizeOp({ kind: 'initial' })(input)
650
- return [{ first: bufferToNumberToken(state), tail: next[0] }, next[1]]
651
- }
652
- }
653
- }
654
-
655
- /** @type {(state: ParseNumberState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
656
- const bigintToToken = state => input => {
657
- switch (state.numberKind) {
658
- case '0':
659
- case 'int':
660
- {
661
- return [empty, { kind: 'number', value: state.value, b: state.b, numberKind: 'bigint' }]
662
- }
663
- default:
664
- {
665
- const next = tokenizeOp({ kind: 'initial' })(input)
666
- return [{ first: { kind: 'error', message: 'invalid number' }, tail: next[0] }, next[1]]
667
- }
668
- }
669
- }
670
-
671
- /** @type {(state: ParseNumberState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
672
- const parseNumberStateOp = create(invalidNumberToToken)([
673
- rangeFunc(one(fullStop))(fullStopToToken),
674
- rangeFunc(one(digit0))(digit0ToToken),
675
- rangeFunc(rangeOneNine)(digit19ToToken),
676
- rangeSetFunc([one(latinSmallLetterE), one(latinCapitalLetterE)])(expToToken),
677
- rangeFunc(one(hyphenMinus))(hyphenMinusToToken),
678
- rangeFunc(one(plusSign))(plusSignToToken),
679
- rangeSetFunc(rangeSetTerminalForNumber)(terminalToToken),
680
- rangeFunc(one(latinSmallLetterN))(bigintToToken),
681
- ])
682
-
683
- /** @type {(state: InvalidNumberState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
684
- const invalidNumberStateOp = create(() => () => [empty, { kind: 'invalidNumber' }])([
685
- rangeSetFunc(rangeSetTerminalForNumber)(() => input => {
686
- const next = tokenizeOp({ kind: 'initial' })(input)
687
- return [{ first: { kind: 'error', message: 'invalid number' }, tail: next[0] }, next[1]]
688
- })
689
- ])
690
-
691
- /** @type {(state: ParseStringState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
692
- const parseStringStateOp = create(state => input => [empty, { kind: 'string', value: appendChar(state.value)(input) }])([
693
- rangeFunc(one(quotationMark))(state => () => [[{ kind: 'string', value: state.value }], { kind: 'initial' }]),
694
- rangeFunc(one(reverseSolidus))(state => () => [empty, { kind: 'escapeChar', value: state.value }]),
695
- rangeSetFunc(rangeSetNewLine)(() => () => [[{ kind: 'error', message: 'unterminated string literal'}], { kind: 'nl'}])
696
- ])
697
-
698
- /** @type {(state: ParseEscapeCharState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
699
- const parseEscapeDefault = state => input => {
700
- const next = tokenizeOp({ kind: 'string', value: state.value })(input)
701
- return [{ first: { kind: 'error', message: 'unescaped character' }, tail: next[0] }, next[1]]
702
- }
703
-
704
- /** @type {(state: ParseEscapeCharState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
705
- const parseEscapeCharStateOp = create(parseEscapeDefault)([
706
- rangeSetFunc([one(quotationMark), one(reverseSolidus), one(solidus)])(state => input => [empty, { kind: 'string', value: appendChar(state.value)(input) }]),
707
- rangeFunc(one(latinSmallLetterB))(state => () => [empty, { kind: 'string', value: appendChar(state.value)(backspace) }]),
708
- rangeFunc(one(latinSmallLetterF))(state => () => [empty, { kind: 'string', value: appendChar(state.value)(ff) }]),
709
- rangeFunc(one(latinSmallLetterN))(state => () => [empty, { kind: 'string', value: appendChar(state.value)(lf) }]),
710
- rangeFunc(one(latinSmallLetterR))(state => () => [empty, { kind: 'string', value: appendChar(state.value)(cr) }]),
711
- rangeFunc(one(latinSmallLetterT))(state => () => [empty, { kind: 'string', value: appendChar(state.value)(ht) }]),
712
- rangeFunc(one(latinSmallLetterU))(state => () => [empty, { kind: 'unicodeChar', value: state.value, unicode: 0, hexIndex: 0 }]),
713
- ])
714
-
715
- /** @type {(state: ParseUnicodeCharState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
716
- const parseUnicodeCharDefault = state => input => {
717
- const next = tokenizeOp({ kind: 'string', value: state.value })(input)
718
- return [{ first: { kind: 'error', message: 'invalid hex value' }, tail: next[0] }, next[1]]
719
- }
720
-
721
- /** @type {(offser: number) => (state: ParseUnicodeCharState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
722
- const parseUnicodeCharHex = offset => state => input => {
723
- const hexValue = input - offset
724
- const newUnicode = state.unicode | (hexValue << (3 - state.hexIndex) * 4)
725
- return [empty, state.hexIndex === 3 ?
726
- { kind: 'string', value: appendChar(state.value)(newUnicode) } :
727
- { kind: 'unicodeChar', value: state.value, unicode: newUnicode, hexIndex: state.hexIndex + 1 }]
728
- }
729
-
730
- /** @type {(state: ParseUnicodeCharState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
731
- const parseUnicodeCharStateOp = create(parseUnicodeCharDefault)([
732
- rangeFunc(digitRange)(parseUnicodeCharHex(digit0)),
733
- rangeFunc(rangeSmallAF)(parseUnicodeCharHex(latinSmallLetterA - 10)),
734
- rangeFunc(rangeCapitalAF)(parseUnicodeCharHex(latinCapitalLetterA - 10))
735
- ])
736
-
737
- /** @type {(s: string) => JsToken} */
738
- const idToToken = s => at(s)(keywordMap) ?? { kind: 'id', value: s }
739
-
740
- /** @type {(state: ParseIdState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
741
- const parseIdDefault = state => input => {
742
- const keyWordToken = idToToken(state.value)
743
- const next = tokenizeOp({ kind: 'initial' })(input)
744
- return [{ first: keyWordToken, tail: next[0] }, next[1]]
745
- }
746
-
747
- /** @type {(state: ParseIdState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
748
- const parseIdStateOp = create(parseIdDefault)([
749
- rangeSetFunc(rangeId)(state => input => [empty, { kind: 'id', value: appendChar(state.value)(input) }])
750
- ])
751
-
752
- /** @type {(state: ParseOperatorState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
753
- const parseOperatorStateOp = state => input => {
754
- const nextStateValue = appendChar(state.value)(input)
755
- switch (nextStateValue)
756
- {
757
- case '//': return [empty, { kind: '//', value: '', newLine: false }]
758
- case '/*': return [empty, { kind: '/*', value: '', newLine: false }]
759
- default: {
760
- if (hasOperatorToken(nextStateValue))
761
- return [empty, { kind: 'op', value: nextStateValue }]
762
- const next = tokenizeOp({ kind: 'initial' })(input)
763
- return [{ first: getOperatorToken(state.value), tail: next[0] }, next[1]]
764
- }
765
- }
766
- }
767
-
768
- /** @type {(state: ParseCommentState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
769
- const parseSinglelineCommentStateOp = create(state => input => [empty, { ...state, value: appendChar(state.value)(input) }])([
770
- rangeSetFunc(rangeSetNewLine)(state => () => [[{ kind: '//', value: state.value }], { kind: 'nl' }])
771
- ])
772
-
773
- /** @type {(state: ParseCommentState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
774
- const parseMultilineCommentStateOp = create(state => input => [empty, { ...state, value: appendChar(state.value)(input) }])([
775
- rangeFunc(one(asterisk))(state => () => [empty, { ...state, kind: '/**' }]),
776
- rangeSetFunc(rangeSetNewLine)(state => input => [empty, { ...state, value: appendChar(state.value)(input), newLine: true }]),
777
- ])
778
-
779
- /** @type {(state: ParseCommentState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
780
- const parseMultilineCommentAsteriskStateOp = create(state => input => [empty, { ...state, kind: '/*', value: appendChar(appendChar(state.value)(asterisk))(input)}])([
781
- rangeFunc(one(asterisk))(state => () => [empty, { ...state, value: appendChar(state.value)(asterisk) }]),
782
- rangeSetFunc(rangeSetNewLine)(state => input => [empty, { kind: '/*', value: appendChar(appendChar(state.value)(asterisk))(input), newLine: true }]),
783
- rangeFunc(one(solidus))(state => () => {
784
- /** @type {list.List<JsToken>} */
785
- const tokens = state.newLine ? [{ kind: '/*', value: state.value }, { kind: 'nl' }] : [{ kind: '/*', value: state.value }]
786
- return [tokens, { kind: 'initial' }]
787
- })
788
- ])
789
-
790
- /** @type {(state: ParseWhitespaceState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
791
- const parseWhitespaceDefault = () => input => {
792
- const next = tokenizeOp({ kind: 'initial' })(input)
793
- return [{ first: { kind: 'ws' }, tail: next[0] }, next[1]]
794
- }
795
-
796
- /** @type {(state: ParseWhitespaceState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
797
- const parseWhitespaceStateOp = create(parseWhitespaceDefault)([
798
- rangeSetFunc(rangeSetWhiteSpace)(state => () => [empty, state]),
799
- rangeSetFunc(rangeSetNewLine)(() => () => [empty, { kind: 'nl' }])
800
- ])
801
-
802
- /** @type {(state: ParseNewLineState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
803
- const parseNewLineDefault = state => input => {
804
- const next = tokenizeOp({ kind: 'initial' })(input)
805
- return [{ first: { kind: 'nl' }, tail: next[0] }, next[1]]
806
- }
807
-
808
- /** @type {(state: ParseNewLineState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
809
- const parseNewLineStateOp = create(parseNewLineDefault)([
810
- rangeSetFunc(rangeSetWhiteSpace)(state => () => [empty, state]),
811
- rangeSetFunc(rangeSetNewLine)(state => () => [empty, state])
812
- ])
813
-
814
- /** @type {(state: EofState) => (input: number) => readonly[list.List<JsToken>, TokenizerState]} */
815
- const eofStateOp = create(state => () => [[{ kind: 'error', message: 'eof' }], state])([])
816
-
817
- /** @type {operator.StateScan<number, TokenizerState, list.List<JsToken>>} */
818
- const tokenizeCharCodeOp = state => {
819
- switch (state.kind) {
820
- case 'initial': return initialStateOp(state)
821
- case 'id': return parseIdStateOp(state)
822
- case 'string': return parseStringStateOp(state)
823
- case 'escapeChar': return parseEscapeCharStateOp(state)
824
- case 'unicodeChar': return parseUnicodeCharStateOp(state)
825
- case 'invalidNumber': return invalidNumberStateOp(state)
826
- case 'number': return parseNumberStateOp(state)
827
- case 'op': return parseOperatorStateOp(state)
828
- case '//': return parseSinglelineCommentStateOp(state)
829
- case '/*': return parseMultilineCommentStateOp(state)
830
- case '/**': return parseMultilineCommentAsteriskStateOp(state)
831
- case 'ws': return parseWhitespaceStateOp(state)
832
- case 'nl': return parseNewLineStateOp(state)
833
- case 'eof': return eofStateOp(state)
834
- }
835
- }
836
-
837
- /** @type {(state: TokenizerState) => readonly[list.List<JsToken>, TokenizerState]} */
838
- const tokenizeEofOp = state => {
839
- switch (state.kind) {
840
- case 'initial': return [empty, { kind: 'eof' }]
841
- case 'id': return [[idToToken(state.value)], { kind: 'eof' }]
842
- case 'string':
843
- case 'escapeChar':
844
- case 'unicodeChar': return [[{ kind: 'error', message: '" are missing' }], { kind: 'eof' }]
845
- case 'invalidNumber': return [[{ kind: 'error', message: 'invalid number' }], { kind: 'eof' }]
846
- case 'number':
847
- switch (state.numberKind) {
848
- case '.':
849
- case 'e':
850
- case 'e+':
851
- case 'e-': return [[{ kind: 'error', message: 'invalid number' }], { kind: 'eof', }]
852
- default: return [[bufferToNumberToken(state)], { kind: 'eof' }]
853
- }
854
- case 'op': return [[getOperatorToken(state.value)], { kind: 'eof' }]
855
- case '//': return [[{kind: '//', value: state.value}], { kind: 'eof' }]
856
- case '/*':
857
- case '/**': return [[{ kind: 'error', message: '*/ expected' }], { kind: 'eof', }]
858
- case 'ws': return [[{kind: 'ws'}], { kind: 'eof' }]
859
- case 'nl': return [[{kind: 'nl'}], { kind: 'eof' }]
860
- case 'eof': return [[{ kind: 'error', message: 'eof' }], state]
861
- }
862
- }
863
-
864
- /** @type {operator.StateScan<CharCodeOrEof, TokenizerState, list.List<JsToken>>} */
865
- const tokenizeOp = state => input => input === null ? tokenizeEofOp(state) : tokenizeCharCodeOp(state)(input)
866
-
867
- const scanTokenize = stateScan(tokenizeOp)
868
-
869
- const initial = scanTokenize({ kind: 'initial' })
870
-
871
- /** @type {(input: list.List<number>) => list.List<JsToken>} */
872
- export const tokenize = input => flat(initial(flat([/** @type {list.List<CharCodeOrEof>} */(input), [null]])))