functionalscript 0.2.6 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (428) hide show
  1. package/.github/workflows/ci.yml +20 -4
  2. package/CHANGELOG.md +5 -0
  3. package/com/cpp/{module.f.mjs → module.f.ts} +65 -44
  4. package/com/cpp/{test.f.mjs → test.f.ts} +1 -1
  5. package/com/cpp/testlib.f.ts +8 -0
  6. package/com/cs/{module.f.mjs → module.f.ts} +47 -38
  7. package/com/cs/{test.f.mjs → test.f.ts} +2 -2
  8. package/com/cs/testlib.f.ts +8 -0
  9. package/com/rust/module.f.ts +287 -0
  10. package/com/rust/{test.f.mjs → test.f.ts} +1 -1
  11. package/com/rust/testlib.f.ts +8 -0
  12. package/com/test/{build.f.mjs → build.f.ts} +47 -45
  13. package/com/test/{build.mjs → build.ts} +7 -6
  14. package/com/types/module.f.ts +62 -0
  15. package/com/types/{testlib.f.mjs → testlib.f.ts} +2 -3
  16. package/commonjs/build/module.f.ts +100 -0
  17. package/commonjs/build/{test.f.mjs → test.f.ts} +21 -17
  18. package/commonjs/module/function/module.f.ts +13 -0
  19. package/commonjs/module/module.f.ts +41 -0
  20. package/commonjs/module.f.ts +7 -0
  21. package/commonjs/{module.mjs → module.ts} +12 -9
  22. package/commonjs/package/dependencies/module.f.ts +22 -0
  23. package/commonjs/package/dependencies/{test.f.mjs → test.f.ts} +1 -1
  24. package/commonjs/package/module.f.ts +31 -0
  25. package/commonjs/package/{test.f.mjs → test.f.ts} +1 -1
  26. package/commonjs/path/{module.f.mjs → module.f.ts} +72 -67
  27. package/commonjs/path/{test.f.mjs → test.f.ts} +25 -19
  28. package/commonjs/{test.mjs → test.ts} +5 -4
  29. package/crypto/prime_field/{module.f.mjs → module.f.ts} +40 -37
  30. package/crypto/prime_field/{test.f.mjs → test.f.ts} +7 -5
  31. package/crypto/secp/{module.f.mjs → module.f.ts} +44 -44
  32. package/crypto/secp/{test.f.mjs → test.f.ts} +16 -11
  33. package/crypto/sha2/{module.f.mjs → module.f.ts} +61 -46
  34. package/crypto/sha2/{test.f.mjs → test.f.ts} +12 -9
  35. package/deno.json +71 -0
  36. package/dev/README.md +8 -0
  37. package/dev/index.ts +3 -0
  38. package/dev/{module.f.mjs → module.f.ts} +0 -2
  39. package/dev/{module.mjs → module.ts} +66 -61
  40. package/dev/test/{module.f.mjs → module.f.ts} +57 -70
  41. package/dev/{test.f.mjs → test.f.ts} +7 -5
  42. package/dev/test.ts +53 -0
  43. package/djs/{module.f.mjs → module.f.ts} +31 -31
  44. package/djs/parser/{module.f.mjs → module.f.ts} +190 -182
  45. package/djs/parser/{test.f.mjs → test.f.ts} +173 -150
  46. package/djs/serializer/module.f.ts +90 -0
  47. package/djs/{test.f.mjs → test.f.ts} +4 -4
  48. package/djs/tokenizer/{module.f.mjs → module.f.ts} +35 -42
  49. package/djs/tokenizer/{test.f.mjs → test.f.ts} +9 -8
  50. package/fsc/{module.f.mjs → module.f.ts} +41 -44
  51. package/fsc/{test.f.mjs → test.f.ts} +8 -6
  52. package/fsm/module.f.ts +107 -0
  53. package/fsm/{test.f.mjs → test.f.ts} +10 -9
  54. package/html/module.f.ts +108 -0
  55. package/html/{test.f.mjs → test.f.ts} +10 -7
  56. package/issues/lang/3110-function.md +25 -1
  57. package/issues/{test.f.mjs → test.f.ts} +3 -2
  58. package/js/tokenizer/module.f.ts +882 -0
  59. package/js/tokenizer/{test.f.mjs → test.f.ts} +11 -10
  60. package/json/module.f.ts +94 -0
  61. package/json/parser/{module.f.mjs → module.f.ts} +113 -109
  62. package/json/parser/{test.f.mjs → test.f.ts} +10 -9
  63. package/json/serializer/module.f.ts +70 -0
  64. package/json/serializer/{test.f.mjs → test.f.ts} +3 -3
  65. package/json/{test.f.mjs → test.f.ts} +3 -3
  66. package/json/tokenizer/{module.f.mjs → module.f.ts} +29 -36
  67. package/json/tokenizer/{test.f.mjs → test.f.ts} +9 -8
  68. package/nanvm-lib/src/extension.rs +15 -4
  69. package/nanvm-lib/src/interface.rs +7 -10
  70. package/nanvm-lib/src/lib.rs +3 -3
  71. package/nanvm-lib/src/naive.rs +10 -3
  72. package/nanvm-lib/src/nanenum.rs +5 -1
  73. package/nanvm-lib/tests/{test.f.mjs → test.f.ts} +7 -6
  74. package/nodejs/version/{main.mjs → main.ts} +1 -1
  75. package/nodejs/version/module.f.ts +42 -0
  76. package/nodejs/version/{test.f.mjs → test.f.ts} +11 -12
  77. package/package.json +9 -9
  78. package/text/ascii/{module.f.mjs → module.f.ts} +10 -8
  79. package/text/ascii/{test.f.mjs → test.f.ts} +4 -4
  80. package/text/module.f.ts +30 -0
  81. package/text/sgr/{module.f.mjs → module.f.ts} +3 -5
  82. package/text/{test.f.mjs → test.f.ts} +5 -4
  83. package/text/utf16/module.f.ts +108 -0
  84. package/text/utf16/{test.f.mjs → test.f.ts} +7 -6
  85. package/text/utf8/{module.f.mjs → module.f.ts} +29 -23
  86. package/text/utf8/{test.f.mjs → test.f.ts} +4 -4
  87. package/tsconfig.json +4 -1
  88. package/types/array/module.f.ts +89 -0
  89. package/types/array/{test.f.mjs → test.f.ts} +3 -3
  90. package/types/bigfloat/{module.f.mjs → module.f.ts} +25 -20
  91. package/types/bigfloat/{test.f.mjs → test.f.ts} +1 -1
  92. package/types/bigint/{module.f.mjs → module.f.ts} +29 -28
  93. package/types/bigint/{test.f.mjs → test.f.ts} +2 -2
  94. package/types/bit_vec/{module.f.mjs → module.f.ts} +16 -37
  95. package/types/bit_vec/{test.f.mjs → test.f.ts} +1 -1
  96. package/types/btree/find/module.f.ts +92 -0
  97. package/types/btree/find/{test.f.mjs → test.f.ts} +20 -16
  98. package/types/btree/{module.f.mjs → module.f.ts} +9 -9
  99. package/types/btree/remove/{module.f.mjs → module.f.ts} +43 -53
  100. package/types/btree/remove/{test.f.mjs → test.f.ts} +19 -15
  101. package/types/btree/set/{module.f.mjs → module.f.ts} +17 -20
  102. package/types/btree/set/{test.f.mjs → test.f.ts} +96 -66
  103. package/types/btree/{test.f.mjs → test.f.ts} +34 -26
  104. package/types/btree/types/module.f.ts +27 -0
  105. package/types/byte_set/module.f.ts +70 -0
  106. package/types/byte_set/{test.f.mjs → test.f.ts} +8 -7
  107. package/types/function/compare/module.f.ts +26 -0
  108. package/types/function/compare/{test.f.mjs → test.f.ts} +1 -1
  109. package/types/function/module.f.ts +43 -0
  110. package/types/function/operator/module.f.ts +63 -0
  111. package/types/function/test.f.ts +20 -0
  112. package/types/list/module.f.ts +345 -0
  113. package/types/list/{test.f.mjs → test.f.ts} +30 -24
  114. package/types/map/module.f.ts +65 -0
  115. package/types/map/{test.f.mjs → test.f.ts} +6 -5
  116. package/types/nibble_set/module.f.ts +34 -0
  117. package/types/nibble_set/{test.f.mjs → test.f.ts} +3 -3
  118. package/types/nullable/module.f.ts +9 -0
  119. package/types/nullable/{test.f.mjs → test.f.ts} +2 -2
  120. package/types/number/module.f.ts +16 -0
  121. package/types/number/{test.f.mjs → test.f.ts} +7 -5
  122. package/types/object/module.f.ts +30 -0
  123. package/types/object/{test.f.mjs → test.f.ts} +2 -2
  124. package/types/range/module.f.ts +10 -0
  125. package/types/range/{test.f.mjs → test.f.ts} +1 -1
  126. package/types/range_map/module.f.ts +70 -0
  127. package/types/range_map/{test.f.mjs → test.f.ts} +82 -57
  128. package/types/result/module.f.ts +20 -0
  129. package/types/result/{module.mjs → module.ts} +4 -3
  130. package/types/sorted_list/module.f.ts +83 -0
  131. package/types/sorted_list/{test.f.mjs → test.f.ts} +14 -12
  132. package/types/sorted_set/module.f.ts +36 -0
  133. package/types/sorted_set/{test.f.mjs → test.f.ts} +14 -12
  134. package/types/string/module.f.ts +24 -0
  135. package/types/string/{test.f.mjs → test.f.ts} +2 -2
  136. package/types/string_set/module.f.ts +37 -0
  137. package/types/string_set/{test.f.mjs → test.f.ts} +2 -2
  138. package/com/cpp/testlib.f.mjs +0 -8
  139. package/com/cs/testlib.f.mjs +0 -8
  140. package/com/rust/module.f.mjs +0 -272
  141. package/com/rust/testlib.f.mjs +0 -8
  142. package/com/types/module.f.mjs +0 -67
  143. package/commonjs/build/module.f.mjs +0 -100
  144. package/commonjs/module/function/module.f.mjs +0 -21
  145. package/commonjs/module/module.f.mjs +0 -53
  146. package/commonjs/module.f.mjs +0 -11
  147. package/commonjs/package/dependencies/module.f.mjs +0 -22
  148. package/commonjs/package/module.f.mjs +0 -36
  149. package/dev/index.mjs +0 -3
  150. package/dev/test.mjs +0 -60
  151. package/fsm/module.f.mjs +0 -99
  152. package/html/module.f.mjs +0 -102
  153. package/js/tokenizer/module.f.mjs +0 -872
  154. package/json/module.f.mjs +0 -89
  155. package/json/serializer/module.f.mjs +0 -87
  156. package/jsr.json +0 -66
  157. package/nodejs/version/module.f.mjs +0 -47
  158. package/out/com/cpp/module.f.d.mts +0 -7
  159. package/out/com/cpp/module.f.mjs +0 -130
  160. package/out/com/cpp/test.f.d.mts +0 -2
  161. package/out/com/cpp/test.f.mjs +0 -40
  162. package/out/com/cpp/testlib.f.d.mts +0 -2
  163. package/out/com/cpp/testlib.f.mjs +0 -7
  164. package/out/com/cs/module.f.d.mts +0 -7
  165. package/out/com/cs/module.f.mjs +0 -104
  166. package/out/com/cs/test.f.d.mts +0 -2
  167. package/out/com/cs/test.f.mjs +0 -43
  168. package/out/com/cs/testlib.f.d.mts +0 -2
  169. package/out/com/cs/testlib.f.mjs +0 -7
  170. package/out/com/rust/module.f.d.mts +0 -23
  171. package/out/com/rust/module.f.mjs +0 -224
  172. package/out/com/rust/test.f.d.mts +0 -2
  173. package/out/com/rust/test.f.mjs +0 -123
  174. package/out/com/rust/testlib.f.d.mts +0 -2
  175. package/out/com/rust/testlib.f.mjs +0 -7
  176. package/out/com/test/build.d.mts +0 -1
  177. package/out/com/test/build.f.d.mts +0 -26
  178. package/out/com/test/build.f.mjs +0 -98
  179. package/out/com/test/build.mjs +0 -40
  180. package/out/com/types/module.f.d.mts +0 -23
  181. package/out/com/types/module.f.mjs +0 -51
  182. package/out/com/types/testlib.f.d.mts +0 -44
  183. package/out/com/types/testlib.f.mjs +0 -30
  184. package/out/commonjs/build/module.f.d.mts +0 -20
  185. package/out/commonjs/build/module.f.mjs +0 -107
  186. package/out/commonjs/build/test.f.d.mts +0 -3
  187. package/out/commonjs/build/test.f.mjs +0 -102
  188. package/out/commonjs/module/function/module.f.d.mts +0 -5
  189. package/out/commonjs/module/function/module.f.mjs +0 -15
  190. package/out/commonjs/module/module.f.d.mts +0 -52
  191. package/out/commonjs/module/module.f.mjs +0 -48
  192. package/out/commonjs/module.d.mts +0 -3
  193. package/out/commonjs/module.f.d.mts +0 -2
  194. package/out/commonjs/module.f.mjs +0 -10
  195. package/out/commonjs/module.mjs +0 -26
  196. package/out/commonjs/package/dependencies/module.f.d.mts +0 -6
  197. package/out/commonjs/package/dependencies/module.f.mjs +0 -21
  198. package/out/commonjs/package/dependencies/test.f.d.mts +0 -2
  199. package/out/commonjs/package/dependencies/test.f.mjs +0 -15
  200. package/out/commonjs/package/module.f.d.mts +0 -21
  201. package/out/commonjs/package/module.f.mjs +0 -40
  202. package/out/commonjs/package/test.f.d.mts +0 -2
  203. package/out/commonjs/package/test.f.mjs +0 -27
  204. package/out/commonjs/path/module.f.d.mts +0 -60
  205. package/out/commonjs/path/module.f.mjs +0 -171
  206. package/out/commonjs/path/test.f.d.mts +0 -25
  207. package/out/commonjs/path/test.f.mjs +0 -231
  208. package/out/commonjs/test.d.mts +0 -8
  209. package/out/commonjs/test.mjs +0 -87
  210. package/out/crypto/prime_field/module.f.d.mts +0 -67
  211. package/out/crypto/prime_field/module.f.mjs +0 -110
  212. package/out/crypto/prime_field/test.f.d.mts +0 -13
  213. package/out/crypto/prime_field/test.f.mjs +0 -152
  214. package/out/crypto/secp/module.f.d.mts +0 -110
  215. package/out/crypto/secp/module.f.mjs +0 -173
  216. package/out/crypto/secp/test.f.d.mts +0 -5
  217. package/out/crypto/secp/test.f.mjs +0 -78
  218. package/out/crypto/sha2/module.f.d.mts +0 -15
  219. package/out/crypto/sha2/module.f.mjs +0 -172
  220. package/out/crypto/sha2/test.f.d.mts +0 -10
  221. package/out/crypto/sha2/test.f.mjs +0 -86
  222. package/out/dev/index.d.mts +0 -1
  223. package/out/dev/index.mjs +0 -2
  224. package/out/dev/module.d.mts +0 -26
  225. package/out/dev/module.f.d.mts +0 -1
  226. package/out/dev/module.f.mjs +0 -2
  227. package/out/dev/module.mjs +0 -167
  228. package/out/dev/test/module.f.d.mts +0 -25
  229. package/out/dev/test/module.f.mjs +0 -134
  230. package/out/dev/test.d.mts +0 -3
  231. package/out/dev/test.f.d.mts +0 -9
  232. package/out/dev/test.f.mjs +0 -58
  233. package/out/dev/test.mjs +0 -52
  234. package/out/djs/module.f.d.mts +0 -20
  235. package/out/djs/module.f.mjs +0 -79
  236. package/out/djs/parser/module.f.d.mts +0 -56
  237. package/out/djs/parser/module.f.mjs +0 -448
  238. package/out/djs/parser/test.f.d.mts +0 -13
  239. package/out/djs/parser/test.f.mjs +0 -569
  240. package/out/djs/test.f.d.mts +0 -12
  241. package/out/djs/test.f.mjs +0 -84
  242. package/out/djs/tokenizer/module.f.d.mts +0 -13
  243. package/out/djs/tokenizer/module.f.mjs +0 -91
  244. package/out/djs/tokenizer/test.f.d.mts +0 -7
  245. package/out/djs/tokenizer/test.f.mjs +0 -530
  246. package/out/fsc/module.f.d.mts +0 -7
  247. package/out/fsc/module.f.mjs +0 -105
  248. package/out/fsc/test.f.d.mts +0 -4
  249. package/out/fsc/test.f.mjs +0 -19
  250. package/out/fsm/module.f.d.mts +0 -14
  251. package/out/fsm/module.f.mjs +0 -80
  252. package/out/fsm/test.f.d.mts +0 -5
  253. package/out/fsm/test.f.mjs +0 -138
  254. package/out/html/module.f.d.mts +0 -17
  255. package/out/html/module.f.mjs +0 -80
  256. package/out/html/test.f.d.mts +0 -10
  257. package/out/html/test.f.mjs +0 -45
  258. package/out/issues/test.f.d.mts +0 -16
  259. package/out/issues/test.f.mjs +0 -66
  260. package/out/js/tokenizer/module.f.d.mts +0 -163
  261. package/out/js/tokenizer/module.f.mjs +0 -729
  262. package/out/js/tokenizer/test.f.d.mts +0 -9
  263. package/out/js/tokenizer/test.f.mjs +0 -906
  264. package/out/json/module.f.d.mts +0 -33
  265. package/out/json/module.f.mjs +0 -89
  266. package/out/json/parser/module.f.d.mts +0 -32
  267. package/out/json/parser/module.f.mjs +0 -224
  268. package/out/json/parser/test.f.d.mts +0 -5
  269. package/out/json/parser/test.f.mjs +0 -329
  270. package/out/json/serializer/module.f.d.mts +0 -36
  271. package/out/json/serializer/module.f.mjs +0 -67
  272. package/out/json/serializer/test.f.d.mts +0 -8
  273. package/out/json/serializer/test.f.mjs +0 -87
  274. package/out/json/test.f.d.mts +0 -8
  275. package/out/json/test.f.mjs +0 -61
  276. package/out/json/tokenizer/module.f.d.mts +0 -13
  277. package/out/json/tokenizer/module.f.mjs +0 -78
  278. package/out/json/tokenizer/test.f.d.mts +0 -6
  279. package/out/json/tokenizer/test.f.mjs +0 -420
  280. package/out/nanvm-lib/tests/test.f.d.mts +0 -36
  281. package/out/nanvm-lib/tests/test.f.mjs +0 -87
  282. package/out/nodejs/version/main.d.mts +0 -1
  283. package/out/nodejs/version/main.mjs +0 -3
  284. package/out/nodejs/version/module.f.d.mts +0 -12
  285. package/out/nodejs/version/module.f.mjs +0 -34
  286. package/out/nodejs/version/test.f.d.mts +0 -2
  287. package/out/nodejs/version/test.f.mjs +0 -97
  288. package/out/text/ascii/module.f.d.mts +0 -70
  289. package/out/text/ascii/module.f.mjs +0 -154
  290. package/out/text/ascii/test.f.d.mts +0 -4
  291. package/out/text/ascii/test.f.mjs +0 -14
  292. package/out/text/module.f.d.mts +0 -13
  293. package/out/text/module.f.mjs +0 -19
  294. package/out/text/sgr/module.f.d.mts +0 -12
  295. package/out/text/sgr/module.f.mjs +0 -17
  296. package/out/text/test.f.d.mts +0 -2
  297. package/out/text/test.f.mjs +0 -19
  298. package/out/text/utf16/module.f.d.mts +0 -12
  299. package/out/text/utf16/module.f.mjs +0 -86
  300. package/out/text/utf16/test.f.d.mts +0 -6
  301. package/out/text/utf16/test.f.mjs +0 -145
  302. package/out/text/utf8/module.f.d.mts +0 -10
  303. package/out/text/utf8/module.f.mjs +0 -126
  304. package/out/text/utf8/test.f.d.mts +0 -6
  305. package/out/text/utf8/test.f.mjs +0 -175
  306. package/out/types/array/module.f.d.mts +0 -31
  307. package/out/types/array/module.f.mjs +0 -95
  308. package/out/types/array/test.f.d.mts +0 -10
  309. package/out/types/array/test.f.mjs +0 -116
  310. package/out/types/bigfloat/module.f.d.mts +0 -6
  311. package/out/types/bigfloat/module.f.mjs +0 -77
  312. package/out/types/bigfloat/test.f.d.mts +0 -6
  313. package/out/types/bigfloat/test.f.mjs +0 -349
  314. package/out/types/bigint/module.f.d.mts +0 -29
  315. package/out/types/bigint/module.f.mjs +0 -114
  316. package/out/types/bigint/test.f.d.mts +0 -16
  317. package/out/types/bigint/test.f.mjs +0 -199
  318. package/out/types/bit_vec/module.f.d.mts +0 -158
  319. package/out/types/bit_vec/module.f.mjs +0 -194
  320. package/out/types/bit_vec/test.f.d.mts +0 -23
  321. package/out/types/bit_vec/test.f.mjs +0 -210
  322. package/out/types/btree/find/module.f.d.mts +0 -36
  323. package/out/types/btree/find/module.f.mjs +0 -137
  324. package/out/types/btree/find/test.f.d.mts +0 -2
  325. package/out/types/btree/find/test.f.mjs +0 -156
  326. package/out/types/btree/module.f.d.mts +0 -5
  327. package/out/types/btree/module.f.mjs +0 -34
  328. package/out/types/btree/remove/module.f.d.mts +0 -14
  329. package/out/types/btree/remove/module.f.mjs +0 -209
  330. package/out/types/btree/remove/test.f.d.mts +0 -7
  331. package/out/types/btree/remove/test.f.mjs +0 -638
  332. package/out/types/btree/set/module.f.d.mts +0 -5
  333. package/out/types/btree/set/module.f.mjs +0 -114
  334. package/out/types/btree/set/test.f.d.mts +0 -2
  335. package/out/types/btree/set/test.f.mjs +0 -390
  336. package/out/types/btree/test.f.d.mts +0 -13
  337. package/out/types/btree/test.f.mjs +0 -83
  338. package/out/types/btree/types/module.f.d.mts +0 -14
  339. package/out/types/btree/types/module.f.mjs +0 -50
  340. package/out/types/byte_set/module.f.d.mts +0 -25
  341. package/out/types/byte_set/module.f.mjs +0 -42
  342. package/out/types/byte_set/test.f.d.mts +0 -13
  343. package/out/types/byte_set/test.f.mjs +0 -123
  344. package/out/types/function/compare/module.f.d.mts +0 -23
  345. package/out/types/function/compare/module.f.mjs +0 -22
  346. package/out/types/function/compare/test.f.d.mts +0 -2
  347. package/out/types/function/compare/test.f.mjs +0 -8
  348. package/out/types/function/module.f.d.mts +0 -51
  349. package/out/types/function/module.f.mjs +0 -44
  350. package/out/types/function/operator/module.f.d.mts +0 -60
  351. package/out/types/function/operator/module.f.mjs +0 -60
  352. package/out/types/function/test.f.d.mts +0 -2
  353. package/out/types/function/test.f.mjs +0 -15
  354. package/out/types/list/module.f.d.mts +0 -82
  355. package/out/types/list/module.f.mjs +0 -269
  356. package/out/types/list/test.f.d.mts +0 -38
  357. package/out/types/list/test.f.mjs +0 -401
  358. package/out/types/map/module.f.d.mts +0 -21
  359. package/out/types/map/module.f.mjs +0 -54
  360. package/out/types/map/test.f.d.mts +0 -5
  361. package/out/types/map/test.f.mjs +0 -115
  362. package/out/types/nibble_set/module.f.d.mts +0 -16
  363. package/out/types/nibble_set/module.f.mjs +0 -19
  364. package/out/types/nibble_set/test.f.d.mts +0 -13
  365. package/out/types/nibble_set/test.f.mjs +0 -90
  366. package/out/types/nullable/module.f.d.mts +0 -9
  367. package/out/types/nullable/module.f.mjs +0 -9
  368. package/out/types/nullable/test.f.d.mts +0 -2
  369. package/out/types/nullable/test.f.mjs +0 -12
  370. package/out/types/number/module.f.d.mts +0 -7
  371. package/out/types/number/module.f.mjs +0 -12
  372. package/out/types/number/test.f.d.mts +0 -11
  373. package/out/types/number/test.f.mjs +0 -126
  374. package/out/types/object/module.f.d.mts +0 -22
  375. package/out/types/object/module.f.mjs +0 -27
  376. package/out/types/object/test.f.d.mts +0 -5
  377. package/out/types/object/test.f.mjs +0 -17
  378. package/out/types/range/module.f.d.mts +0 -6
  379. package/out/types/range/module.f.mjs +0 -6
  380. package/out/types/range/test.f.d.mts +0 -2
  381. package/out/types/range/test.f.mjs +0 -18
  382. package/out/types/range_map/module.f.d.mts +0 -19
  383. package/out/types/range_map/module.f.mjs +0 -84
  384. package/out/types/range_map/test.f.d.mts +0 -6
  385. package/out/types/range_map/test.f.mjs +0 -201
  386. package/out/types/result/module.d.mts +0 -7
  387. package/out/types/result/module.f.d.mts +0 -22
  388. package/out/types/result/module.f.mjs +0 -25
  389. package/out/types/result/module.mjs +0 -16
  390. package/out/types/sorted_list/module.f.d.mts +0 -53
  391. package/out/types/sorted_list/module.f.mjs +0 -102
  392. package/out/types/sorted_list/test.f.d.mts +0 -5
  393. package/out/types/sorted_list/test.f.mjs +0 -66
  394. package/out/types/sorted_set/module.f.d.mts +0 -19
  395. package/out/types/sorted_set/module.f.mjs +0 -29
  396. package/out/types/sorted_set/test.f.d.mts +0 -6
  397. package/out/types/sorted_set/test.f.mjs +0 -80
  398. package/out/types/string/module.f.d.mts +0 -9
  399. package/out/types/string/module.f.mjs +0 -17
  400. package/out/types/string/test.f.d.mts +0 -15
  401. package/out/types/string/test.f.mjs +0 -58
  402. package/out/types/string_set/module.f.d.mts +0 -13
  403. package/out/types/string_set/module.f.mjs +0 -29
  404. package/out/types/string_set/test.f.d.mts +0 -5
  405. package/out/types/string_set/test.f.mjs +0 -65
  406. package/text/module.f.mjs +0 -27
  407. package/text/utf16/module.f.mjs +0 -96
  408. package/types/array/module.f.mjs +0 -119
  409. package/types/btree/find/module.f.mjs +0 -125
  410. package/types/btree/types/module.f.mjs +0 -64
  411. package/types/byte_set/module.f.mjs +0 -61
  412. package/types/function/compare/module.f.mjs +0 -29
  413. package/types/function/module.f.mjs +0 -50
  414. package/types/function/operator/module.f.mjs +0 -78
  415. package/types/function/test.f.mjs +0 -17
  416. package/types/list/module.f.mjs +0 -320
  417. package/types/map/module.f.mjs +0 -67
  418. package/types/nibble_set/module.f.mjs +0 -28
  419. package/types/nullable/module.f.mjs +0 -11
  420. package/types/number/module.f.mjs +0 -16
  421. package/types/object/module.f.mjs +0 -33
  422. package/types/range/module.f.mjs +0 -8
  423. package/types/range_map/module.f.mjs +0 -84
  424. package/types/result/module.f.mjs +0 -28
  425. package/types/sorted_list/module.f.mjs +0 -107
  426. package/types/sorted_set/module.f.mjs +0 -38
  427. package/types/string/module.f.mjs +0 -22
  428. package/types/string_set/module.f.mjs +0 -36
@@ -0,0 +1,90 @@
1
+ import * as list from '../../types/list/module.f.ts'
2
+ const { flat, map, entries: listEntries, concat: listConcat, flatMap } = list
3
+ import * as string from '../../types/string/module.f.ts'
4
+ const { concat } = string
5
+ import * as O from '../../types/object/module.f.ts'
6
+ import * as f from '../../types/function/module.f.ts'
7
+ const { compose, fn } = f
8
+ const { entries } = Object
9
+ import * as bi from '../../types/bigint/module.f.ts'
10
+ const { serialize: bigintSerialize } = bi
11
+ import * as j from '../../json/serializer/module.f.ts'
12
+ const { objectWrap, arrayWrap, stringSerialize, numberSerialize, nullSerialize, boolSerialize } = j
13
+ import * as DjsParser from '../parser/module.f.ts'
14
+
15
+ const colon = [':']
16
+
17
+ export const undefinedSerialize = ['undefined']
18
+
19
+ type Entry = O.Entry<DjsParser.DjsConst>
20
+
21
+ type Entries = list.List<Entry>
22
+
23
+ type MapEntries = (entries: Entries) => Entries
24
+
25
+ const djsConstSerialize
26
+ : (mapEntries: MapEntries) => (value: DjsParser.DjsConst) => list.List<string>
27
+ = sort => {
28
+ const propertySerialize
29
+ : (kv: readonly[string, DjsParser.DjsConst]) => list.List<string>
30
+ = ([k, v]) => flat([
31
+ stringSerialize(k),
32
+ colon,
33
+ f(v)
34
+ ])
35
+ const mapPropertySerialize = map(propertySerialize)
36
+ const objectSerialize
37
+ : (object: DjsParser.DjsObject) => list.List<string>
38
+ = fn(entries)
39
+ .then(sort)
40
+ .then(mapPropertySerialize)
41
+ .then(objectWrap)
42
+ .result
43
+ const f
44
+ : (value: DjsParser.DjsConst) => list.List<string>
45
+ = value => {
46
+ switch (typeof value) {
47
+ case 'boolean': { return boolSerialize(value) }
48
+ case 'number': { return numberSerialize(value) }
49
+ case 'string': { return stringSerialize(value) }
50
+ case 'bigint': { return [bigintSerialize(value)] }
51
+ default: {
52
+ if (value === null) { return nullSerialize }
53
+ if (value === undefined) { return undefinedSerialize }
54
+ if (value instanceof Array) {
55
+ switch (value[0]) {
56
+ case 'aref': { return [`a${value[1]}`] }
57
+ case 'cref': { return [`c${value[1]}`] }
58
+ case 'array': { return arraySerialize(value[1]) }
59
+ }
60
+ }
61
+ return objectSerialize(value)
62
+ }
63
+ }
64
+ }
65
+ const arraySerialize = compose(map(f))(arrayWrap)
66
+ return f
67
+ }
68
+
69
+ export const djsModuleStringify
70
+ : (mapEntries: MapEntries) => (djsModule: DjsParser.DjsModule) => string
71
+ = sort => djsModule => {
72
+ const importEntries = listEntries(djsModule[0])
73
+ const importSerialize
74
+ : (entry: list.Entry<string>) => list.List<string>
75
+ = entry => flat([['import a'], numberSerialize(entry[0]), [' from "', entry[1], '"\n']])
76
+
77
+ const len = djsModule[1].length
78
+ const constEntries = listEntries(djsModule[1])
79
+ const moduleEntrySerialize
80
+ : (entry: list.Entry<DjsParser.DjsConst>) => list.List<string>
81
+ = entry => {
82
+ if (entry[0] === len - 1) {
83
+ return listConcat(['export default '])(djsConstSerialize(sort)(entry[1]))
84
+ }
85
+ return flat([['const c'], numberSerialize(entry[0]), [' = '], djsConstSerialize(sort)(entry[1]), ['\n']])
86
+ }
87
+
88
+ return concat(listConcat(flatMap(importSerialize)(importEntries))(flatMap(moduleEntrySerialize)(constEntries)))
89
+ }
90
+
@@ -1,9 +1,9 @@
1
- import * as json from '../json/module.f.mjs'
2
- import * as list from '../types/object/module.f.mjs'
1
+ import * as json from '../json/module.f.ts'
2
+ import * as list from '../types/object/module.f.ts'
3
3
  const { sort } = list
4
- import * as f from '../types/function/module.f.mjs'
4
+ import * as f from '../types/function/module.f.ts'
5
5
  const { identity } = f
6
- import * as djs from './module.f.mjs'
6
+ import * as djs from './module.f.ts'
7
7
 
8
8
  export default {
9
9
  stringify: [
@@ -1,41 +1,29 @@
1
- // @ts-self-types="./module.f.d.mts"
2
-
3
- import * as Operator from '../../types/function/operator/module.f.mjs'
4
- 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'
5
3
  const { empty, flat, stateScan } = list
6
- import * as bf from '../../types/bigfloat/module.f.mjs'
4
+ import * as bf from '../../types/bigfloat/module.f.ts'
7
5
  const { multiply } = bf
8
- import * as jsTokenizer from '../../js/tokenizer/module.f.mjs'
6
+ import * as jsTokenizer from '../../js/tokenizer/module.f.ts'
9
7
 
10
- /**
11
- * @typedef {|
12
- * {readonly kind: 'true' | 'false' | 'null' | 'undefined'} |
13
- * {readonly kind: '{' | '}' | ':' | ',' | '[' | ']' | '.' | '=' } |
14
- * jsTokenizer.StringToken |
15
- * jsTokenizer.NumberToken |
16
- * jsTokenizer.ErrorToken |
17
- * jsTokenizer.IdToken |
18
- * jsTokenizer.BigIntToken |
19
- * jsTokenizer.WhitespaceToken |
20
- * jsTokenizer.NewLineToken |
21
- * jsTokenizer.CommentToken
22
- * } DjsToken
23
- */
8
+ export type DjsToken = |
9
+ {readonly kind: 'true' | 'false' | 'null' | 'undefined'} |
10
+ {readonly kind: '{' | '}' | ':' | ',' | '[' | ']' | '.' | '=' } |
11
+ jsTokenizer.StringToken |
12
+ jsTokenizer.NumberToken |
13
+ jsTokenizer.ErrorToken |
14
+ jsTokenizer.IdToken |
15
+ jsTokenizer.BigIntToken |
16
+ jsTokenizer.WhitespaceToken |
17
+ jsTokenizer.NewLineToken |
18
+ jsTokenizer.CommentToken
24
19
 
25
- /**
26
- * @typedef {|
27
- * {readonly kind: 'def' | '-' }
28
- * } ScanState
29
- */
20
+ type ScanState = {readonly kind: 'def' | '-' }
30
21
 
31
- /**
32
- * @typedef {|
33
- * jsTokenizer.JsToken | null
34
- * } ScanInput
35
- */
22
+ type ScanInput = | jsTokenizer.JsToken | null
36
23
 
37
- /** @type {(input: jsTokenizer.JsToken) => list.List<DjsToken>} */
38
- const mapToken = input =>
24
+ const mapToken
25
+ : (input: jsTokenizer.JsToken) => list.List<DjsToken>
26
+ = input =>
39
27
  {
40
28
  switch(input.kind)
41
29
  {
@@ -64,8 +52,9 @@ const mapToken = input =>
64
52
  }
65
53
  }
66
54
 
67
- /** @type {(input: ScanInput) => readonly [list.List<DjsToken>, ScanState]} */
68
- const parseDefaultState = input =>
55
+ const parseDefaultState
56
+ : (input: ScanInput) => readonly [list.List<DjsToken>, ScanState]
57
+ = input =>
69
58
  {
70
59
  if (input === null) return [empty, { kind: 'def'}]
71
60
  switch(input.kind)
@@ -75,8 +64,9 @@ const parseDefaultState = input =>
75
64
  }
76
65
  }
77
66
 
78
- /** @type {(input: ScanInput) => readonly [list.List<DjsToken>, ScanState]} */
79
- const parseMinusState = input =>
67
+ const parseMinusState
68
+ : (input: ScanInput) => readonly [list.List<DjsToken>, ScanState]
69
+ = input =>
80
70
  {
81
71
  if (input === null) return [[{ kind: 'error', message: 'invalid token' }], { kind: 'def'}]
82
72
  switch(input.kind)
@@ -88,8 +78,9 @@ const parseMinusState = input =>
88
78
  }
89
79
  }
90
80
 
91
- /** @type {Operator.StateScan<ScanInput, ScanState, list.List<DjsToken>>} */
92
- const scanToken = state => input => {
81
+ const scanToken
82
+ : Operator.StateScan<ScanInput, ScanState, list.List<DjsToken>>
83
+ = state => input => {
93
84
  switch(state.kind)
94
85
  {
95
86
  case '-': return parseMinusState(input)
@@ -97,10 +88,12 @@ const scanToken = state => input => {
97
88
  }
98
89
  }
99
90
 
100
- /** @type {(input: list.List<number>) => list.List<DjsToken>} */
101
- export const tokenize = input =>
91
+ export const tokenize
92
+ : (input: list.List<number>) => list.List<DjsToken>
93
+ = input =>
102
94
  {
103
- /** @type {list.List<ScanInput>} */
104
- const jsTokens = jsTokenizer.tokenize(input)
95
+ const jsTokens
96
+ : list.List<ScanInput>
97
+ = jsTokenizer.tokenize(input)
105
98
  return flat(stateScan(scanToken)({ kind: 'def' })(list.concat(jsTokens)([null])))
106
99
  }
@@ -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 '../module.f.mjs'
5
- import * as o from '../../types/object/module.f.mjs'
4
+ import * as djs from '../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.DjsToken[]} */
10
- const tokenizeString = s => toArray(tokenizer.tokenize(encoding.stringToList(s)))
9
+ const tokenizeString
10
+ : (s: string) => readonly tokenizer.DjsToken[]
11
+ = s => toArray(tokenizer.tokenize(encoding.stringToList(s)))
11
12
 
12
13
  const stringify = djs.stringify(sort)
13
14
 
@@ -360,4 +361,4 @@ export default {
360
361
  if (result !== '[{"kind":"/*","value":" multiline comment *\\n * *"},{"kind":"nl"}]') { throw result }
361
362
  },
362
363
  ]
363
- }
364
+ }
@@ -1,53 +1,49 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- import * as operator from '../types/function/operator/module.f.mjs'
3
- import * as rangeMap from '../types/range_map/module.f.mjs'
1
+ import * as operator from '../types/function/operator/module.f.ts'
2
+ import * as rangeMap from '../types/range_map/module.f.ts'
4
3
  const { merge: rangeMapMerge, fromRange, get } = rangeMap
5
- import * as list from '../types/list/module.f.mjs'
4
+ import * as list from '../types/list/module.f.ts'
6
5
  const { reduce: listReduce } = list
7
- import * as ascii from '../text/ascii/module.f.mjs'
6
+ import * as ascii from '../text/ascii/module.f.ts'
8
7
  const { range: asciiRange } = ascii
9
8
  const { fromCharCode } = String
10
- import * as f from '../types/function/module.f.mjs'
9
+ import * as f from '../types/function/module.f.ts'
11
10
  const { fn } = f
12
- import * as _range from '../types/range/module.f.mjs'
11
+ import * as _range from '../types/range/module.f.ts'
13
12
  const { one } = _range
14
13
  const { toArray, map } = list
15
14
 
16
- /** @typedef {readonly[readonly string[], ToResult]} Result */
15
+ type Result = readonly[readonly string[], ToResult]
17
16
 
18
- /** @typedef {(codePoint: number) => Result} ToResult */
17
+ type ToResult = (codePoint: number) => Result
19
18
 
20
- /**
21
- * @template T
22
- * @typedef {(state: T) => ToResult} CreateToResult
23
- */
19
+ type CreateToResult<T> = (state: T) => ToResult
24
20
 
25
- /**
26
- * @template T
27
- * @typedef {rangeMap.RangeMapArray<CreateToResult<T>>} State
28
- */
21
+ type State<T> = rangeMap.RangeMapArray<CreateToResult<T>>
29
22
 
30
- /** @type {ToResult} */
31
- const unexpectedSymbol = codePoint => [[`unexpected symbol ${codePoint}`], unexpectedSymbol]
23
+ const unexpectedSymbol
24
+ : ToResult
25
+ = codePoint => [[`unexpected symbol ${codePoint}`], unexpectedSymbol]
32
26
 
33
- /** @type {<T>(state: T) => ToResult} */
34
- const def = () => unexpectedSymbol
27
+ const def
28
+ : <T>(state: T) => ToResult
29
+ = () => unexpectedSymbol
35
30
 
36
- /** @type {<T>(a: CreateToResult<T>) => (b: CreateToResult<T>) => CreateToResult<T>} */
37
- const union = a => b => {
31
+ const union
32
+ : <T>(a: CreateToResult<T>) => (b: CreateToResult<T>) => CreateToResult<T>
33
+ = a => b => {
38
34
  if (a === def || a === b) { return b }
39
35
  if (b === def) { return a }
40
36
  throw [a, b]
41
37
  }
42
38
 
43
- /** @type {readonly never[]} */
44
- const empty = []
39
+ const empty
40
+ : readonly never[]
41
+ = []
45
42
 
46
- /** @type {<T>(a: list.List<State<T>>) => State<T>} */
47
- const reduce = a => {
48
- /** @typedef {typeof a extends list.List<State<infer T>> ? T : never} T */
49
- /** @type {rangeMap.RangeMerge<CreateToResult<T>>} */
50
- const merge = rangeMapMerge({
43
+ const reduce = <T>(a: list.List<State<T>>): State<T> => {
44
+ const merge
45
+ : rangeMap.RangeMerge<CreateToResult<T>>
46
+ = rangeMapMerge({
51
47
  union,
52
48
  equal: operator.strictEqual,
53
49
  })
@@ -58,29 +54,30 @@ const codePointRange = fromRange(def)
58
54
 
59
55
  const range = fn(asciiRange).then(codePointRange).result
60
56
 
61
- /** @type {(l: readonly string[]) => <T>(f: CreateToResult<T>) => State<T>} */
62
- const rangeSet = l => f => {
63
- /** @typedef {typeof f extends CreateToResult<infer T> ? T : never} T */
64
- /** @type {(a: _range.Range) => (f: CreateToResult<T>) => State<T>} */
65
- const codePointRange = fromRange(def)
66
- /** @type {(r: string) => State<T>} */
67
- const g = r => codePointRange(asciiRange(r))(f)
57
+ const rangeSet
58
+ = (l: readonly string[]) => <T>(f: CreateToResult<T>): State<T> => {
59
+ const codePointRange
60
+ : (a: _range.Range) => (f: CreateToResult<T>) => State<T>
61
+ = fromRange(def)
62
+ const g
63
+ : (r: string) => State<T>
64
+ = r => codePointRange(asciiRange(r))(f)
68
65
  return reduce(map(g)(l))
69
66
  }
70
67
 
71
- /** @type {<T>(a: list.List<State<T>>) => CreateToResult<T>} */
72
- const create = a => {
73
- /** @typedef {typeof a extends list.List<State<infer T>> ? T : never} T */
68
+ const create = <T>(a: list.List<State<T>>): CreateToResult<T> => {
74
69
  const i = reduce(a)
75
- /** @type {(v: number) => (i: State<T>) => (v: T) => ToResult} */
76
- const x = get(def)
70
+ const x
71
+ : (v: number) => (i: State<T>) => (v: T) => ToResult
72
+ = get(def)
77
73
  return v => c => x(c)(i)(v)(c)
78
74
  }
79
75
 
80
76
  export const terminal = -1
81
77
 
82
- /** @type {() => ToResult} */
83
- const toInit = () => () => [[], init]
78
+ const toInit
79
+ : () => ToResult
80
+ = () => () => [[], init]
84
81
 
85
82
  export const init = create([
86
83
  codePointRange(one(terminal))(toInit),
@@ -1,12 +1,14 @@
1
- import * as _ from './module.f.mjs'
2
- import * as ascii from '../text/ascii/module.f.mjs'
1
+ import * as _ from './module.f.ts'
2
+ import * as ascii from '../text/ascii/module.f.ts'
3
3
  const { one } = ascii
4
- import * as j from '../json/module.f.mjs'
4
+ import * as j from '../json/module.f.ts'
5
5
  const { stringify } = j
6
6
  const s = stringify(i => i)
7
7
 
8
- /** @type {(v: string) => string} */
9
- const f = v => {
8
+ /** @type {} */
9
+ const f
10
+ : (v: string) => string
11
+ = v => {
10
12
  const n = one(v)
11
13
  return s(_.init(n)[0])
12
14
  }
@@ -16,4 +18,4 @@ export default {
16
18
  const x = f('1')
17
19
  if (x != '["1"]') { throw x }
18
20
  }
19
- }
21
+ }
@@ -0,0 +1,107 @@
1
+ import * as list from '../types/list/module.f.ts'
2
+ const { equal, isEmpty, fold, toArray, scan, foldScan, empty: emptyList } = list
3
+ import * as byteSet from '../types/byte_set/module.f.ts'
4
+ const { toRangeMap, union: byteSetUnion, one, empty } = byteSet
5
+ import * as sortedSet from '../types/sorted_set/module.f.ts'
6
+ const { intersect, union: sortedSetUnion } = sortedSet
7
+ import * as rangeMap from '../types/range_map/module.f.ts'
8
+ const { merge } = rangeMap
9
+ import * as cmp from '../types/function/compare/module.f.ts'
10
+ const { unsafeCmp } = cmp
11
+ import * as operator from '../types/function/operator/module.f.ts'
12
+ const { strictEqual } = operator
13
+ import * as j from '../json/module.f.ts'
14
+ const { stringify } = j
15
+ import * as f from '../types/function/module.f.ts'
16
+ const { identity } = f
17
+ import * as utf16 from '../text/utf16/module.f.ts'
18
+ const { stringToList } = utf16
19
+
20
+ type Rule = readonly[string, byteSet.ByteSet, string]
21
+
22
+ export type Grammar = list.List<Rule>
23
+
24
+ type Dfa = {
25
+ readonly[state in string]: rangeMap.RangeMapArray<string>
26
+ }
27
+
28
+ const stringifyIdentity = stringify(identity)
29
+
30
+ export const toRange
31
+ : (s: string) => byteSet.ByteSet
32
+ = s => {
33
+ const [b, e] = toArray(stringToList(s))
34
+ return byteSet.range([b, e])
35
+ }
36
+
37
+ const toUnionOp
38
+ : operator.Fold<number, byteSet.ByteSet>
39
+ = i => bs => byteSetUnion(bs)(one(i))
40
+
41
+ export const toUnion
42
+ : (s: string) => byteSet.ByteSet
43
+ = s => {
44
+ const codePoints = stringToList(s)
45
+ return fold(toUnionOp)(empty)(codePoints)
46
+ }
47
+
48
+ const mergeOp
49
+ : rangeMap.Operators<sortedSet.SortedSet<string>>
50
+ = { union: sortedSetUnion(unsafeCmp), equal: equal(strictEqual) }
51
+
52
+ const hasState
53
+ : (s: string) => (set: sortedSet.SortedSet<string>) => boolean
54
+ = s => set => !isEmpty(intersect(unsafeCmp)([s])(set))
55
+
56
+ const foldOp
57
+ : (set: sortedSet.SortedSet<string>) => operator.Fold<Rule, rangeMap.RangeMap<sortedSet.SortedSet<string>>>
58
+ = set => ([ruleIn, bs, ruleOut]) => rm => {
59
+ if (hasState(ruleIn)(set)) { return merge(mergeOp)(rm)(toRangeMap(bs)(ruleOut)) }
60
+ return rm
61
+ }
62
+
63
+ const stringifyOp
64
+ : operator.Scan<rangeMap.Entry<sortedSet.SortedSet<string>>, rangeMap.Entry<string>>
65
+ = ([sortedSet, max]) => [[stringifyIdentity(sortedSet), max], stringifyOp]
66
+
67
+ const scanStringify = scan(stringifyOp)
68
+
69
+ const fetchOp
70
+ : operator.Scan<rangeMap.Entry<sortedSet.SortedSet<string>>, sortedSet.SortedSet<string>>
71
+ = ([item, _]) => [item, fetchOp]
72
+
73
+ const scanFetch = scan(fetchOp)
74
+
75
+ const addEntry
76
+ : (grammar: Grammar) => operator.Fold<sortedSet.SortedSet<string>, Dfa>
77
+ = grammar => set => dfa => {
78
+ const s = stringifyIdentity(set)
79
+ if (s in dfa) { return dfa }
80
+ const setMap = fold(foldOp(set))(emptyList)(grammar)
81
+ const stringMap = toArray(scanStringify(setMap))
82
+ const newDfa = { ...dfa, [s]: stringMap }
83
+ const newStates = scanFetch(setMap)
84
+ return fold(addEntry(grammar))(newDfa)(newStates)
85
+ }
86
+
87
+ const emptyState: string[] = []
88
+
89
+ const emptyStateStringify = stringifyIdentity(emptyState)
90
+
91
+ const initialState = ['']
92
+
93
+ const initialStateStringify = stringifyIdentity(initialState)
94
+
95
+ export const dfa
96
+ : (grammar: Grammar) => Dfa
97
+ = grammar => addEntry(grammar)(initialState)({})
98
+
99
+ const get = rangeMap.get(emptyStateStringify)
100
+
101
+ const runOp
102
+ : (dfa: Dfa) => operator.Fold<number, string>
103
+ = dfa => input => s => get(input)(dfa[s])
104
+
105
+ export const run
106
+ : (dfa: Dfa) => (input: list.List<number>) => list.List<string>
107
+ = dfa => input => foldScan(runOp(dfa))(initialStateStringify)(input)
@@ -1,13 +1,13 @@
1
- import * as _ from './module.f.mjs'
2
- import * as byteSet from '../types/byte_set/module.f.mjs'
3
- import * as o from '../types/object/module.f.mjs'
1
+ import * as _ from './module.f.ts'
2
+ import * as byteSet from '../types/byte_set/module.f.ts'
3
+ import * as o from '../types/object/module.f.ts'
4
4
  const { sort, fromEntries } = o
5
- import * as json from '../json/module.f.mjs'
6
- import * as f from '../types/function/module.f.mjs'
5
+ import * as json from '../json/module.f.ts'
6
+ import * as f from '../types/function/module.f.ts'
7
7
  const { identity } = f
8
- import * as list from '../types/list/module.f.mjs'
8
+ import * as list from '../types/list/module.f.ts'
9
9
  const { toArray } = list
10
- import * as utf16 from '../text/utf16/module.f.mjs'
10
+ import * as utf16 from '../text/utf16/module.f.ts'
11
11
  const { stringToList } = utf16
12
12
 
13
13
  const stringifyIdentity = json.stringify(identity)
@@ -22,8 +22,9 @@ const buildDfa = () => {
22
22
  const idNext = byteSet.union(idBegin)(digit)
23
23
  const dot = _.toUnion('.')
24
24
 
25
- /** @type {_.Grammar} */
26
- const grammar = [
25
+ const grammar
26
+ : _.Grammar
27
+ = [
27
28
  ['', digit, 'int'],
28
29
  ['int', digit, 'int'],
29
30
  ['', digit, 'floatBegin'],
@@ -0,0 +1,108 @@
1
+ import * as list from '../types/list/module.f.ts'
2
+ const { map, flatMap, flat, concat: listConcat } = list
3
+ import * as s from '../types/string/module.f.ts'
4
+ const { concat: stringConcat } = s
5
+ import * as O from '../types/object/module.f.ts'
6
+ import * as f from '../types/function/module.f.ts'
7
+ const { compose } = f
8
+ import * as utf16 from '../text/utf16/module.f.ts'
9
+ const { stringToList } = utf16
10
+ const { fromCharCode } = String
11
+ const { entries } = Object
12
+
13
+ type Tag = string
14
+
15
+ /**
16
+ * Void Elements
17
+ *
18
+ * https://developer.mozilla.org/en-US/docs/Glossary/Void_element
19
+ */
20
+ const voidTagList = [
21
+ 'area',
22
+ 'base',
23
+ 'br',
24
+ 'col',
25
+ 'embed',
26
+ 'hr',
27
+ 'img',
28
+ 'input',
29
+ 'link',
30
+ 'meta',
31
+ 'param',
32
+ 'source',
33
+ 'track',
34
+ 'wbr',
35
+ ] as const
36
+
37
+ type VoidTagList = typeof voidTagList
38
+
39
+ type VoidTag = keyof VoidTagList
40
+
41
+ const isVoid
42
+ : (tag: string) => boolean
43
+ = tag => (voidTagList as readonly string[]).includes(tag)
44
+
45
+ type Element1 = readonly[Tag, ...Node[]]
46
+
47
+ type Element2 = readonly[Tag, Attributes, ...Node[]]
48
+
49
+ export type Element = Element1 | Element2
50
+
51
+ type Attributes = {
52
+ readonly[k in string]: string
53
+ }
54
+
55
+ type Node = Element | string
56
+
57
+ /**
58
+ * https://stackoverflow.com/questions/7381974/which-characters-need-to-be-escaped-in-html
59
+ */
60
+ const escapeCharCode
61
+ : (code: number) => string
62
+ = code => {
63
+ switch (code) {
64
+ case 0x22: return '&quot;'
65
+ case 0x26: return '&amp;'
66
+ case 0x3C: return '&lt;'
67
+ case 0x3E: return '&gt;'
68
+ default: return fromCharCode(code)
69
+ }
70
+ }
71
+
72
+ const escape = compose(stringToList)(map(escapeCharCode))
73
+
74
+ const node
75
+ : (n: Node) => list.List<string>
76
+ = n => typeof n === 'string' ? escape(n) : element(n)
77
+
78
+ const nodes = flatMap(node)
79
+
80
+ const attribute
81
+ : (a: O.Entry<string>) => list.List<string>
82
+ = ([name, value]) => flat([[' ', name, '="'], escape(value), ['"']])
83
+
84
+ const attributes
85
+ : (a: Attributes) => list.List<string>
86
+ = compose(entries)(flatMap(attribute))
87
+
88
+ const open
89
+ : (t: string) => (a: Attributes) => list.List<string>
90
+ = t => a => flat([[`<`, t], attributes(a), [`>`]])
91
+
92
+ const element3
93
+ : (t: string) => (an: readonly[Attributes, readonly Node[]]) => list.List<string>
94
+ = t => ([a, n]) => {
95
+ const o = flat([[`<`, t], attributes(a), [`>`]])
96
+ return isVoid(t) ? o : flat([o, nodes(n), ['</', t, '>']])
97
+ }
98
+
99
+ export const element
100
+ : (element: Element) => list.List<string>
101
+ = e => {
102
+ const [t, a, ...n] = e
103
+ return element3(t)(a === undefined ? [{}, []]: typeof a === 'object' && !(a instanceof Array) ? [a, n] : [{}, [a, ...n]])
104
+ }
105
+
106
+ export const html = compose(element)(listConcat(['<!DOCTYPE html>']))
107
+
108
+ export const htmlToString = compose(html)(stringConcat)