functionalscript 0.2.6 → 0.3.1

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