functionalscript 0.2.6 → 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 (428) hide show
  1. package/.github/workflows/ci.yml +19 -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} +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/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,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.6",
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