functionalscript 0.1.609 → 0.2.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 (393) hide show
  1. package/com/cpp/module.f.mjs +20 -25
  2. package/com/cpp/testlib.f.mjs +3 -4
  3. package/com/cs/module.f.mjs +18 -23
  4. package/com/cs/testlib.f.mjs +3 -5
  5. package/com/rust/module.f.mjs +25 -30
  6. package/com/rust/testlib.f.mjs +3 -5
  7. package/com/test/build.f.mjs +2 -2
  8. package/com/test/build.mjs +4 -4
  9. package/com/types/module.f.mjs +5 -12
  10. package/commonjs/build/module.f.mjs +23 -28
  11. package/commonjs/build/test.f.mjs +4 -4
  12. package/commonjs/module/function/module.f.mjs +0 -2
  13. package/commonjs/module/module.f.mjs +2 -9
  14. package/commonjs/module.f.mjs +0 -2
  15. package/commonjs/module.mjs +2 -7
  16. package/commonjs/package/dependencies/module.f.mjs +5 -10
  17. package/commonjs/package/dependencies/test.f.mjs +1 -1
  18. package/commonjs/package/module.f.mjs +6 -13
  19. package/commonjs/package/test.f.mjs +1 -1
  20. package/commonjs/path/module.f.mjs +12 -23
  21. package/commonjs/path/test.f.mjs +11 -11
  22. package/commonjs/test.mjs +1 -1
  23. package/dev/module.f.mjs +1 -4
  24. package/dev/module.mjs +1 -1
  25. package/dev/test/module.f.mjs +4 -6
  26. package/djs/module.f.mjs +12 -19
  27. package/djs/parser/module.f.mjs +18 -24
  28. package/djs/parser/test.f.mjs +9 -9
  29. package/djs/test.f.mjs +4 -4
  30. package/djs/tokenizer/module.f.mjs +18 -23
  31. package/djs/tokenizer/test.f.mjs +6 -6
  32. package/fsc/module.f.mjs +17 -24
  33. package/fsc/test.f.mjs +3 -3
  34. package/fsm/module.f.mjs +27 -38
  35. package/fsm/test.f.mjs +8 -8
  36. package/html/module.f.mjs +14 -23
  37. package/html/test.f.mjs +4 -4
  38. package/js/tokenizer/module.f.mjs +55 -62
  39. package/js/tokenizer/test.f.mjs +6 -6
  40. package/json/module.f.mjs +18 -31
  41. package/json/parser/module.f.mjs +9 -14
  42. package/json/parser/test.f.mjs +7 -7
  43. package/json/serializer/module.f.mjs +14 -29
  44. package/json/serializer/test.f.mjs +2 -2
  45. package/json/test.f.mjs +3 -3
  46. package/json/tokenizer/module.f.mjs +14 -19
  47. package/json/tokenizer/test.f.mjs +6 -6
  48. package/jsr.json +59 -59
  49. package/nodejs/version/main.mjs +1 -1
  50. package/nodejs/version/module.f.mjs +2 -7
  51. package/nodejs/version/test.f.mjs +3 -3
  52. package/out/com/cpp/module.f.d.mts +4 -0
  53. package/out/com/cpp/module.f.mjs +123 -0
  54. package/out/com/cpp/test.f.mjs +40 -0
  55. package/out/com/cpp/testlib.f.mjs +7 -0
  56. package/out/com/cs/module.f.d.mts +4 -0
  57. package/out/com/cs/module.f.mjs +95 -0
  58. package/out/com/cs/test.f.mjs +43 -0
  59. package/out/com/cs/testlib.f.mjs +7 -0
  60. package/{com → out/com}/rust/module.f.d.mts +3 -7
  61. package/out/com/rust/module.f.mjs +213 -0
  62. package/out/com/rust/test.f.mjs +123 -0
  63. package/out/com/rust/testlib.f.mjs +7 -0
  64. package/{com → out/com}/test/build.f.d.mts +2 -2
  65. package/out/com/test/build.f.mjs +98 -0
  66. package/out/com/test/build.mjs +40 -0
  67. package/{com → out/com}/types/module.f.d.mts +5 -10
  68. package/out/com/types/module.f.mjs +51 -0
  69. package/out/com/types/testlib.f.mjs +30 -0
  70. package/out/commonjs/build/module.f.d.mts +20 -0
  71. package/out/commonjs/build/module.f.mjs +107 -0
  72. package/out/commonjs/build/test.f.mjs +102 -0
  73. package/{commonjs → out/commonjs}/module/function/module.f.d.mts +0 -2
  74. package/out/commonjs/module/function/module.f.mjs +15 -0
  75. package/{commonjs → out/commonjs}/module/module.f.d.mts +16 -21
  76. package/out/commonjs/module/module.f.mjs +48 -0
  77. package/out/commonjs/module.d.mts +3 -0
  78. package/{commonjs → out/commonjs}/module.f.d.mts +0 -2
  79. package/out/commonjs/module.f.mjs +10 -0
  80. package/out/commonjs/module.mjs +26 -0
  81. package/out/commonjs/package/dependencies/module.f.d.mts +6 -0
  82. package/out/commonjs/package/dependencies/module.f.mjs +21 -0
  83. package/out/commonjs/package/dependencies/test.f.mjs +15 -0
  84. package/out/commonjs/package/module.f.d.mts +21 -0
  85. package/out/commonjs/package/module.f.mjs +40 -0
  86. package/out/commonjs/package/test.f.mjs +27 -0
  87. package/{commonjs → out/commonjs}/path/module.f.d.mts +25 -32
  88. package/out/commonjs/path/module.f.mjs +171 -0
  89. package/out/commonjs/path/test.f.mjs +231 -0
  90. package/out/commonjs/test.mjs +87 -0
  91. package/out/dev/index.mjs +2 -0
  92. package/out/dev/module.f.d.mts +1 -0
  93. package/out/dev/module.f.mjs +2 -0
  94. package/out/dev/module.mjs +167 -0
  95. package/{dev → out/dev}/test/module.f.d.mts +2 -3
  96. package/out/dev/test/module.f.mjs +134 -0
  97. package/out/dev/test.f.mjs +58 -0
  98. package/out/dev/test.mjs +52 -0
  99. package/{djs → out/djs}/module.f.d.mts +13 -18
  100. package/out/djs/module.f.mjs +75 -0
  101. package/{djs → out/djs}/parser/module.f.d.mts +11 -15
  102. package/out/djs/parser/module.f.mjs +432 -0
  103. package/out/djs/parser/test.f.mjs +535 -0
  104. package/out/djs/test.f.mjs +84 -0
  105. package/out/djs/tokenizer/module.f.d.mts +13 -0
  106. package/out/djs/tokenizer/module.f.mjs +87 -0
  107. package/out/djs/tokenizer/test.f.mjs +480 -0
  108. package/out/fsc/module.f.d.mts +7 -0
  109. package/out/fsc/module.f.mjs +105 -0
  110. package/out/fsc/test.f.mjs +19 -0
  111. package/out/fsm/module.f.d.mts +14 -0
  112. package/out/fsm/module.f.mjs +80 -0
  113. package/out/fsm/test.f.mjs +138 -0
  114. package/out/html/module.f.d.mts +15 -0
  115. package/out/html/module.f.mjs +94 -0
  116. package/out/html/test.f.mjs +45 -0
  117. package/out/issues/test.f.mjs +66 -0
  118. package/{js → out/js}/tokenizer/module.f.d.mts +10 -15
  119. package/out/js/tokenizer/module.f.mjs +686 -0
  120. package/out/js/tokenizer/test.f.mjs +844 -0
  121. package/out/json/module.f.d.mts +33 -0
  122. package/out/json/module.f.mjs +89 -0
  123. package/{json → out/json}/parser/module.f.d.mts +9 -13
  124. package/out/json/parser/module.f.mjs +224 -0
  125. package/out/json/parser/test.f.mjs +321 -0
  126. package/out/json/serializer/module.f.d.mts +36 -0
  127. package/out/json/serializer/module.f.mjs +67 -0
  128. package/out/json/serializer/test.f.mjs +87 -0
  129. package/out/json/test.f.mjs +61 -0
  130. package/out/json/tokenizer/module.f.d.mts +13 -0
  131. package/out/json/tokenizer/module.f.mjs +78 -0
  132. package/out/json/tokenizer/test.f.mjs +420 -0
  133. package/out/nanvm-lib/tests/test.f.mjs +87 -0
  134. package/out/nodejs/version/main.mjs +3 -0
  135. package/{nodejs → out/nodejs}/version/module.f.d.mts +4 -9
  136. package/out/nodejs/version/module.f.mjs +34 -0
  137. package/out/nodejs/version/test.f.mjs +97 -0
  138. package/{prime_field → out/prime_field}/module.f.d.mts +20 -23
  139. package/out/prime_field/module.f.mjs +87 -0
  140. package/out/prime_field/test.f.mjs +145 -0
  141. package/{secp → out/secp}/module.f.d.mts +27 -28
  142. package/out/secp/module.f.mjs +113 -0
  143. package/out/secp/test.f.mjs +63 -0
  144. package/out/sha2/module.f.d.mts +15 -0
  145. package/out/sha2/module.f.mjs +172 -0
  146. package/out/sha2/test.f.mjs +86 -0
  147. package/out/text/ascii/module.f.d.mts +70 -0
  148. package/out/text/ascii/module.f.mjs +154 -0
  149. package/out/text/ascii/test.f.mjs +14 -0
  150. package/out/text/module.f.d.mts +13 -0
  151. package/out/text/module.f.mjs +19 -0
  152. package/out/text/sgr/module.f.d.mts +12 -0
  153. package/out/text/sgr/module.f.mjs +17 -0
  154. package/out/text/test.f.mjs +19 -0
  155. package/out/text/utf16/module.f.d.mts +12 -0
  156. package/out/text/utf16/module.f.mjs +86 -0
  157. package/out/text/utf16/test.f.mjs +145 -0
  158. package/out/text/utf8/module.f.d.mts +10 -0
  159. package/out/text/utf8/module.f.mjs +126 -0
  160. package/out/text/utf8/test.f.mjs +175 -0
  161. package/{types → out/types}/array/module.f.d.mts +14 -24
  162. package/out/types/array/module.f.mjs +95 -0
  163. package/out/types/array/test.f.mjs +116 -0
  164. package/out/types/bigfloat/module.f.d.mts +6 -0
  165. package/out/types/bigfloat/module.f.mjs +77 -0
  166. package/out/types/bigfloat/test.f.mjs +349 -0
  167. package/out/types/bigint/module.f.d.mts +29 -0
  168. package/{types/bigint/module.f.d.mts → out/types/bigint/module.f.mjs} +64 -27
  169. package/out/types/bigint/test.f.mjs +192 -0
  170. package/{types → out/types}/btree/find/module.f.d.mts +20 -26
  171. package/out/types/btree/find/module.f.mjs +137 -0
  172. package/out/types/btree/find/test.f.mjs +156 -0
  173. package/out/types/btree/module.f.d.mts +5 -0
  174. package/out/types/btree/module.f.mjs +34 -0
  175. package/{types → out/types}/btree/remove/module.f.d.mts +7 -12
  176. package/out/types/btree/remove/module.f.mjs +209 -0
  177. package/out/types/btree/remove/test.f.mjs +638 -0
  178. package/{types → out/types}/btree/set/module.f.d.mts +3 -7
  179. package/out/types/btree/set/module.f.mjs +114 -0
  180. package/out/types/btree/set/test.f.mjs +390 -0
  181. package/out/types/btree/test.f.mjs +83 -0
  182. package/{types → out/types}/btree/types/module.f.d.mts +0 -2
  183. package/out/types/btree/types/module.f.mjs +50 -0
  184. package/out/types/byte_set/module.f.d.mts +25 -0
  185. package/out/types/byte_set/module.f.mjs +42 -0
  186. package/out/types/byte_set/test.f.mjs +123 -0
  187. package/{types → out/types}/function/compare/module.f.d.mts +9 -15
  188. package/out/types/function/compare/module.f.mjs +22 -0
  189. package/out/types/function/compare/test.f.mjs +8 -0
  190. package/{types → out/types}/function/module.f.d.mts +20 -27
  191. package/out/types/function/module.f.mjs +44 -0
  192. package/{types → out/types}/function/operator/module.f.d.mts +28 -43
  193. package/out/types/function/operator/module.f.mjs +60 -0
  194. package/out/types/function/test.f.mjs +15 -0
  195. package/out/types/list/module.f.d.mts +82 -0
  196. package/out/types/list/module.f.mjs +269 -0
  197. package/out/types/list/test.f.mjs +401 -0
  198. package/out/types/map/module.f.d.mts +21 -0
  199. package/out/types/map/module.f.mjs +54 -0
  200. package/out/types/map/test.f.mjs +115 -0
  201. package/out/types/nibble_set/module.f.d.mts +16 -0
  202. package/out/types/nibble_set/module.f.mjs +19 -0
  203. package/out/types/nibble_set/test.f.mjs +90 -0
  204. package/out/types/nullable/module.f.d.mts +9 -0
  205. package/out/types/nullable/module.f.mjs +9 -0
  206. package/out/types/nullable/test.f.mjs +12 -0
  207. package/out/types/number/module.f.d.mts +7 -0
  208. package/out/types/number/module.f.mjs +12 -0
  209. package/out/types/number/test.f.mjs +126 -0
  210. package/out/types/object/module.f.d.mts +22 -0
  211. package/out/types/object/module.f.mjs +27 -0
  212. package/out/types/object/test.f.mjs +17 -0
  213. package/out/types/range/module.f.d.mts +6 -0
  214. package/out/types/range/module.f.mjs +6 -0
  215. package/out/types/range/test.f.mjs +18 -0
  216. package/{types → out/types}/range_map/module.f.d.mts +9 -15
  217. package/out/types/range_map/module.f.mjs +84 -0
  218. package/out/types/range_map/test.f.mjs +201 -0
  219. package/out/types/result/module.d.mts +7 -0
  220. package/{types → out/types}/result/module.f.d.mts +6 -12
  221. package/out/types/result/module.f.mjs +25 -0
  222. package/out/types/result/module.mjs +16 -0
  223. package/{types → out/types}/sorted_list/module.f.d.mts +22 -28
  224. package/out/types/sorted_list/module.f.mjs +102 -0
  225. package/out/types/sorted_list/test.f.mjs +66 -0
  226. package/{types → out/types}/sorted_set/module.f.d.mts +6 -12
  227. package/out/types/sorted_set/module.f.mjs +29 -0
  228. package/out/types/sorted_set/test.f.mjs +80 -0
  229. package/out/types/string/module.f.d.mts +9 -0
  230. package/out/types/string/module.f.mjs +17 -0
  231. package/out/types/string/test.f.mjs +58 -0
  232. package/out/types/string_set/module.f.d.mts +13 -0
  233. package/out/types/string_set/module.f.mjs +29 -0
  234. package/out/types/string_set/test.f.mjs +65 -0
  235. package/package.json +5 -4
  236. package/prime_field/module.f.mjs +9 -12
  237. package/prime_field/test.f.mjs +1 -1
  238. package/secp/module.f.mjs +38 -39
  239. package/secp/test.f.mjs +4 -4
  240. package/sha2/module.f.mjs +7 -20
  241. package/sha2/test.f.mjs +4 -4
  242. package/text/ascii/module.f.mjs +5 -10
  243. package/text/ascii/test.f.mjs +3 -3
  244. package/text/module.f.mjs +7 -14
  245. package/text/sgr/module.f.mjs +2 -4
  246. package/text/test.f.mjs +3 -3
  247. package/text/utf16/module.f.mjs +17 -28
  248. package/text/utf16/test.f.mjs +5 -5
  249. package/text/utf8/module.f.mjs +9 -16
  250. package/text/utf8/test.f.mjs +4 -4
  251. package/tsconfig.json +2 -2
  252. package/types/array/module.f.mjs +8 -25
  253. package/types/array/test.f.mjs +3 -3
  254. package/types/bigfloat/module.f.mjs +3 -10
  255. package/types/bigfloat/test.f.mjs +1 -1
  256. package/types/bigint/module.f.mjs +11 -30
  257. package/types/bigint/test.f.mjs +1 -1
  258. package/types/btree/find/module.f.mjs +8 -17
  259. package/types/btree/find/test.f.mjs +7 -7
  260. package/types/btree/module.f.mjs +6 -11
  261. package/types/btree/remove/module.f.mjs +10 -17
  262. package/types/btree/remove/test.f.mjs +5 -5
  263. package/types/btree/set/module.f.mjs +4 -9
  264. package/types/btree/set/test.f.mjs +4 -4
  265. package/types/btree/test.f.mjs +9 -9
  266. package/types/btree/types/module.f.mjs +0 -2
  267. package/types/byte_set/module.f.mjs +14 -39
  268. package/types/byte_set/test.f.mjs +5 -5
  269. package/types/function/compare/module.f.mjs +3 -12
  270. package/types/function/compare/test.f.mjs +1 -1
  271. package/types/function/module.f.mjs +4 -15
  272. package/types/function/operator/module.f.mjs +14 -41
  273. package/types/function/test.f.mjs +1 -1
  274. package/types/list/module.f.mjs +45 -114
  275. package/types/list/test.f.mjs +10 -10
  276. package/types/map/module.f.mjs +15 -30
  277. package/types/map/test.f.mjs +2 -2
  278. package/types/nibble_set/module.f.mjs +7 -24
  279. package/types/nibble_set/test.f.mjs +2 -2
  280. package/types/nullable/module.f.mjs +2 -9
  281. package/types/nullable/test.f.mjs +1 -1
  282. package/types/number/module.f.mjs +8 -19
  283. package/types/number/test.f.mjs +1 -1
  284. package/types/object/module.f.mjs +9 -20
  285. package/types/object/test.f.mjs +1 -1
  286. package/types/range/module.f.mjs +2 -9
  287. package/types/range/test.f.mjs +1 -1
  288. package/types/range_map/module.f.mjs +9 -18
  289. package/types/range_map/test.f.mjs +32 -32
  290. package/types/result/module.f.mjs +3 -12
  291. package/types/result/module.mjs +2 -2
  292. package/types/sorted_list/module.f.mjs +10 -19
  293. package/types/sorted_list/test.f.mjs +7 -7
  294. package/types/sorted_set/module.f.mjs +7 -16
  295. package/types/sorted_set/test.f.mjs +7 -7
  296. package/types/string/module.f.mjs +10 -21
  297. package/types/string/test.f.mjs +2 -2
  298. package/types/string_set/module.f.mjs +12 -27
  299. package/types/string_set/test.f.mjs +1 -1
  300. package/com/cpp/module.f.d.mts +0 -8
  301. package/com/cs/module.f.d.mts +0 -8
  302. package/commonjs/build/module.f.d.mts +0 -24
  303. package/commonjs/module.d.mts +0 -7
  304. package/commonjs/package/dependencies/module.f.d.mts +0 -10
  305. package/commonjs/package/module.f.d.mts +0 -27
  306. package/dev/module.f.d.mts +0 -4
  307. package/djs/tokenizer/module.f.d.mts +0 -17
  308. package/fsc/module.f.d.mts +0 -12
  309. package/fsm/module.f.d.mts +0 -21
  310. package/html/module.f.d.mts +0 -20
  311. package/json/module.f.d.mts +0 -41
  312. package/json/serializer/module.f.d.mts +0 -45
  313. package/json/tokenizer/module.f.d.mts +0 -17
  314. package/sha2/module.f.d.mts +0 -23
  315. package/text/ascii/module.f.d.mts +0 -73
  316. package/text/module.f.d.mts +0 -18
  317. package/text/sgr/module.f.d.mts +0 -14
  318. package/text/utf16/module.f.d.mts +0 -19
  319. package/text/utf8/module.f.d.mts +0 -15
  320. package/types/bigfloat/module.f.d.mts +0 -11
  321. package/types/btree/module.f.d.mts +0 -9
  322. package/types/byte_set/module.f.d.mts +0 -38
  323. package/types/list/module.f.d.mts +0 -117
  324. package/types/map/module.f.d.mts +0 -30
  325. package/types/nibble_set/module.f.d.mts +0 -26
  326. package/types/nullable/module.f.d.mts +0 -14
  327. package/types/number/module.f.d.mts +0 -13
  328. package/types/object/module.f.d.mts +0 -29
  329. package/types/range/module.f.d.mts +0 -11
  330. package/types/result/module.d.mts +0 -7
  331. package/types/string/module.f.d.mts +0 -15
  332. package/types/string_set/module.f.d.mts +0 -21
  333. /package/{com → out/com}/cpp/test.f.d.mts +0 -0
  334. /package/{com → out/com}/cpp/testlib.f.d.mts +0 -0
  335. /package/{com → out/com}/cs/test.f.d.mts +0 -0
  336. /package/{com → out/com}/cs/testlib.f.d.mts +0 -0
  337. /package/{com → out/com}/rust/test.f.d.mts +0 -0
  338. /package/{com → out/com}/rust/testlib.f.d.mts +0 -0
  339. /package/{com → out/com}/test/build.d.mts +0 -0
  340. /package/{com → out/com}/types/testlib.f.d.mts +0 -0
  341. /package/{commonjs → out/commonjs}/build/test.f.d.mts +0 -0
  342. /package/{commonjs → out/commonjs}/package/dependencies/test.f.d.mts +0 -0
  343. /package/{commonjs → out/commonjs}/package/test.f.d.mts +0 -0
  344. /package/{commonjs → out/commonjs}/path/test.f.d.mts +0 -0
  345. /package/{commonjs → out/commonjs}/test.d.mts +0 -0
  346. /package/{dev → out/dev}/index.d.mts +0 -0
  347. /package/{dev → out/dev}/module.d.mts +0 -0
  348. /package/{dev → out/dev}/test.d.mts +0 -0
  349. /package/{dev → out/dev}/test.f.d.mts +0 -0
  350. /package/{djs → out/djs}/parser/test.f.d.mts +0 -0
  351. /package/{djs → out/djs}/test.f.d.mts +0 -0
  352. /package/{djs → out/djs}/tokenizer/test.f.d.mts +0 -0
  353. /package/{fsc → out/fsc}/test.f.d.mts +0 -0
  354. /package/{fsm → out/fsm}/test.f.d.mts +0 -0
  355. /package/{html → out/html}/test.f.d.mts +0 -0
  356. /package/{issues → out/issues}/test.f.d.mts +0 -0
  357. /package/{js → out/js}/tokenizer/test.f.d.mts +0 -0
  358. /package/{json → out/json}/parser/test.f.d.mts +0 -0
  359. /package/{json → out/json}/serializer/test.f.d.mts +0 -0
  360. /package/{json → out/json}/test.f.d.mts +0 -0
  361. /package/{json → out/json}/tokenizer/test.f.d.mts +0 -0
  362. /package/{nanvm-lib → out/nanvm-lib}/tests/test.f.d.mts +0 -0
  363. /package/{nodejs → out/nodejs}/version/main.d.mts +0 -0
  364. /package/{nodejs → out/nodejs}/version/test.f.d.mts +0 -0
  365. /package/{prime_field → out/prime_field}/test.f.d.mts +0 -0
  366. /package/{secp → out/secp}/test.f.d.mts +0 -0
  367. /package/{sha2 → out/sha2}/test.f.d.mts +0 -0
  368. /package/{text → out/text}/ascii/test.f.d.mts +0 -0
  369. /package/{text → out/text}/test.f.d.mts +0 -0
  370. /package/{text → out/text}/utf16/test.f.d.mts +0 -0
  371. /package/{text → out/text}/utf8/test.f.d.mts +0 -0
  372. /package/{types → out/types}/array/test.f.d.mts +0 -0
  373. /package/{types → out/types}/bigfloat/test.f.d.mts +0 -0
  374. /package/{types → out/types}/bigint/test.f.d.mts +0 -0
  375. /package/{types → out/types}/btree/find/test.f.d.mts +0 -0
  376. /package/{types → out/types}/btree/remove/test.f.d.mts +0 -0
  377. /package/{types → out/types}/btree/set/test.f.d.mts +0 -0
  378. /package/{types → out/types}/btree/test.f.d.mts +0 -0
  379. /package/{types → out/types}/byte_set/test.f.d.mts +0 -0
  380. /package/{types → out/types}/function/compare/test.f.d.mts +0 -0
  381. /package/{types → out/types}/function/test.f.d.mts +0 -0
  382. /package/{types → out/types}/list/test.f.d.mts +0 -0
  383. /package/{types → out/types}/map/test.f.d.mts +0 -0
  384. /package/{types → out/types}/nibble_set/test.f.d.mts +0 -0
  385. /package/{types → out/types}/nullable/test.f.d.mts +0 -0
  386. /package/{types → out/types}/number/test.f.d.mts +0 -0
  387. /package/{types → out/types}/object/test.f.d.mts +0 -0
  388. /package/{types → out/types}/range/test.f.d.mts +0 -0
  389. /package/{types → out/types}/range_map/test.f.d.mts +0 -0
  390. /package/{types → out/types}/sorted_list/test.f.d.mts +0 -0
  391. /package/{types → out/types}/sorted_set/test.f.d.mts +0 -0
  392. /package/{types → out/types}/string/test.f.d.mts +0 -0
  393. /package/{types → out/types}/string_set/test.f.d.mts +0 -0
@@ -0,0 +1,172 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ import * as arrayT from '../types/array/module.f.mjs';
3
+ /**
4
+ * @typedef {{
5
+ * readonly f: (i: number) => number
6
+ * readonly length: number
7
+ * }} HashInput
8
+ */
9
+ /** @typedef {arrayT.Array8<number>} Hash8 */
10
+ /** @typedef {arrayT.Array16<number>} Array16 */
11
+ /** @type {(input: number) => (pos: number) => number} */
12
+ const appendOneWithZeros = input => pos => (input >> pos << pos) | (1 << pos);
13
+ /** @type {(input: number) => (pos: number) => number} */
14
+ const mod = a => b => (a % b + b) % b;
15
+ /** @type {(input: readonly number[]) => (bits: number) => HashInput} */
16
+ export const padding = input => bitsCount => {
17
+ const appendBlockIndex = (bitsCount / 32) | 0;
18
+ const length = (bitsCount + mod(447 - bitsCount)(512) + 65) / 32;
19
+ /** @type {(i: number) => number} */
20
+ const f = i => {
21
+ if (i < appendBlockIndex) {
22
+ return input[i];
23
+ }
24
+ if (i === appendBlockIndex) {
25
+ return appendBlockIndex >= input.length ? 0x8000_0000 : appendOneWithZeros(input[appendBlockIndex])(31 - bitsCount % 32);
26
+ }
27
+ if (i === length - 2) {
28
+ return (bitsCount / 0x1_0000_0000) | 0;
29
+ }
30
+ if (i === length - 1) {
31
+ return bitsCount % 0x1_0000_0000;
32
+ }
33
+ return 0;
34
+ };
35
+ return ({ f, length });
36
+ };
37
+ /** @type {(d: number) => (n: number) => number} */
38
+ const rotr = d => {
39
+ const r = 32 - d;
40
+ return n => n >>> d | n << r;
41
+ };
42
+ /** @type {(x: number) => (y: number) => (z: number) => number} */
43
+ const ch = x => y => z => x & y ^ ~x & z;
44
+ /** @type {(x: number) => (y: number) => (z: number) => number} */
45
+ const maj = x => y => z => x & y ^ x & z ^ y & z;
46
+ /** @type {(d: number) => (n: number) => number} */
47
+ const shr = d => n => n >>> d;
48
+ /** @type {(a: number) => (b: number) => (c: number) => (x: number) => number} */
49
+ const bigSigma = a => b => c => {
50
+ const ra = rotr(a);
51
+ const rb = rotr(b);
52
+ const rc = rotr(c);
53
+ return x => ra(x) ^ rb(x) ^ rc(x);
54
+ };
55
+ const bigSigma0 = bigSigma(2)(13)(22);
56
+ const bigSigma1 = bigSigma(6)(11)(25);
57
+ /** @type {(a: number) => (b: number) => (c: number) => (x: number) => number} */
58
+ const smallSigma = a => b => c => {
59
+ const ra = rotr(a);
60
+ const rb = rotr(b);
61
+ const sc = shr(c);
62
+ return x => ra(x) ^ rb(x) ^ sc(x);
63
+ };
64
+ const smallSigma0 = smallSigma(7)(18)(3);
65
+ const smallSigma1 = smallSigma(17)(19)(10);
66
+ /** @type {(a: arrayT.Array4<number>) => number} */
67
+ const wi = ([a0, a1, a2, a3]) => (smallSigma1(a0) + a1 + smallSigma0(a2) + a3) | 0;
68
+ /** @type {(w: Array16) => Array16} */
69
+ const nextW = ([w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, wA, wB, wC, wD, wE, wF]) => {
70
+ w0 = wi([wE, w9, w1, w0]);
71
+ w1 = wi([wF, wA, w2, w1]);
72
+ w2 = wi([w0, wB, w3, w2]);
73
+ w3 = wi([w1, wC, w4, w3]);
74
+ w4 = wi([w2, wD, w5, w4]);
75
+ w5 = wi([w3, wE, w6, w5]);
76
+ w6 = wi([w4, wF, w7, w6]);
77
+ w7 = wi([w5, w0, w8, w7]);
78
+ w8 = wi([w6, w1, w9, w8]);
79
+ w9 = wi([w7, w2, wA, w9]);
80
+ wA = wi([w8, w3, wB, wA]);
81
+ wB = wi([w9, w4, wC, wB]);
82
+ wC = wi([wA, w5, wD, wC]);
83
+ wD = wi([wB, w6, wE, wD]);
84
+ wE = wi([wC, w7, wF, wE]);
85
+ wF = wi([wD, w8, w0, wF]);
86
+ return [w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, wA, wB, wC, wD, wE, wF];
87
+ };
88
+ const k = [
89
+ [
90
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
91
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
92
+ ],
93
+ [
94
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
95
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
96
+ ],
97
+ [
98
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
99
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
100
+ ],
101
+ [
102
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
103
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
104
+ ],
105
+ ];
106
+ /** @type {(init: Hash8) => (data: Array16) => Hash8} */
107
+ const compress = ([a0, b0, c0, d0, e0, f0, g0, h0]) => data => {
108
+ let w = data;
109
+ let a = a0;
110
+ let b = b0;
111
+ let c = c0;
112
+ let d = d0;
113
+ let e = e0;
114
+ let f = f0;
115
+ let g = g0;
116
+ let h = h0;
117
+ let i = 0;
118
+ while (true) {
119
+ const ki = k[i];
120
+ for (let j = 0; j < 16; ++j) {
121
+ const t1 = h + bigSigma1(e) + ch(e)(f)(g) + ki[j] + w[j];
122
+ const t2 = bigSigma0(a) + maj(a)(b)(c);
123
+ h = g;
124
+ g = f;
125
+ f = e;
126
+ e = (d + t1) | 0;
127
+ d = c;
128
+ c = b;
129
+ b = a;
130
+ a = (t1 + t2) | 0;
131
+ }
132
+ if (i === 3) {
133
+ break;
134
+ }
135
+ ++i;
136
+ w = nextW(w);
137
+ }
138
+ return [
139
+ (a0 + a) | 0,
140
+ (b0 + b) | 0,
141
+ (c0 + c) | 0,
142
+ (d0 + d) | 0,
143
+ (e0 + e) | 0,
144
+ (f0 + f) | 0,
145
+ (g0 + g) | 0,
146
+ (h0 + h) | 0,
147
+ ];
148
+ };
149
+ /** @type {(init: Hash8) => (input: readonly number[]) => (bitsCount: number) => Hash8} */
150
+ const compute = init => input => bitsCount => {
151
+ const { f, length } = padding(input)(bitsCount);
152
+ let result = init;
153
+ const chunkCount = length / 16;
154
+ for (let i = 0; i < chunkCount; i++) {
155
+ const s = i * 16;
156
+ result = compress(result)([
157
+ f(s + 0), f(s + 1), f(s + 2), f(s + 3), f(s + 4), f(s + 5), f(s + 6), f(s + 7),
158
+ f(s + 8), f(s + 9), f(s + 10), f(s + 11), f(s + 12), f(s + 13), f(s + 14), f(s + 15)
159
+ ]);
160
+ }
161
+ return result;
162
+ };
163
+ /** @type {Hash8} */
164
+ const init256 = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19];
165
+ /** @type {(input: readonly number[]) => (bitsCount: number) => Hash8} */
166
+ export const computeSha256 = compute(init256);
167
+ /** @type {Hash8} */
168
+ const init224 = [0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4];
169
+ /** @type {(input: readonly number[]) => (bitsCount: number) => Hash8} */
170
+ export const computeSha224 = compute(init224);
171
+ export const compress256 = compress(init256);
172
+ export const compress224 = compress(init224);
@@ -0,0 +1,86 @@
1
+ import * as _ from './module.f.mjs';
2
+ import * as json from '../json/module.f.mjs';
3
+ import * as o from '../types/object/module.f.mjs';
4
+ const { sort } = o;
5
+ /** @type {(a: number) => number} */
6
+ const toU32 = x => (x + 0x1_0000_0000) % 0x1_0000_0000;
7
+ /** @type {(a: number) => string} */
8
+ const toHexString = x => toU32(x).toString(16).padStart(8, '0');
9
+ /** @type {(a: readonly json.Unknown[]) => string} */
10
+ const stringify = a => json.stringify(sort)(a);
11
+ // {
12
+ // const result = _.padding([])(0)
13
+ // console.log(result.map(toHexString))
14
+ // }
15
+ // {
16
+ // const result = _.padding([0x61626364, 0x65000000])(40)
17
+ // console.log(result.map(toHexString))
18
+ // }
19
+ // {
20
+ // const result = _.padding([0x11111110])(31)
21
+ // console.log(result.map(toHexString))
22
+ // }
23
+ // {
24
+ // const result = _.padding([0x11111110])(32)
25
+ // console.log(result.map(toHexString))
26
+ // }
27
+ export default {
28
+ empty: {
29
+ sha256: () => {
30
+ const hash = _.computeSha256([])(0);
31
+ const result = stringify(hash.map(toHexString));
32
+ if (result !== '["e3b0c442","98fc1c14","9afbf4c8","996fb924","27ae41e4","649b934c","a495991b","7852b855"]') {
33
+ throw result;
34
+ }
35
+ },
36
+ sha224: () => {
37
+ const hash = _.computeSha224([])(0);
38
+ const result = stringify(hash.map(toHexString));
39
+ if (result !== '["d14a028c","2a3a2bc9","476102bb","288234c4","15a2b01f","828ea62a","c5b3e42f","bdd387cb"]') {
40
+ throw result;
41
+ }
42
+ }
43
+ },
44
+ sha224compress: [
45
+ () => {
46
+ const hash = _.compress224([0x8000_0000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
47
+ const result = stringify(hash.map(toHexString));
48
+ if (result !== '["d14a028c","2a3a2bc9","476102bb","288234c4","15a2b01f","828ea62a","c5b3e42f","bdd387cb"]') {
49
+ throw result;
50
+ }
51
+ }
52
+ ],
53
+ sha256: [
54
+ () => {
55
+ //[0x68656C6C, 0x6F20776F, 0x726C6400] represents phrase 'hello world'
56
+ const hash = _.computeSha256([0x68656C6C, 0x6F20776F, 0x726C6400])(88);
57
+ const result = stringify(hash.map(toHexString));
58
+ if (result !== '["b94d27b9","934d3e08","a52e52d7","da7dabfa","c484efe3","7a5380ee","9088f7ac","e2efcde9"]') {
59
+ throw result;
60
+ }
61
+ },
62
+ () => {
63
+ //[0x68656C6C, 0x6F20776F, 0x726C6488] represents phrase 'hello world' with 1's at the end
64
+ const hash = _.computeSha256([0x68656C6C, 0x6F20776F, 0x726C64FF])(88);
65
+ const result = stringify(hash.map(toHexString));
66
+ if (result !== '["b94d27b9","934d3e08","a52e52d7","da7dabfa","c484efe3","7a5380ee","9088f7ac","e2efcde9"]') {
67
+ throw result;
68
+ }
69
+ },
70
+ () => {
71
+ const input = Array(8).fill(0x31313131);
72
+ const result = _.computeSha256(input)(256);
73
+ if (toU32(result[0]) !== 0x8a83665f) {
74
+ throw result[0];
75
+ }
76
+ },
77
+ () => {
78
+ const input = Array(16).fill(0x31313131);
79
+ const hash = _.computeSha256(input)(512);
80
+ const result = stringify(hash.map(toHexString));
81
+ if (result !== '["3138bb9b","c78df27c","473ecfd1","410f7bd4","5ebac1f5","9cf3ff9c","fe4db77a","ab7aedd3"]') {
82
+ throw result;
83
+ }
84
+ }
85
+ ]
86
+ };
@@ -0,0 +1,70 @@
1
+ /** @type {(s: string) => number} */
2
+ export const one: (s: string) => number;
3
+ /** @type {(s: string) => _range.Range} */
4
+ export const range: (s: string) => _range.Range;
5
+ export namespace ascii {
6
+ let backspace: number;
7
+ let ht: number;
8
+ let lf: number;
9
+ let ff: number;
10
+ let cr: number;
11
+ let space: number;
12
+ let exclamationMark: number;
13
+ let quotationMark: number;
14
+ let numberSign: number;
15
+ let dollarSign: number;
16
+ let percentSign: number;
17
+ let ampersand: number;
18
+ let apostrophe: number;
19
+ let leftParenthesis: number;
20
+ let rightParenthesis: number;
21
+ let asterisk: number;
22
+ let plusSign: number;
23
+ let comma: number;
24
+ let hyphenMinus: number;
25
+ let fullStop: number;
26
+ let solidus: number;
27
+ let digitRange: _range.Range;
28
+ let digit0: number;
29
+ let digit1: number;
30
+ let digit2: number;
31
+ let digit3: number;
32
+ let digit4: number;
33
+ let digit5: number;
34
+ let digit6: number;
35
+ let digit7: number;
36
+ let digit8: number;
37
+ let digit9: number;
38
+ let colon: number;
39
+ let semicolon: number;
40
+ let lessThanSign: number;
41
+ let equalsSign: number;
42
+ let greaterThanSign: number;
43
+ let questionMark: number;
44
+ let commercialAt: number;
45
+ let latinCapitalLetterRange: _range.Range;
46
+ let latinCapitalLetterA: number;
47
+ let latinCapitalLetterE: number;
48
+ let latinCapitalLetterF: number;
49
+ let leftSquareBracket: number;
50
+ let reverseSolidus: number;
51
+ let rightSquareBracket: number;
52
+ let circumflexAccent: number;
53
+ let lowLine: number;
54
+ let graveAccent: number;
55
+ let latinSmallLetterRange: _range.Range;
56
+ let latinSmallLetterA: number;
57
+ let latinSmallLetterB: number;
58
+ let latinSmallLetterE: number;
59
+ let latinSmallLetterF: number;
60
+ let latinSmallLetterN: number;
61
+ let latinSmallLetterR: number;
62
+ let latinSmallLetterT: number;
63
+ let latinSmallLetterU: number;
64
+ let latinSmallLetterZ: number;
65
+ let leftCurlyBracket: number;
66
+ let verticalLine: number;
67
+ let rightCurlyBracket: number;
68
+ let tilde: number;
69
+ }
70
+ import * as _range from '../../types/range/module.f.mjs';
@@ -0,0 +1,154 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ import * as _range from '../../types/range/module.f.mjs';
3
+ /** @type {(s: string) => (i: number) => number} */
4
+ const at = s => i => {
5
+ const r = s.codePointAt(i);
6
+ if (r === void 0) {
7
+ throw s;
8
+ }
9
+ return r;
10
+ };
11
+ /** @type {(s: string) => number} */
12
+ export const one = s => at(s)(0);
13
+ /** @type {(s: string) => _range.Range} */
14
+ export const range = s => {
15
+ const f = at(s);
16
+ const f0 = f(0);
17
+ if (s.length === 1) {
18
+ return [f0, f0];
19
+ }
20
+ return [f0, f(1)];
21
+ };
22
+ export const ascii = {
23
+ // 0x00..
24
+ /** @readonly 0x08 */
25
+ backspace: one('\b'),
26
+ /** @readonly 0x09 */
27
+ ht: one('\t'),
28
+ /** @readonly 0x0A */
29
+ lf: one('\n'),
30
+ /** @readonly 0x0C */
31
+ ff: one('\f'),
32
+ /** @readonly 0x0D */
33
+ cr: one('\r'),
34
+ // 0x20..
35
+ /** @readonly 0x20 */
36
+ space: one(' '),
37
+ /** @readonly 0x21 */
38
+ exclamationMark: one('!'),
39
+ /** @readonly 0x22 */
40
+ quotationMark: one('"'),
41
+ /** @readonly 0x23 */
42
+ numberSign: one('#'),
43
+ /** @readonly 0x24 */
44
+ dollarSign: one('$'),
45
+ /** @readonly 0x25 */
46
+ percentSign: one('%'),
47
+ /** @readonly 0x26 */
48
+ ampersand: one('&'),
49
+ /** @readonly 0x27 */
50
+ apostrophe: one("'"),
51
+ /** @readonly 0x28 */
52
+ leftParenthesis: one('('),
53
+ /** @readonly 0x29 */
54
+ rightParenthesis: one(')'),
55
+ /** @readonly 0x2A */
56
+ asterisk: one('*'),
57
+ /** @readonly 0x2B */
58
+ plusSign: one('+'),
59
+ /** @readonly 0x2C */
60
+ comma: one(','),
61
+ /** @readonly 0x2D */
62
+ hyphenMinus: one('-'),
63
+ /** @readonly 0x2E */
64
+ fullStop: one('.'),
65
+ /** @readonly 0x2F */
66
+ solidus: one('/'),
67
+ // 0x30..
68
+ /** @readonly 0x30..0x39 */
69
+ digitRange: range('09'),
70
+ /** @readonly 0x30 */
71
+ digit0: one('0'),
72
+ /** @readonly 0x31 */
73
+ digit1: one('1'),
74
+ /** @readonly 0x32 */
75
+ digit2: one('2'),
76
+ /** @readonly 0x33 */
77
+ digit3: one('3'),
78
+ /** @readonly 0x34 */
79
+ digit4: one('4'),
80
+ /** @readonly 0x35 */
81
+ digit5: one('5'),
82
+ /** @readonly 0x36 */
83
+ digit6: one('6'),
84
+ /** @readonly 0x37 */
85
+ digit7: one('7'),
86
+ /** @readonly 0x38 */
87
+ digit8: one('8'),
88
+ /** @readonly 0x39 */
89
+ digit9: one('9'),
90
+ /** @readonly 0x3A */
91
+ colon: one(':'),
92
+ /** @readonly 0x3B */
93
+ semicolon: one(';'),
94
+ /** @readonly 0x3C */
95
+ lessThanSign: one('<'),
96
+ /** @readonly 0x3D */
97
+ equalsSign: one('='),
98
+ /** @readonly 0x3E */
99
+ greaterThanSign: one('>'),
100
+ /** @readonly 0x3F */
101
+ questionMark: one('?'),
102
+ // 0x40..
103
+ /** @readonly 0x40 */
104
+ commercialAt: one('@'),
105
+ /** @readonly 0x41..0x5A */
106
+ latinCapitalLetterRange: range('AZ'),
107
+ /** @readonly 0x41 */
108
+ latinCapitalLetterA: one('A'),
109
+ /** @readonly 0x45 */
110
+ latinCapitalLetterE: one('E'),
111
+ /** @readonly 0x46 */
112
+ latinCapitalLetterF: one('F'),
113
+ /** @readonly 0x5B */
114
+ leftSquareBracket: one('['),
115
+ /** @readonly 0x5C */
116
+ reverseSolidus: one('\\'),
117
+ /** @readonly 0x5D */
118
+ rightSquareBracket: one(']'),
119
+ /** @readonly 0x5E */
120
+ circumflexAccent: one('^'),
121
+ /** @readonly 0x5F */
122
+ lowLine: one('_'),
123
+ // 0x60..
124
+ /** @readonly 0x60 */
125
+ graveAccent: one('`'),
126
+ /** @readonly 0x61..0x7A */
127
+ latinSmallLetterRange: range('az'),
128
+ /** @readonly 0x61 */
129
+ latinSmallLetterA: one('a'),
130
+ /** @readonly 0x62 */
131
+ latinSmallLetterB: one('b'),
132
+ /** @readonly 0x65 */
133
+ latinSmallLetterE: one('e'),
134
+ /** @readonly 0x66 */
135
+ latinSmallLetterF: one('f'),
136
+ /** @readonly 0x6E */
137
+ latinSmallLetterN: one('n'),
138
+ /** @readonly 0x72 */
139
+ latinSmallLetterR: one('r'),
140
+ /** @readonly 0x74 */
141
+ latinSmallLetterT: one('t'),
142
+ /** @readonly 0x75 */
143
+ latinSmallLetterU: one('u'),
144
+ /** @readonly 0x7A */
145
+ latinSmallLetterZ: one('z'),
146
+ /** @readonly 0x7B */
147
+ leftCurlyBracket: one('{'),
148
+ /** @readonly 0x7C */
149
+ verticalLine: one('|'),
150
+ /** @readonly 0x7D */
151
+ rightCurlyBracket: one('}'),
152
+ /** @readonly 0x7E */
153
+ tilde: one('~'),
154
+ };
@@ -0,0 +1,14 @@
1
+ import * as _ from './module.f.mjs';
2
+ const { range } = _;
3
+ import * as json from '../../json/module.f.mjs';
4
+ import * as o from '../../types/object/module.f.mjs';
5
+ const { sort } = o;
6
+ const stringify = json.stringify(sort);
7
+ export default {
8
+ range: () => {
9
+ const r = stringify(range("A"));
10
+ if (r !== '[65,65]') {
11
+ throw r;
12
+ }
13
+ }
14
+ };
@@ -0,0 +1,13 @@
1
+ /** @typedef {ItemThunk|ItemArray} Block */
2
+ /** @typedef {readonly Item[]} ItemArray */
3
+ /** @typedef {() => list.List<Item>} ItemThunk */
4
+ /** @typedef {string|ItemArray|ItemThunk} Item */
5
+ /** @type {(indent: string) => (text: Block) => list.List<string>} */
6
+ export const flat: (indent: string) => (text: Block) => list.List<string>;
7
+ /** @type {(type: string) => (name: string) => (body: Block) => Block} */
8
+ export const curly: (type: string) => (name: string) => (body: Block) => Block;
9
+ export type Block = ItemThunk | ItemArray;
10
+ export type ItemArray = readonly Item[];
11
+ export type ItemThunk = () => list.List<Item>;
12
+ export type Item = string | ItemArray | ItemThunk;
13
+ import * as list from '../types/list/module.f.mjs';
@@ -0,0 +1,19 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ import * as list from '../types/list/module.f.mjs';
3
+ const { flatMap } = list;
4
+ /** @typedef {ItemThunk|ItemArray} Block */
5
+ /** @typedef {readonly Item[]} ItemArray */
6
+ /** @typedef {() => list.List<Item>} ItemThunk */
7
+ /** @typedef {string|ItemArray|ItemThunk} Item */
8
+ /** @type {(indent: string) => (text: Block) => list.List<string>} */
9
+ export const flat = indent => {
10
+ /** @type {(prefix: string) => (text: Block) => list.List<string>} */
11
+ const f = prefix => {
12
+ /** @type {(item: Item) => list.List<string>} */
13
+ const g = item => typeof (item) === 'string' ? [`${prefix}${item}`] : f(`${prefix}${indent}`)(item);
14
+ return flatMap(g);
15
+ };
16
+ return f('');
17
+ };
18
+ /** @type {(type: string) => (name: string) => (body: Block) => Block} */
19
+ export const curly = type => name => body => [`${type} ${name}`, '{', body, '}'];
@@ -0,0 +1,12 @@
1
+ /**
2
+ * https://en.wikipedia.org/wiki/ANSI_escape_code#SGR
3
+ *
4
+ * @type {(c: number) => string}
5
+ */
6
+ export const sgr: (c: number) => string;
7
+ export namespace codes {
8
+ let reset: string;
9
+ let bold: string;
10
+ let fgRed: string;
11
+ let fgGreen: string;
12
+ }
@@ -0,0 +1,17 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ /**
3
+ * https://en.wikipedia.org/wiki/ANSI_escape_code#SGR
4
+ *
5
+ * @type {(c: number) => string}
6
+ */
7
+ export const sgr = c => `\x1b[${c.toString()}m`;
8
+ export const codes = {
9
+ /** @readonly */
10
+ reset: sgr(0),
11
+ /** @readonly */
12
+ bold: sgr(1),
13
+ /** @readonly */
14
+ fgRed: sgr(31),
15
+ /** @readonly */
16
+ fgGreen: sgr(32),
17
+ };
@@ -0,0 +1,19 @@
1
+ import * as _ from './module.f.mjs';
2
+ import * as string from '../types/string/module.f.mjs';
3
+ const { join } = string;
4
+ export default () => {
5
+ /** @type {_.Block} */
6
+ const text = [
7
+ 'a',
8
+ 'b',
9
+ () => [
10
+ 'c',
11
+ () => ['d'],
12
+ ],
13
+ 'e',
14
+ ];
15
+ const result = join('\n')(_.flat(':')(text));
16
+ if (result !== 'a\nb\n:c\n::d\ne') {
17
+ throw result;
18
+ }
19
+ };
@@ -0,0 +1,12 @@
1
+ export const fromCodePointList: (input: list.List<number>) => list.Thunk<number>;
2
+ /** @type {(input: list.List<u16>) => list.List<i32>} */
3
+ export const toCodePointList: (input: list.List<u16>) => list.List<i32>;
4
+ /** @type {(s: string) => list.List<u16>} */
5
+ export const stringToList: (s: string) => list.List<u16>;
6
+ /** @type {(input: list.List<u16>) => string} */
7
+ export const listToString: (input: list.List<u16>) => string;
8
+ export type WordOrEof = u16 | null;
9
+ export type Utf16State = number | null;
10
+ export type u16 = number;
11
+ export type i32 = number;
12
+ import * as list from '../../types/list/module.f.mjs';
@@ -0,0 +1,86 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ import * as list from '../../types/list/module.f.mjs';
3
+ import * as operator from '../../types/function/operator/module.f.mjs';
4
+ import * as range from '../../types/range/module.f.mjs';
5
+ const { contains } = range;
6
+ import * as f from '../../types/function/module.f.mjs';
7
+ const { fn } = f;
8
+ const { map, flat, stateScan, reduce, flatMap, empty } = list;
9
+ /** @typedef {u16|null} WordOrEof */
10
+ /** @typedef {number|null} Utf16State */
11
+ /** @typedef {number} u16 */
12
+ /** @typedef {number} i32 */
13
+ const lowBmp = contains([0x0000, 0xd7ff]);
14
+ const highBmp = contains([0xe000, 0xffff]);
15
+ /** @type {(codePoint: i32) => boolean} */
16
+ const isBmpCodePoint = codePoint => lowBmp(codePoint) || highBmp(codePoint);
17
+ /** @type {(codePoint: i32) => boolean} */
18
+ const isHighSurrogate = contains([0xd800, 0xdbff]);
19
+ /** @type {(codePoint: i32) => boolean} */
20
+ const isLowSurrogate = contains([0xdc00, 0xdfff]);
21
+ const errorMask = 0b1000_0000_0000_0000_0000_0000_0000_0000;
22
+ /** @type {(a: i32) => boolean} */
23
+ const isSupplementaryPlane = contains([0x01_0000, 0x10_ffff]);
24
+ /** @type {(input: i32) => list.List<u16>} */
25
+ const codePointToUtf16 = codePoint => {
26
+ if (isBmpCodePoint(codePoint)) {
27
+ return [codePoint];
28
+ }
29
+ if (isSupplementaryPlane(codePoint)) {
30
+ const n = codePoint - 0x1_0000;
31
+ const high = (n >> 10) + 0xd800;
32
+ const low = (n & 0b0011_1111_1111) + 0xdc00;
33
+ return [high, low];
34
+ }
35
+ return [codePoint & 0xffff];
36
+ };
37
+ export const fromCodePointList = flatMap(codePointToUtf16);
38
+ const u16 = contains([0x0000, 0xFFFF]);
39
+ /** @type {operator.StateScan<u16, Utf16State, list.List<i32>>} */
40
+ const utf16ByteToCodePointOp = state => word => {
41
+ if (!u16(word)) {
42
+ return [[0xffffffff], state];
43
+ }
44
+ if (state === null) {
45
+ if (isBmpCodePoint(word)) {
46
+ return [[word], null];
47
+ }
48
+ if (isHighSurrogate(word)) {
49
+ return [[], word];
50
+ }
51
+ return [[word | errorMask], null];
52
+ }
53
+ if (isLowSurrogate(word)) {
54
+ const high = state - 0xd800;
55
+ const low = word - 0xdc00;
56
+ return [[(high << 10) + low + 0x10000], null];
57
+ }
58
+ if (isBmpCodePoint(word)) {
59
+ return [[state | errorMask, word], null];
60
+ }
61
+ if (isHighSurrogate(word)) {
62
+ return [[state | errorMask], word];
63
+ }
64
+ return [[state | errorMask, word | errorMask], null];
65
+ };
66
+ /** @type {(state: Utf16State) => readonly[list.List<i32>, Utf16State]} */
67
+ const utf16EofToCodePointOp = state => [state === null ? empty : [state | errorMask], null];
68
+ /** @type {operator.StateScan<WordOrEof, Utf16State, list.List<i32>>} */
69
+ const utf16ByteOrEofToCodePointOp = state => input => input === null ? utf16EofToCodePointOp(state) : utf16ByteToCodePointOp(state)(input);
70
+ /** @type {list.List<WordOrEof>} */
71
+ const eofList = [null];
72
+ /** @type {(input: list.List<u16>) => list.List<i32>} */
73
+ export const toCodePointList = input => flat(stateScan(utf16ByteOrEofToCodePointOp)(null)(flat([input, eofList])));
74
+ /** @type {(s: string) => list.List<u16>} */
75
+ export const stringToList = s => {
76
+ /** @type {(i: number) => list.Result<number>} */
77
+ const at = i => {
78
+ const first = s.charCodeAt(i);
79
+ return isNaN(first) ? empty : { first, tail: () => at(i + 1) };
80
+ };
81
+ return at(0);
82
+ };
83
+ /** @type {(input: list.List<u16>) => string} */
84
+ export const listToString = fn(map(String.fromCharCode))
85
+ .then(reduce(operator.concat)(''))
86
+ .result;