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,35 +1,24 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- import * as Operator from '../../types/function/operator/module.f.mjs'
3
- import * as list from '../../types/list/module.f.mjs'
1
+ import * as Operator from '../../types/function/operator/module.f.ts'
2
+ import * as list from '../../types/list/module.f.ts'
4
3
  const { empty, flat, stateScan } = list
5
- import * as bf from '../../types/bigfloat/module.f.mjs'
4
+ import * as bf from '../../types/bigfloat/module.f.ts'
6
5
  const { multiply } = bf
7
- import * as jsTokenizer from '../../js/tokenizer/module.f.mjs'
6
+ import * as jsTokenizer from '../../js/tokenizer/module.f.ts'
8
7
 
9
- /**
10
- * @typedef {|
11
- * {readonly kind: 'true' | 'false' | 'null' } |
12
- * {readonly kind: '{' | '}' | ':' | ',' | '[' | ']' } |
13
- * jsTokenizer.StringToken |
14
- * jsTokenizer.NumberToken |
15
- * jsTokenizer.ErrorToken
16
- * } JsonToken
17
- */
8
+ export type JsonToken = |
9
+ {readonly kind: 'true' | 'false' | 'null' } |
10
+ {readonly kind: '{' | '}' | ':' | ',' | '[' | ']' } |
11
+ jsTokenizer.StringToken |
12
+ jsTokenizer.NumberToken |
13
+ jsTokenizer.ErrorToken
18
14
 
19
- /**
20
- * @typedef {|
21
- * {readonly kind: 'def' | '-' }
22
- * } ScanState
23
- */
15
+ type ScanState = {readonly kind: 'def' | '-' }
24
16
 
25
- /**
26
- * @typedef {|
27
- * jsTokenizer.JsToken | null
28
- * } ScanInput
29
- */
17
+ type ScanInput = jsTokenizer.JsToken | null
30
18
 
31
- /** @type {(input: jsTokenizer.JsToken) => list.List<JsonToken>} */
32
- const mapToken = input =>
19
+ const mapToken
20
+ : (input: jsTokenizer.JsToken) => list.List<JsonToken>
21
+ = input =>
33
22
  {
34
23
  switch(input.kind)
35
24
  {
@@ -51,8 +40,9 @@ const mapToken = input =>
51
40
  }
52
41
  }
53
42
 
54
- /** @type {(input: ScanInput) => readonly [list.List<JsonToken>, ScanState]} */
55
- const parseDefaultState = input =>
43
+ const parseDefaultState
44
+ : (input: ScanInput) => readonly [list.List<JsonToken>, ScanState]
45
+ = input =>
56
46
  {
57
47
  if (input === null) return [empty, { kind: 'def'}]
58
48
  switch(input.kind)
@@ -62,8 +52,9 @@ const parseDefaultState = input =>
62
52
  }
63
53
  }
64
54
 
65
- /** @type {(input: ScanInput) => readonly [list.List<JsonToken>, ScanState]} */
66
- const parseMinusState = input =>
55
+ const parseMinusState
56
+ : (input: ScanInput) => readonly [list.List<JsonToken>, ScanState]
57
+ = input =>
67
58
  {
68
59
  if (input === null) return [[{ kind: 'error', message: 'invalid token' }], { kind: 'def'}]
69
60
  switch(input.kind)
@@ -74,8 +65,9 @@ const parseMinusState = input =>
74
65
  }
75
66
  }
76
67
 
77
- /** @type {Operator.StateScan<ScanInput, ScanState, list.List<JsonToken>>} */
78
- const scanToken = state => input => {
68
+ const scanToken
69
+ : Operator.StateScan<ScanInput, ScanState, list.List<JsonToken>>
70
+ = state => input => {
79
71
  switch(state.kind)
80
72
  {
81
73
  case '-': return parseMinusState(input)
@@ -83,10 +75,11 @@ const scanToken = state => input => {
83
75
  }
84
76
  }
85
77
 
86
- /** @type {(input: list.List<number>) => list.List<JsonToken>} */
87
- export const tokenize = input =>
78
+ export const tokenize
79
+ = (input: list.List<number>): list.List<JsonToken> =>
88
80
  {
89
- /** @type {list.List<ScanInput>} */
90
- const jsTokens = jsTokenizer.tokenize(input)
81
+ const jsTokens
82
+ : list.List<ScanInput>
83
+ = jsTokenizer.tokenize(input)
91
84
  return flat(stateScan(scanToken)({ kind: 'def' })(list.concat(jsTokens)([null])))
92
85
  }
@@ -1,13 +1,14 @@
1
- import * as tokenizer from './module.f.mjs'
2
- import * as list from '../../types/list/module.f.mjs'
1
+ import * as tokenizer from './module.f.ts'
2
+ import * as list from '../../types/list/module.f.ts'
3
3
  const { toArray } = list
4
- import * as djs from '../../djs/module.f.mjs'
5
- import * as o from '../../types/object/module.f.mjs'
4
+ import * as djs from '../../djs/module.f.ts'
5
+ import * as o from '../../types/object/module.f.ts'
6
6
  const { sort } = o
7
- import * as encoding from '../../text/utf16/module.f.mjs'
7
+ import * as encoding from '../../text/utf16/module.f.ts'
8
8
 
9
- /** @type {(s: string) => readonly tokenizer.JsonToken[]} */
10
- const tokenizeString = s => toArray(tokenizer.tokenize(encoding.stringToList(s)))
9
+ const tokenizeString
10
+ : (s: string) => readonly tokenizer.JsonToken[]
11
+ = s => toArray(tokenizer.tokenize(encoding.stringToList(s)))
11
12
 
12
13
  const stringify = djs.stringify(sort)
13
14
 
@@ -286,4 +287,4 @@ export default {
286
287
  if (result !== '[{"kind":"["},{"kind":"null"},{"kind":"]"}]') { throw result }
287
288
  },
288
289
  ]
289
- }
290
+ }
@@ -1,8 +1,12 @@
1
- use crate::{interface::{Any, Extension, Unpacked}, nullish::Nullish::*, simple::Simple};
1
+ use crate::{
2
+ interface::{Any, Extension, Unpacked},
3
+ nullish::Nullish::*,
4
+ simple::Simple,
5
+ };
2
6
 
3
7
  pub trait AnyExtension: Any {
4
8
  fn string(c: &str) -> Self::String16 {
5
- c.encode_utf16().into_iter().to_complex()
9
+ c.encode_utf16().to_complex()
6
10
  }
7
11
  fn to_string(self) -> Self::String16 {
8
12
  match self.unpack() {
@@ -51,7 +55,11 @@ impl<T: Any> AnyExtension for T {}
51
55
  mod test {
52
56
  mod to_string {
53
57
  use crate::{
54
- extension::AnyExtension, interface::{Complex, Extension}, naive::{Any, Array, Object}, nullish::Nullish::*, simple::Simple
58
+ extension::AnyExtension,
59
+ interface::{Complex, Extension},
60
+ naive::{Any, Array, Object},
61
+ nullish::Nullish::*,
62
+ simple::Simple,
55
63
  };
56
64
 
57
65
  #[test]
@@ -100,7 +108,10 @@ mod test {
100
108
  }
101
109
 
102
110
  mod own_property {
103
- use crate::{extension::AnyExtension, interface::Complex, naive::Any, nullish::Nullish::*, simple::Simple};
111
+ use crate::{
112
+ extension::AnyExtension, interface::Complex, naive::Any, nullish::Nullish::*,
113
+ simple::Simple,
114
+ };
104
115
 
105
116
  #[test]
106
117
  #[should_panic]
@@ -22,10 +22,7 @@ pub trait String16<U: Any<String16 = Self>>:
22
22
  {
23
23
  }
24
24
 
25
- pub trait BigInt<U: Any<BigInt = Self>>:
26
- Complex<U> + Container<Header = Sign, Item = u64>
27
- {
28
- }
25
+ pub trait BigInt<U: Any<BigInt = Self>>: Complex<U> + Container<Header = Sign, Item = u64> {}
29
26
 
30
27
  pub trait Array<U: Any<Array = Self>>: Complex<U> + Container<Header = (), Item = U> {}
31
28
 
@@ -58,16 +55,16 @@ pub trait Any: PartialEq + Sized + Clone + fmt::Debug {
58
55
 
59
56
  fn to_string(self) -> Self::String16 {
60
57
  if let Some(simple) = self.try_to_simple() {
61
- return simple.to_string::<Self>()
58
+ return simple.to_string::<Self>();
62
59
  }
63
60
  if let Ok(v) = self.clone().try_to::<Self::String16>() {
64
61
  return v;
65
62
  }
66
63
  if self.clone().try_to::<Self::Array>().is_ok() {
67
- return "".to_string16::<Self>()
64
+ return "".to_string16::<Self>();
68
65
  }
69
66
  if self.clone().try_to::<Self::Object>().is_ok() {
70
- return "[object Object]".to_string16::<Self>()
67
+ return "[object Object]".to_string16::<Self>();
71
68
  }
72
69
  // bigint and function
73
70
  todo!()
@@ -105,12 +102,12 @@ pub trait Extension: Sized {
105
102
  where
106
103
  Self: IntoIterator<Item: Any>,
107
104
  {
108
- self.to_complex::<<Self::Item as Any>::Array>()
109
- .to_unknown()
105
+ self.to_complex::<<Self::Item as Any>::Array>().to_unknown()
110
106
  }
111
107
 
112
108
  fn to_object_unknown<U: Any>(self) -> U
113
- where Self: IntoIterator<Item = (U::String16, U)>
109
+ where
110
+ Self: IntoIterator<Item = (U::String16, U)>,
114
111
  {
115
112
  self.to_complex::<U::Object>().to_unknown()
116
113
  }
@@ -1,7 +1,7 @@
1
- pub mod interface;
2
1
  pub mod extension;
2
+ pub mod interface;
3
+ pub mod naive;
4
+ pub mod nanenum;
3
5
  pub mod nullish;
4
6
  pub mod sign;
5
- pub mod naive;
6
7
  pub mod simple;
7
- pub mod nanenum;
@@ -1,7 +1,11 @@
1
1
  use core::{fmt, marker::PhantomData};
2
2
  use std::rc;
3
3
 
4
- use crate::{interface::{self, Utf8}, nullish::Nullish, sign::Sign, simple::Simple};
4
+ use crate::{
5
+ interface::{self},
6
+ sign::Sign,
7
+ simple::Simple,
8
+ };
5
9
 
6
10
  pub trait Policy {
7
11
  type Header: PartialEq + fmt::Debug + Clone;
@@ -38,7 +42,10 @@ pub struct Complex<P: Policy> {
38
42
 
39
43
  impl<P: Policy> Clone for Complex<P> {
40
44
  fn clone(&self) -> Self {
41
- Self { header: self.header.clone(), items: self.items.clone() }
45
+ Self {
46
+ header: self.header.clone(),
47
+ items: self.items.clone(),
48
+ }
42
49
  }
43
50
  }
44
51
 
@@ -61,7 +68,7 @@ impl<P: Policy> interface::Container for Complex<P> {
61
68
  type Header = P::Header;
62
69
  type Item = P::Item;
63
70
  fn items(&self) -> &[Self::Item] {
64
- &*self.items
71
+ &self.items
65
72
  }
66
73
  fn header(&self) -> &Self::Header {
67
74
  &self.header
@@ -99,7 +99,11 @@ impl<T: Raw64> Drop for NaNEnumPack<T> {
99
99
 
100
100
  #[cfg(test)]
101
101
  mod test {
102
- use core::{mem::forget, ptr::null, sync::atomic::{AtomicUsize, Ordering}};
102
+ use core::{
103
+ mem::forget,
104
+ ptr::null,
105
+ sync::atomic::{AtomicUsize, Ordering},
106
+ };
103
107
  use std::rc::Rc;
104
108
 
105
109
  use crate::nanenum::{Raw64, NEGATIVE, NOT_FINITE};
@@ -1,10 +1,12 @@
1
- /** @type {(a: unknown) => (b: unknown) => void} */
2
- const e = a => b => {
1
+ const e
2
+ : (a: unknown) => (b: unknown) => void
3
+ = a => b => {
3
4
  if (a === b) { } else { throw [a, '===', b] }
4
5
  }
5
6
 
6
- /** @type {(a: unknown) => (b: unknown) => void} */
7
- const n = a => b => {
7
+ const n
8
+ : (a: unknown) => (b: unknown) => void
9
+ = a => b => {
8
10
  if (a !== b) { } else { throw [a, '!==', b] }
9
11
  }
10
12
 
@@ -60,8 +62,7 @@ export default {
60
62
  },
61
63
  array: {
62
64
  array: () => {
63
- /** @type {any} */
64
- const a = []
65
+ const a: any = []
65
66
  e(a)(a)
66
67
  n([])([])
67
68
  const a0 = ['0']
@@ -1,4 +1,4 @@
1
- import * as _ from './module.f.mjs'
1
+ import * as _ from './module.f.ts'
2
2
  import fs from 'node:fs'
3
3
 
4
4
  _.updateVersion({ fs })
@@ -0,0 +1,42 @@
1
+ export type Buffer = {}
2
+
3
+ type Fs<T> = {
4
+ readonly readFileSync: (name: string) => Buffer
5
+ readonly writeFileSync: (name: string, content: string) => T
6
+ }
7
+
8
+ export type Node<T> = {
9
+ readonly fs: Fs<T>
10
+ }
11
+
12
+ const { stringify, parse } = JSON
13
+
14
+ export const getVersion
15
+ : <T>(fs: Fs<T>) => string
16
+ = fs => readJson(fs)('package').version
17
+
18
+ const jsonFile = (jsonFile: string) => `${jsonFile}.json`
19
+
20
+ const readJson
21
+ : <T>(node: Fs<T>) => (name: string) => any
22
+ = fs => name => parse(fs.readFileSync(jsonFile(name)).toString())
23
+
24
+ export const updateVersion
25
+ : <T>(node: Node<T>) => readonly[T, T]
26
+ = ({ fs }) => {
27
+ const f = (name: string) => {
28
+ return fs.writeFileSync(
29
+ jsonFile(name),
30
+ stringify(
31
+ {
32
+ ...readJson(fs)(name),
33
+ version: getVersion(fs)
34
+ },
35
+ null,
36
+ 2))
37
+ }
38
+ return [
39
+ f('package'),
40
+ f('deno')
41
+ ]
42
+ }
@@ -1,13 +1,10 @@
1
- import * as _ from './module.f.mjs'
1
+ import * as _ from './module.f.ts'
2
2
 
3
3
  const version = '0.3.0'
4
4
 
5
- /**
6
- * @type {{
7
- * readonly[k in string]: unknown
8
- * }}
9
- */
10
- const x = {
5
+ const x
6
+ : { readonly[k in string]: unknown }
7
+ = {
11
8
  'package.json': {
12
9
  "name": "functionalscript",
13
10
  version,
@@ -43,7 +40,7 @@ const x = {
43
40
  "typescript": "^4.7.4"
44
41
  }
45
42
  },
46
- "jsr.json": {}
43
+ "deno.json": {}
47
44
  }
48
45
 
49
46
  const e = '{\n' +
@@ -82,14 +79,16 @@ const e = '{\n' +
82
79
  ' }\n' +
83
80
  '}'
84
81
 
85
- /** @type {(s: string) => _.Buffer} */
86
- const buffer = s => ({
82
+ const buffer
83
+ : (s: string) => _.Buffer
84
+ = s => ({
87
85
  toString: () => s
88
86
  })
89
87
 
90
88
  export default () => {
91
- /** @type {_.Node<string>} */
92
- const node = {
89
+ const node
90
+ : _.Node<string>
91
+ = {
93
92
  fs: {
94
93
  readFileSync: n => buffer(JSON.stringify(x[n])),
95
94
  writeFileSync: (_, content) => content
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "functionalscript",
3
- "version": "0.2.5",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "description": "FunctionalScript is a functional subset of JavaScript",
6
6
  "scripts": {
7
- "tscp": "rm -rf out/ && tsc --NoEmit false",
8
- "tsc": "tsc",
9
- "test": "tsc && npm run test-only",
10
- "index": "node ./dev/index.mjs",
11
- "version": "node ./nodejs/version/main.mjs",
12
- "test-only": "node --trace-uncaught ./dev/test.mjs",
13
- "comtest": "node ./com/test/build.mjs",
14
- "doc": "rm -rf docs/ && npm run tscp && deno doc --html out/**/module.f.mjs"
7
+ "tscp": "tsc --NoEmit false --emitDeclarationOnly true",
8
+ "tsct": "tsc --NoEmit false --checkJs false",
9
+ "prepack": "npm run tscp && npm run tsct",
10
+ "test20": "npm run prepack && node --trace-uncaught ./dev/test.js",
11
+ "test": "tsc && node --experimental-strip-types --trace-uncaught ./dev/test.ts",
12
+ "comtest": "node --experimental-strip-types ./com/test/build.ts",
13
+ "index": "node --experimental-strip-types ./dev/index.ts",
14
+ "version": "node --experimental-strip-types ./nodejs/version/main.ts"
15
15
  },
16
16
  "repository": {
17
17
  "type": "git",
@@ -1,18 +1,20 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- import * as _range from '../../types/range/module.f.mjs'
1
+ import * as _range from '../../types/range/module.f.ts'
3
2
 
4
- /** @type {(s: string) => (i: number) => number} */
5
- const at = s => i => {
3
+ const at
4
+ : (s: string) => (i: number) => number
5
+ = s => i => {
6
6
  const r = s.codePointAt(i)
7
7
  if (r === void 0) { throw s }
8
8
  return r
9
9
  }
10
10
 
11
- /** @type {(s: string) => number} */
12
- export const one = s => at(s)(0)
11
+ export const one
12
+ : (s: string) => number
13
+ = s => at(s)(0)
13
14
 
14
- /** @type {(s: string) => _range.Range} */
15
- export const range = s => {
15
+ export const range
16
+ : (s: string) => _range.Range
17
+ = s => {
16
18
  const f = at(s)
17
19
  const f0 = f(0)
18
20
  if (s.length === 1) { return [f0, f0] }
@@ -1,7 +1,7 @@
1
- import * as _ from './module.f.mjs'
1
+ import * as _ from './module.f.ts'
2
2
  const { range } = _
3
- import * as json from '../../json/module.f.mjs'
4
- import * as o from '../../types/object/module.f.mjs'
3
+ import * as json from '../../json/module.f.ts'
4
+ import * as o from '../../types/object/module.f.ts'
5
5
  const { sort } = o
6
6
 
7
7
  const stringify = json.stringify(sort)
@@ -11,4 +11,4 @@ export default {
11
11
  const r = stringify(range("A"))
12
12
  if (r !== '[65,65]') { throw r }
13
13
  }
14
- }
14
+ }
@@ -0,0 +1,30 @@
1
+ import * as list from '../types/list/module.f.ts'
2
+ const { flatMap } = list
3
+
4
+ export type Block = ItemThunk|ItemArray
5
+
6
+ type ItemArray = readonly Item[]
7
+
8
+ type ItemThunk = () => list.List<Item>
9
+
10
+ export type Item = string|ItemArray|ItemThunk
11
+
12
+ export const flat
13
+ : (indent: string) => (text: Block) => list.List<string>
14
+ = indent => {
15
+
16
+ const f
17
+ : (prefix: string) => (text: Block) => list.List<string>
18
+ = prefix => {
19
+ const g
20
+ : (item: Item) => list.List<string>
21
+ = item => typeof (item) === 'string' ? [`${prefix}${item}`] : f(`${prefix}${indent}`)(item)
22
+ return flatMap(g)
23
+ }
24
+
25
+ return f('')
26
+ }
27
+
28
+ export const curly
29
+ : (type: string) => (name: string) => (body: Block) => Block
30
+ = type => name => body => [`${type} ${name}`, '{', body, '}']
@@ -1,11 +1,9 @@
1
- // @ts-self-types="./module.f.d.mts"
2
-
3
1
  /**
4
2
  * https://en.wikipedia.org/wiki/ANSI_escape_code#SGR
5
- *
6
- * @type {(c: number) => string}
7
3
  */
8
- export const sgr = c => `\x1b[${c.toString()}m`
4
+ export const sgr
5
+ : (c: number) => string
6
+ = c => `\x1b[${c.toString()}m`
9
7
 
10
8
  export const codes = {
11
9
  /** @readonly */
@@ -1,10 +1,11 @@
1
- import * as _ from './module.f.mjs'
2
- import * as string from '../types/string/module.f.mjs'
1
+ import * as _ from './module.f.ts'
2
+ import * as string from '../types/string/module.f.ts'
3
3
  const { join } = string
4
4
 
5
5
  export default () => {
6
- /** @type {_.Block} */
7
- const text = [
6
+ const text
7
+ : _.Block
8
+ = [
8
9
  'a',
9
10
  'b',
10
11
  () => [
@@ -0,0 +1,108 @@
1
+ import * as list from '../../types/list/module.f.ts'
2
+ import * as operator from '../../types/function/operator/module.f.ts'
3
+ import * as range from '../../types/range/module.f.ts'
4
+ const { contains } = range
5
+ import * as f from '../../types/function/module.f.ts'
6
+ const { fn } = f
7
+ const { map, flat, stateScan, reduce, flatMap, empty } = list
8
+
9
+ type WordOrEof = u16|null
10
+
11
+ type Utf16State = number|null
12
+
13
+ type u16 = number
14
+
15
+ type i32 = number
16
+
17
+ const lowBmp = contains([0x0000, 0xd7ff])
18
+ const highBmp = contains([0xe000, 0xffff])
19
+
20
+ const isBmpCodePoint
21
+ : (codePoint: i32) => boolean
22
+ = codePoint => lowBmp(codePoint) || highBmp(codePoint)
23
+
24
+ const isHighSurrogate
25
+ : (codePoint: i32) => boolean
26
+ = contains([0xd800, 0xdbff])
27
+
28
+ const isLowSurrogate
29
+ : (codePoint: i32) => boolean
30
+ = contains([0xdc00, 0xdfff])
31
+
32
+ const errorMask = 0b1000_0000_0000_0000_0000_0000_0000_0000
33
+
34
+ const isSupplementaryPlane
35
+ : (a: i32) => boolean
36
+ = contains([0x01_0000, 0x10_ffff])
37
+
38
+ const codePointToUtf16
39
+ : (input: i32) => list.List<u16>
40
+ = codePoint => {
41
+ if (isBmpCodePoint(codePoint)) { return [codePoint] }
42
+ if (isSupplementaryPlane(codePoint)) {
43
+ const n = codePoint - 0x1_0000
44
+ const high = (n >> 10) + 0xd800
45
+ const low = (n & 0b0011_1111_1111) + 0xdc00
46
+ return [high, low]
47
+ }
48
+ return [codePoint & 0xffff]
49
+ }
50
+
51
+ export const fromCodePointList = flatMap(codePointToUtf16)
52
+
53
+ const u16 = contains([0x0000, 0xFFFF])
54
+
55
+ const utf16ByteToCodePointOp
56
+ : operator.StateScan<u16, Utf16State, list.List<i32>>
57
+ = state => word => {
58
+ if (!u16(word)) {
59
+ return [[0xffffffff], state]
60
+ }
61
+ if (state === null) {
62
+ if (isBmpCodePoint(word)) { return [[word], null] }
63
+ if (isHighSurrogate(word)) { return [[], word] }
64
+ return [[word | errorMask], null]
65
+ }
66
+ if (isLowSurrogate(word)) {
67
+ const high = state - 0xd800
68
+ const low = word - 0xdc00
69
+ return [[(high << 10) + low + 0x10000], null]
70
+ }
71
+ if (isBmpCodePoint(word)) { return [[state | errorMask, word], null] }
72
+ if (isHighSurrogate(word)) { return [[state | errorMask], word] }
73
+ return [[state | errorMask, word | errorMask], null]
74
+ }
75
+
76
+ const utf16EofToCodePointOp
77
+ : (state: Utf16State) => readonly[list.List<i32>, Utf16State]
78
+ = state => [state === null ? empty : [state | errorMask], null]
79
+
80
+ const utf16ByteOrEofToCodePointOp
81
+ : operator.StateScan<WordOrEof, Utf16State, list.List<i32>>
82
+ = state => input => input === null ? utf16EofToCodePointOp(state) : utf16ByteToCodePointOp(state)(input)
83
+
84
+ const eofList
85
+ : list.List<WordOrEof>
86
+ = [null]
87
+
88
+ export const toCodePointList
89
+ : (input: list.List<u16>) => list.List<i32>
90
+ = input => flat(stateScan(utf16ByteOrEofToCodePointOp)(null)(flat([input, eofList])))
91
+
92
+ export const stringToList
93
+ : (s: string) => list.List<u16>
94
+ = s => {
95
+ const at
96
+ : (i: number) => list.Result<number>
97
+ = i => {
98
+ const first = s.charCodeAt(i)
99
+ return isNaN(first) ? empty : { first, tail: () => at(i + 1) }
100
+ }
101
+ return at(0)
102
+ }
103
+
104
+ export const listToString
105
+ : (input: list.List<u16>) => string
106
+ = fn(map(String.fromCharCode))
107
+ .then(reduce(operator.concat)(''))
108
+ .result