functionalscript 0.2.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (433) hide show
  1. package/.github/workflows/ci.yml +19 -4
  2. package/CHANGELOG.md +9 -0
  3. package/com/cpp/{module.f.mjs → module.f.ts} +65 -44
  4. package/com/cpp/{test.f.mjs → test.f.ts} +1 -1
  5. package/com/cpp/testlib.f.ts +8 -0
  6. package/com/cs/{module.f.mjs → module.f.ts} +47 -38
  7. package/com/cs/{test.f.mjs → test.f.ts} +2 -2
  8. package/com/cs/testlib.f.ts +8 -0
  9. package/com/rust/module.f.ts +287 -0
  10. package/com/rust/{test.f.mjs → test.f.ts} +1 -1
  11. package/com/rust/testlib.f.ts +8 -0
  12. package/com/test/{build.f.mjs → build.f.ts} +47 -45
  13. package/com/test/{build.mjs → build.ts} +7 -6
  14. package/com/types/module.f.ts +62 -0
  15. package/com/types/{testlib.f.mjs → testlib.f.ts} +2 -3
  16. package/commonjs/build/module.f.ts +100 -0
  17. package/commonjs/build/{test.f.mjs → test.f.ts} +21 -17
  18. package/commonjs/module/function/module.f.ts +13 -0
  19. package/commonjs/module/module.f.ts +41 -0
  20. package/commonjs/module.f.ts +7 -0
  21. package/commonjs/{module.mjs → module.ts} +12 -9
  22. package/commonjs/package/dependencies/module.f.ts +22 -0
  23. package/commonjs/package/dependencies/{test.f.mjs → test.f.ts} +1 -1
  24. package/commonjs/package/module.f.ts +31 -0
  25. package/commonjs/package/{test.f.mjs → test.f.ts} +1 -1
  26. package/commonjs/path/{module.f.mjs → module.f.ts} +72 -67
  27. package/commonjs/path/{test.f.mjs → test.f.ts} +25 -19
  28. package/commonjs/{test.mjs → test.ts} +5 -4
  29. package/crypto/prime_field/{module.f.mjs → module.f.ts} +40 -37
  30. package/crypto/prime_field/{test.f.mjs → test.f.ts} +7 -5
  31. package/crypto/secp/{module.f.mjs → module.f.ts} +44 -44
  32. package/crypto/secp/{test.f.mjs → test.f.ts} +16 -11
  33. package/crypto/sha2/{module.f.mjs → module.f.ts} +61 -46
  34. package/crypto/sha2/{test.f.mjs → test.f.ts} +12 -9
  35. package/deno.json +71 -0
  36. package/dev/README.md +8 -0
  37. package/dev/index.ts +3 -0
  38. package/dev/{module.f.mjs → module.f.ts} +0 -2
  39. package/dev/{module.mjs → module.ts} +65 -60
  40. package/dev/test/{module.f.mjs → module.f.ts} +57 -70
  41. package/dev/{test.f.mjs → test.f.ts} +7 -5
  42. package/dev/test.ts +53 -0
  43. package/djs/{module.f.mjs → module.f.ts} +31 -31
  44. package/djs/parser/{module.f.mjs → module.f.ts} +190 -182
  45. package/djs/parser/{test.f.mjs → test.f.ts} +173 -150
  46. package/djs/serializer/module.f.ts +90 -0
  47. package/djs/{test.f.mjs → test.f.ts} +4 -4
  48. package/djs/tokenizer/{module.f.mjs → module.f.ts} +35 -42
  49. package/djs/tokenizer/{test.f.mjs → test.f.ts} +9 -8
  50. package/fsc/{module.f.mjs → module.f.ts} +41 -44
  51. package/fsc/{test.f.mjs → test.f.ts} +8 -6
  52. package/fsm/module.f.ts +107 -0
  53. package/fsm/{test.f.mjs → test.f.ts} +10 -9
  54. package/html/README.md +10 -9
  55. package/html/module.f.ts +108 -0
  56. package/html/{test.f.mjs → test.f.ts} +10 -7
  57. package/issues/README.md +3 -0
  58. package/issues/lang/3110-function.md +25 -1
  59. package/issues/{test.f.mjs → test.f.ts} +3 -2
  60. package/js/tokenizer/module.f.ts +882 -0
  61. package/js/tokenizer/{test.f.mjs → test.f.ts} +11 -10
  62. package/json/module.f.ts +94 -0
  63. package/json/parser/{module.f.mjs → module.f.ts} +113 -109
  64. package/json/parser/{test.f.mjs → test.f.ts} +10 -9
  65. package/json/serializer/module.f.ts +70 -0
  66. package/json/serializer/{test.f.mjs → test.f.ts} +3 -3
  67. package/json/{test.f.mjs → test.f.ts} +3 -3
  68. package/json/tokenizer/{module.f.mjs → module.f.ts} +29 -36
  69. package/json/tokenizer/{test.f.mjs → test.f.ts} +9 -8
  70. package/nanvm-lib/src/extension.rs +15 -4
  71. package/nanvm-lib/src/interface.rs +7 -10
  72. package/nanvm-lib/src/lib.rs +3 -3
  73. package/nanvm-lib/src/naive.rs +10 -3
  74. package/nanvm-lib/src/nanenum.rs +5 -1
  75. package/nanvm-lib/tests/{test.f.mjs → test.f.ts} +7 -6
  76. package/nodejs/version/{main.mjs → main.ts} +1 -1
  77. package/nodejs/version/module.f.ts +42 -0
  78. package/nodejs/version/{test.f.mjs → test.f.ts} +11 -12
  79. package/package.json +9 -9
  80. package/text/ascii/{module.f.mjs → module.f.ts} +10 -8
  81. package/text/ascii/{test.f.mjs → test.f.ts} +4 -4
  82. package/text/module.f.ts +30 -0
  83. package/text/sgr/{module.f.mjs → module.f.ts} +3 -5
  84. package/text/{test.f.mjs → test.f.ts} +5 -4
  85. package/text/utf16/module.f.ts +108 -0
  86. package/text/utf16/{test.f.mjs → test.f.ts} +7 -6
  87. package/text/utf8/{module.f.mjs → module.f.ts} +29 -23
  88. package/text/utf8/{test.f.mjs → test.f.ts} +4 -4
  89. package/tsconfig.json +4 -1
  90. package/types/array/module.f.ts +89 -0
  91. package/types/array/{test.f.mjs → test.f.ts} +3 -3
  92. package/types/bigfloat/{module.f.mjs → module.f.ts} +25 -20
  93. package/types/bigfloat/{test.f.mjs → test.f.ts} +1 -1
  94. package/types/bigint/{module.f.mjs → module.f.ts} +29 -28
  95. package/types/bigint/{test.f.mjs → test.f.ts} +2 -2
  96. package/types/bit_vec/README.md +18 -0
  97. package/types/bit_vec/module.f.ts +185 -0
  98. package/types/bit_vec/test.f.ts +129 -0
  99. package/types/btree/find/module.f.ts +92 -0
  100. package/types/btree/find/{test.f.mjs → test.f.ts} +20 -16
  101. package/types/btree/{module.f.mjs → module.f.ts} +9 -9
  102. package/types/btree/remove/{module.f.mjs → module.f.ts} +43 -53
  103. package/types/btree/remove/{test.f.mjs → test.f.ts} +19 -15
  104. package/types/btree/set/{module.f.mjs → module.f.ts} +17 -20
  105. package/types/btree/set/{test.f.mjs → test.f.ts} +96 -66
  106. package/types/btree/{test.f.mjs → test.f.ts} +34 -26
  107. package/types/btree/types/module.f.ts +27 -0
  108. package/types/byte_set/module.f.ts +70 -0
  109. package/types/byte_set/{test.f.mjs → test.f.ts} +8 -7
  110. package/types/function/compare/module.f.ts +26 -0
  111. package/types/function/compare/{test.f.mjs → test.f.ts} +1 -1
  112. package/types/function/module.f.ts +43 -0
  113. package/types/function/operator/module.f.ts +63 -0
  114. package/types/function/test.f.ts +20 -0
  115. package/types/list/module.f.ts +345 -0
  116. package/types/list/{test.f.mjs → test.f.ts} +30 -24
  117. package/types/map/module.f.ts +65 -0
  118. package/types/map/{test.f.mjs → test.f.ts} +6 -5
  119. package/types/nibble_set/module.f.ts +34 -0
  120. package/types/nibble_set/{test.f.mjs → test.f.ts} +3 -3
  121. package/types/nullable/module.f.ts +9 -0
  122. package/types/nullable/{test.f.mjs → test.f.ts} +2 -2
  123. package/types/number/module.f.ts +16 -0
  124. package/types/number/{test.f.mjs → test.f.ts} +7 -5
  125. package/types/object/module.f.ts +30 -0
  126. package/types/object/{test.f.mjs → test.f.ts} +2 -2
  127. package/types/range/module.f.ts +10 -0
  128. package/types/range/{test.f.mjs → test.f.ts} +1 -1
  129. package/types/range_map/module.f.ts +70 -0
  130. package/types/range_map/{test.f.mjs → test.f.ts} +82 -57
  131. package/types/result/module.f.ts +20 -0
  132. package/types/result/{module.mjs → module.ts} +4 -3
  133. package/types/sorted_list/module.f.ts +83 -0
  134. package/types/sorted_list/{test.f.mjs → test.f.ts} +14 -12
  135. package/types/sorted_set/module.f.ts +36 -0
  136. package/types/sorted_set/{test.f.mjs → test.f.ts} +14 -12
  137. package/types/string/module.f.ts +24 -0
  138. package/types/string/{test.f.mjs → test.f.ts} +2 -2
  139. package/types/string_set/module.f.ts +37 -0
  140. package/types/string_set/{test.f.mjs → test.f.ts} +2 -2
  141. package/com/cpp/testlib.f.mjs +0 -8
  142. package/com/cs/testlib.f.mjs +0 -8
  143. package/com/rust/module.f.mjs +0 -272
  144. package/com/rust/testlib.f.mjs +0 -8
  145. package/com/types/module.f.mjs +0 -67
  146. package/commonjs/build/module.f.mjs +0 -100
  147. package/commonjs/module/function/module.f.mjs +0 -21
  148. package/commonjs/module/module.f.mjs +0 -53
  149. package/commonjs/module.f.mjs +0 -11
  150. package/commonjs/package/dependencies/module.f.mjs +0 -22
  151. package/commonjs/package/module.f.mjs +0 -36
  152. package/dev/index.mjs +0 -3
  153. package/dev/test.mjs +0 -60
  154. package/fsm/module.f.mjs +0 -99
  155. package/html/module.f.mjs +0 -102
  156. package/js/tokenizer/module.f.mjs +0 -872
  157. package/json/module.f.mjs +0 -89
  158. package/json/serializer/module.f.mjs +0 -87
  159. package/jsr.json +0 -66
  160. package/nodejs/version/module.f.mjs +0 -47
  161. package/out/com/cpp/module.f.d.mts +0 -7
  162. package/out/com/cpp/module.f.mjs +0 -130
  163. package/out/com/cpp/test.f.d.mts +0 -2
  164. package/out/com/cpp/test.f.mjs +0 -40
  165. package/out/com/cpp/testlib.f.d.mts +0 -2
  166. package/out/com/cpp/testlib.f.mjs +0 -7
  167. package/out/com/cs/module.f.d.mts +0 -7
  168. package/out/com/cs/module.f.mjs +0 -104
  169. package/out/com/cs/test.f.d.mts +0 -2
  170. package/out/com/cs/test.f.mjs +0 -43
  171. package/out/com/cs/testlib.f.d.mts +0 -2
  172. package/out/com/cs/testlib.f.mjs +0 -7
  173. package/out/com/rust/module.f.d.mts +0 -23
  174. package/out/com/rust/module.f.mjs +0 -224
  175. package/out/com/rust/test.f.d.mts +0 -2
  176. package/out/com/rust/test.f.mjs +0 -123
  177. package/out/com/rust/testlib.f.d.mts +0 -2
  178. package/out/com/rust/testlib.f.mjs +0 -7
  179. package/out/com/test/build.d.mts +0 -1
  180. package/out/com/test/build.f.d.mts +0 -26
  181. package/out/com/test/build.f.mjs +0 -98
  182. package/out/com/test/build.mjs +0 -40
  183. package/out/com/types/module.f.d.mts +0 -23
  184. package/out/com/types/module.f.mjs +0 -51
  185. package/out/com/types/testlib.f.d.mts +0 -44
  186. package/out/com/types/testlib.f.mjs +0 -30
  187. package/out/commonjs/build/module.f.d.mts +0 -20
  188. package/out/commonjs/build/module.f.mjs +0 -107
  189. package/out/commonjs/build/test.f.d.mts +0 -3
  190. package/out/commonjs/build/test.f.mjs +0 -102
  191. package/out/commonjs/module/function/module.f.d.mts +0 -5
  192. package/out/commonjs/module/function/module.f.mjs +0 -15
  193. package/out/commonjs/module/module.f.d.mts +0 -52
  194. package/out/commonjs/module/module.f.mjs +0 -48
  195. package/out/commonjs/module.d.mts +0 -3
  196. package/out/commonjs/module.f.d.mts +0 -2
  197. package/out/commonjs/module.f.mjs +0 -10
  198. package/out/commonjs/module.mjs +0 -26
  199. package/out/commonjs/package/dependencies/module.f.d.mts +0 -6
  200. package/out/commonjs/package/dependencies/module.f.mjs +0 -21
  201. package/out/commonjs/package/dependencies/test.f.d.mts +0 -2
  202. package/out/commonjs/package/dependencies/test.f.mjs +0 -15
  203. package/out/commonjs/package/module.f.d.mts +0 -21
  204. package/out/commonjs/package/module.f.mjs +0 -40
  205. package/out/commonjs/package/test.f.d.mts +0 -2
  206. package/out/commonjs/package/test.f.mjs +0 -27
  207. package/out/commonjs/path/module.f.d.mts +0 -60
  208. package/out/commonjs/path/module.f.mjs +0 -171
  209. package/out/commonjs/path/test.f.d.mts +0 -25
  210. package/out/commonjs/path/test.f.mjs +0 -231
  211. package/out/commonjs/test.d.mts +0 -8
  212. package/out/commonjs/test.mjs +0 -87
  213. package/out/crypto/prime_field/module.f.d.mts +0 -67
  214. package/out/crypto/prime_field/module.f.mjs +0 -110
  215. package/out/crypto/prime_field/test.f.d.mts +0 -13
  216. package/out/crypto/prime_field/test.f.mjs +0 -152
  217. package/out/crypto/secp/module.f.d.mts +0 -110
  218. package/out/crypto/secp/module.f.mjs +0 -173
  219. package/out/crypto/secp/test.f.d.mts +0 -5
  220. package/out/crypto/secp/test.f.mjs +0 -78
  221. package/out/crypto/sha2/module.f.d.mts +0 -15
  222. package/out/crypto/sha2/module.f.mjs +0 -172
  223. package/out/crypto/sha2/test.f.d.mts +0 -10
  224. package/out/crypto/sha2/test.f.mjs +0 -86
  225. package/out/dev/index.d.mts +0 -1
  226. package/out/dev/index.mjs +0 -2
  227. package/out/dev/module.d.mts +0 -26
  228. package/out/dev/module.f.d.mts +0 -1
  229. package/out/dev/module.f.mjs +0 -2
  230. package/out/dev/module.mjs +0 -167
  231. package/out/dev/test/module.f.d.mts +0 -25
  232. package/out/dev/test/module.f.mjs +0 -134
  233. package/out/dev/test.d.mts +0 -3
  234. package/out/dev/test.f.d.mts +0 -9
  235. package/out/dev/test.f.mjs +0 -58
  236. package/out/dev/test.mjs +0 -52
  237. package/out/djs/module.f.d.mts +0 -20
  238. package/out/djs/module.f.mjs +0 -79
  239. package/out/djs/parser/module.f.d.mts +0 -56
  240. package/out/djs/parser/module.f.mjs +0 -448
  241. package/out/djs/parser/test.f.d.mts +0 -13
  242. package/out/djs/parser/test.f.mjs +0 -569
  243. package/out/djs/test.f.d.mts +0 -12
  244. package/out/djs/test.f.mjs +0 -84
  245. package/out/djs/tokenizer/module.f.d.mts +0 -13
  246. package/out/djs/tokenizer/module.f.mjs +0 -91
  247. package/out/djs/tokenizer/test.f.d.mts +0 -7
  248. package/out/djs/tokenizer/test.f.mjs +0 -530
  249. package/out/fsc/module.f.d.mts +0 -7
  250. package/out/fsc/module.f.mjs +0 -105
  251. package/out/fsc/test.f.d.mts +0 -4
  252. package/out/fsc/test.f.mjs +0 -19
  253. package/out/fsm/module.f.d.mts +0 -14
  254. package/out/fsm/module.f.mjs +0 -80
  255. package/out/fsm/test.f.d.mts +0 -5
  256. package/out/fsm/test.f.mjs +0 -138
  257. package/out/html/module.f.d.mts +0 -17
  258. package/out/html/module.f.mjs +0 -80
  259. package/out/html/test.f.d.mts +0 -10
  260. package/out/html/test.f.mjs +0 -45
  261. package/out/issues/test.f.d.mts +0 -16
  262. package/out/issues/test.f.mjs +0 -66
  263. package/out/js/tokenizer/module.f.d.mts +0 -163
  264. package/out/js/tokenizer/module.f.mjs +0 -729
  265. package/out/js/tokenizer/test.f.d.mts +0 -9
  266. package/out/js/tokenizer/test.f.mjs +0 -906
  267. package/out/json/module.f.d.mts +0 -33
  268. package/out/json/module.f.mjs +0 -89
  269. package/out/json/parser/module.f.d.mts +0 -32
  270. package/out/json/parser/module.f.mjs +0 -224
  271. package/out/json/parser/test.f.d.mts +0 -5
  272. package/out/json/parser/test.f.mjs +0 -329
  273. package/out/json/serializer/module.f.d.mts +0 -36
  274. package/out/json/serializer/module.f.mjs +0 -67
  275. package/out/json/serializer/test.f.d.mts +0 -8
  276. package/out/json/serializer/test.f.mjs +0 -87
  277. package/out/json/test.f.d.mts +0 -8
  278. package/out/json/test.f.mjs +0 -61
  279. package/out/json/tokenizer/module.f.d.mts +0 -13
  280. package/out/json/tokenizer/module.f.mjs +0 -78
  281. package/out/json/tokenizer/test.f.d.mts +0 -6
  282. package/out/json/tokenizer/test.f.mjs +0 -420
  283. package/out/nanvm-lib/tests/test.f.d.mts +0 -36
  284. package/out/nanvm-lib/tests/test.f.mjs +0 -87
  285. package/out/nodejs/version/main.d.mts +0 -1
  286. package/out/nodejs/version/main.mjs +0 -3
  287. package/out/nodejs/version/module.f.d.mts +0 -12
  288. package/out/nodejs/version/module.f.mjs +0 -34
  289. package/out/nodejs/version/test.f.d.mts +0 -2
  290. package/out/nodejs/version/test.f.mjs +0 -97
  291. package/out/text/ascii/module.f.d.mts +0 -70
  292. package/out/text/ascii/module.f.mjs +0 -154
  293. package/out/text/ascii/test.f.d.mts +0 -4
  294. package/out/text/ascii/test.f.mjs +0 -14
  295. package/out/text/module.f.d.mts +0 -13
  296. package/out/text/module.f.mjs +0 -19
  297. package/out/text/sgr/module.f.d.mts +0 -12
  298. package/out/text/sgr/module.f.mjs +0 -17
  299. package/out/text/test.f.d.mts +0 -2
  300. package/out/text/test.f.mjs +0 -19
  301. package/out/text/utf16/module.f.d.mts +0 -12
  302. package/out/text/utf16/module.f.mjs +0 -86
  303. package/out/text/utf16/test.f.d.mts +0 -6
  304. package/out/text/utf16/test.f.mjs +0 -145
  305. package/out/text/utf8/module.f.d.mts +0 -10
  306. package/out/text/utf8/module.f.mjs +0 -126
  307. package/out/text/utf8/test.f.d.mts +0 -6
  308. package/out/text/utf8/test.f.mjs +0 -175
  309. package/out/types/array/module.f.d.mts +0 -31
  310. package/out/types/array/module.f.mjs +0 -95
  311. package/out/types/array/test.f.d.mts +0 -10
  312. package/out/types/array/test.f.mjs +0 -116
  313. package/out/types/bigfloat/module.f.d.mts +0 -6
  314. package/out/types/bigfloat/module.f.mjs +0 -77
  315. package/out/types/bigfloat/test.f.d.mts +0 -6
  316. package/out/types/bigfloat/test.f.mjs +0 -349
  317. package/out/types/bigint/module.f.d.mts +0 -29
  318. package/out/types/bigint/module.f.mjs +0 -114
  319. package/out/types/bigint/test.f.d.mts +0 -16
  320. package/out/types/bigint/test.f.mjs +0 -199
  321. package/out/types/bit_vec/module.f.d.mts +0 -72
  322. package/out/types/bit_vec/module.f.mjs +0 -83
  323. package/out/types/bit_vec/test.f.d.mts +0 -9
  324. package/out/types/bit_vec/test.f.mjs +0 -60
  325. package/out/types/btree/find/module.f.d.mts +0 -36
  326. package/out/types/btree/find/module.f.mjs +0 -137
  327. package/out/types/btree/find/test.f.d.mts +0 -2
  328. package/out/types/btree/find/test.f.mjs +0 -156
  329. package/out/types/btree/module.f.d.mts +0 -5
  330. package/out/types/btree/module.f.mjs +0 -34
  331. package/out/types/btree/remove/module.f.d.mts +0 -14
  332. package/out/types/btree/remove/module.f.mjs +0 -209
  333. package/out/types/btree/remove/test.f.d.mts +0 -7
  334. package/out/types/btree/remove/test.f.mjs +0 -638
  335. package/out/types/btree/set/module.f.d.mts +0 -5
  336. package/out/types/btree/set/module.f.mjs +0 -114
  337. package/out/types/btree/set/test.f.d.mts +0 -2
  338. package/out/types/btree/set/test.f.mjs +0 -390
  339. package/out/types/btree/test.f.d.mts +0 -13
  340. package/out/types/btree/test.f.mjs +0 -83
  341. package/out/types/btree/types/module.f.d.mts +0 -14
  342. package/out/types/btree/types/module.f.mjs +0 -50
  343. package/out/types/byte_set/module.f.d.mts +0 -25
  344. package/out/types/byte_set/module.f.mjs +0 -42
  345. package/out/types/byte_set/test.f.d.mts +0 -13
  346. package/out/types/byte_set/test.f.mjs +0 -123
  347. package/out/types/function/compare/module.f.d.mts +0 -23
  348. package/out/types/function/compare/module.f.mjs +0 -22
  349. package/out/types/function/compare/test.f.d.mts +0 -2
  350. package/out/types/function/compare/test.f.mjs +0 -8
  351. package/out/types/function/module.f.d.mts +0 -51
  352. package/out/types/function/module.f.mjs +0 -44
  353. package/out/types/function/operator/module.f.d.mts +0 -60
  354. package/out/types/function/operator/module.f.mjs +0 -60
  355. package/out/types/function/test.f.d.mts +0 -2
  356. package/out/types/function/test.f.mjs +0 -15
  357. package/out/types/list/module.f.d.mts +0 -82
  358. package/out/types/list/module.f.mjs +0 -269
  359. package/out/types/list/test.f.d.mts +0 -38
  360. package/out/types/list/test.f.mjs +0 -401
  361. package/out/types/map/module.f.d.mts +0 -21
  362. package/out/types/map/module.f.mjs +0 -54
  363. package/out/types/map/test.f.d.mts +0 -5
  364. package/out/types/map/test.f.mjs +0 -115
  365. package/out/types/nibble_set/module.f.d.mts +0 -16
  366. package/out/types/nibble_set/module.f.mjs +0 -19
  367. package/out/types/nibble_set/test.f.d.mts +0 -13
  368. package/out/types/nibble_set/test.f.mjs +0 -90
  369. package/out/types/nullable/module.f.d.mts +0 -9
  370. package/out/types/nullable/module.f.mjs +0 -9
  371. package/out/types/nullable/test.f.d.mts +0 -2
  372. package/out/types/nullable/test.f.mjs +0 -12
  373. package/out/types/number/module.f.d.mts +0 -7
  374. package/out/types/number/module.f.mjs +0 -12
  375. package/out/types/number/test.f.d.mts +0 -11
  376. package/out/types/number/test.f.mjs +0 -126
  377. package/out/types/object/module.f.d.mts +0 -22
  378. package/out/types/object/module.f.mjs +0 -27
  379. package/out/types/object/test.f.d.mts +0 -5
  380. package/out/types/object/test.f.mjs +0 -17
  381. package/out/types/range/module.f.d.mts +0 -6
  382. package/out/types/range/module.f.mjs +0 -6
  383. package/out/types/range/test.f.d.mts +0 -2
  384. package/out/types/range/test.f.mjs +0 -18
  385. package/out/types/range_map/module.f.d.mts +0 -19
  386. package/out/types/range_map/module.f.mjs +0 -84
  387. package/out/types/range_map/test.f.d.mts +0 -6
  388. package/out/types/range_map/test.f.mjs +0 -201
  389. package/out/types/result/module.d.mts +0 -7
  390. package/out/types/result/module.f.d.mts +0 -22
  391. package/out/types/result/module.f.mjs +0 -25
  392. package/out/types/result/module.mjs +0 -16
  393. package/out/types/sorted_list/module.f.d.mts +0 -53
  394. package/out/types/sorted_list/module.f.mjs +0 -102
  395. package/out/types/sorted_list/test.f.d.mts +0 -5
  396. package/out/types/sorted_list/test.f.mjs +0 -66
  397. package/out/types/sorted_set/module.f.d.mts +0 -19
  398. package/out/types/sorted_set/module.f.mjs +0 -29
  399. package/out/types/sorted_set/test.f.d.mts +0 -6
  400. package/out/types/sorted_set/test.f.mjs +0 -80
  401. package/out/types/string/module.f.d.mts +0 -9
  402. package/out/types/string/module.f.mjs +0 -17
  403. package/out/types/string/test.f.d.mts +0 -15
  404. package/out/types/string/test.f.mjs +0 -58
  405. package/out/types/string_set/module.f.d.mts +0 -13
  406. package/out/types/string_set/module.f.mjs +0 -29
  407. package/out/types/string_set/test.f.d.mts +0 -5
  408. package/out/types/string_set/test.f.mjs +0 -65
  409. package/text/module.f.mjs +0 -27
  410. package/text/utf16/module.f.mjs +0 -96
  411. package/types/array/module.f.mjs +0 -119
  412. package/types/bit_vec/module.f.mjs +0 -90
  413. package/types/bit_vec/test.f.mjs +0 -41
  414. package/types/btree/find/module.f.mjs +0 -125
  415. package/types/btree/types/module.f.mjs +0 -64
  416. package/types/byte_set/module.f.mjs +0 -61
  417. package/types/function/compare/module.f.mjs +0 -29
  418. package/types/function/module.f.mjs +0 -50
  419. package/types/function/operator/module.f.mjs +0 -78
  420. package/types/function/test.f.mjs +0 -17
  421. package/types/list/module.f.mjs +0 -320
  422. package/types/map/module.f.mjs +0 -67
  423. package/types/nibble_set/module.f.mjs +0 -28
  424. package/types/nullable/module.f.mjs +0 -11
  425. package/types/number/module.f.mjs +0 -16
  426. package/types/object/module.f.mjs +0 -33
  427. package/types/range/module.f.mjs +0 -8
  428. package/types/range_map/module.f.mjs +0 -84
  429. package/types/result/module.f.mjs +0 -28
  430. package/types/sorted_list/module.f.mjs +0 -107
  431. package/types/sorted_set/module.f.mjs +0 -38
  432. package/types/string/module.f.mjs +0 -22
  433. package/types/string_set/module.f.mjs +0 -36
package/json/module.f.mjs DELETED
@@ -1,89 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- import * as list from '../types/list/module.f.mjs'
3
- const { next, flat, map } = list
4
- import * as string from '../types/string/module.f.mjs'
5
- const { concat } = string
6
- import * as object from '../types/object/module.f.mjs'
7
- const { at } = object
8
- import * as f from '../types/function/module.f.mjs'
9
- const { compose, fn } = f
10
- const { entries } = Object
11
- import * as s from './serializer/module.f.mjs'
12
- const { objectWrap, arrayWrap, stringSerialize, numberSerialize, nullSerialize, boolSerialize } = s
13
-
14
- /**
15
- * @typedef {{
16
- * readonly [k in string]: Unknown
17
- * }} Object
18
- */
19
-
20
- /** @typedef {readonly Unknown[]} Array */
21
-
22
- /** @typedef {Object|boolean|string|number|null|Array} Unknown */
23
-
24
- /** @type {(value: Unknown) => (path: list.List<string>) => (src: Unknown) => Unknown} */
25
- export const setProperty = value => {
26
- /** @type {(path: list.List<string>) => (src: Unknown) => Unknown} */
27
- const f = path => src => {
28
- const result = next(path)
29
- if (result === null) { return value }
30
- const srcObject = (src === null || typeof src !== 'object' || src instanceof Array) ? {} : src
31
- const { first, tail } = result
32
- return { ...srcObject, [first]: f(tail)(at(first)(srcObject)) }
33
- }
34
- return f
35
- }
36
-
37
- const colon = [':']
38
-
39
- /** @typedef {object.Entry<Unknown>} Entry*/
40
-
41
- /** @typedef {(list.List<Entry>)} Entries */
42
-
43
- /** @typedef {(entries: Entries) => Entries} MapEntries */
44
-
45
- /** @type {(mapEntries: MapEntries) => (value: Unknown) => list.List<string>} */
46
- export const serialize = sort => {
47
- /** @type {(kv: readonly[string, Unknown]) => list.List<string>} */
48
- const propertySerialize = ([k, v]) => flat([
49
- stringSerialize(k),
50
- colon,
51
- f(v)
52
- ])
53
- const mapPropertySerialize = map(propertySerialize)
54
- /** @type {(object: Object) => list.List<string>} */
55
- const objectSerialize = fn(entries)
56
- .then(sort)
57
- .then(mapPropertySerialize)
58
- .then(objectWrap)
59
- .result
60
- /** @type {(value: Unknown) => list.List<string>} */
61
- const f = value => {
62
- switch (typeof value) {
63
- case 'boolean': { return boolSerialize(value) }
64
- case 'number': { return numberSerialize(value) }
65
- case 'string': { return stringSerialize(value) }
66
- default: {
67
- if (value === null) { return nullSerialize }
68
- if (value instanceof Array) { return arraySerialize(value) }
69
- return objectSerialize(value)
70
- }
71
- }
72
- }
73
- const arraySerialize = compose(map(f))(arrayWrap)
74
- return f
75
- }
76
-
77
- /**
78
- * The standard `JSON.stringify` rules determined by
79
- * https://262.ecma-international.org/6.0/#sec-ordinary-object-internal-methods-and-internal-slots-ownpropertykeys
80
- *
81
- * @type {(mapEntries: MapEntries) => (value: Unknown) => string}
82
- */
83
- export const stringify = sort => compose(serialize(sort))(concat)
84
-
85
- /** @type {(value: string) => Unknown} */
86
- export const parse = JSON.parse
87
-
88
- /** @type {(value: Unknown) => value is Object} */
89
- export const isObject = value => typeof value === 'object' && value !== null && !(value instanceof Array)
@@ -1,87 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- import * as list from '../../types/list/module.f.mjs'
3
- const { flat, reduce, empty } = list
4
- import * as O from '../../types/object/module.f.mjs'
5
- import * as Operator from '../../types/function/operator/module.f.mjs'
6
-
7
- /**
8
- * @template T
9
- * @typedef {{
10
- * readonly [k in string]: Unknown<T>
11
- * }} Obj<T>
12
- */
13
-
14
- /**
15
- * @template T
16
- * @typedef {readonly Unknown<T>[]} Arr<T>
17
- */
18
-
19
- /**
20
- * @typedef {|
21
- * boolean |
22
- * string |
23
- * number |
24
- * null
25
- * } Primitive
26
- */
27
-
28
- /**
29
- * @template T
30
- * @typedef {|
31
- * Arr<T>|
32
- * Obj<T>|
33
- * null|
34
- * T
35
- * } Unknown<T>
36
- */
37
-
38
- const jsonStringify = JSON.stringify
39
-
40
- /** @type {(_: string) => list.List<string>} */
41
- export const stringSerialize = input => [jsonStringify(input)]
42
-
43
- /** @type {(_: number) => list.List<string>} */
44
- export const numberSerialize = input => [jsonStringify(input)]
45
-
46
- export const nullSerialize = ['null']
47
-
48
- const trueSerialize = ['true']
49
-
50
- const falseSerialize = ['false']
51
-
52
- /** @type {(_: boolean) => list.List<string>} */
53
- export const boolSerialize = value => value ? trueSerialize : falseSerialize
54
-
55
- const comma = [',']
56
-
57
- /** @type {Operator.Reduce<list.List<string>>} */
58
- const joinOp = b => prior => flat([prior, comma, b])
59
-
60
- /** @type {(input: list.List<list.List<string>>) => list.List<string>} */
61
- const join = reduce(joinOp)(empty)
62
-
63
- /** @type {(open: string) => (close: string) => (input: list.List<list.List<string>>) => list.List<string>} */
64
- const wrap = open => close => {
65
- const seqOpen = [open]
66
- const seqClose = [close]
67
- return input => flat([seqOpen, join(input), seqClose])
68
- }
69
-
70
- export const objectWrap = wrap('{')('}')
71
-
72
- export const arrayWrap = wrap('[')(']')
73
-
74
- /**
75
- * @template T
76
- * @typedef {O.Entry<Unknown<T>>} Entry<T>
77
- */
78
-
79
- /**
80
- * @template T
81
- * @typedef {(list.List<Entry<T>>)} Entries<T>
82
- */
83
-
84
- /**
85
- * @template T
86
- * @typedef {(entries: Entries<T>) => Entries<T>} MapEntries<T>
87
- */
package/jsr.json DELETED
@@ -1,66 +0,0 @@
1
- {
2
- "name": "@functionalscript/functionalscript",
3
- "version": "0.2.5",
4
- "license": "AGPL-3.0-only",
5
- "exports": {
6
- "./com/cpp": "./out/com/cpp/module.f.mjs",
7
- "./com/cs": "./out/com/cs/module.f.mjs",
8
- "./com/rust": "./out/com/rust/module.f.mjs",
9
- "./com/types": "./out/com/types/module.f.mjs",
10
- "./commonjs/build": "./out/commonjs/build/module.f.mjs",
11
- "./commonjs": "./out/commonjs/module.f.mjs",
12
- "./commonjs/module/function": "./out/commonjs/module/function/module.f.mjs",
13
- "./commonjs/module": "./out/commonjs/module/module.f.mjs",
14
- "./commonjs/package/dependencies": "./out/commonjs/package/dependencies/module.f.mjs",
15
- "./commonjs/package": "./out/commonjs/package/module.f.mjs",
16
- "./commonjs/path": "./out/commonjs/path/module.f.mjs",
17
- "./crypto/prime_field": "./out/crypto/prime_field/module.f.mjs",
18
- "./crypto/secp": "./out/crypto/secp/module.f.mjs",
19
- "./crypto/sha2": "./out/crypto/sha2/module.f.mjs",
20
- "./dev": "./out/dev/module.f.mjs",
21
- "./dev/test": "./out/dev/test/module.f.mjs",
22
- "./djs": "./out/djs/module.f.mjs",
23
- "./djs/parser": "./out/djs/parser/module.f.mjs",
24
- "./djs/tokenizer": "./out/djs/tokenizer/module.f.mjs",
25
- "./fsc": "./out/fsc/module.f.mjs",
26
- "./fsm": "./out/fsm/module.f.mjs",
27
- "./html": "./out/html/module.f.mjs",
28
- "./js/tokenizer": "./out/js/tokenizer/module.f.mjs",
29
- "./json": "./out/json/module.f.mjs",
30
- "./json/parser": "./out/json/parser/module.f.mjs",
31
- "./json/serializer": "./out/json/serializer/module.f.mjs",
32
- "./json/tokenizer": "./out/json/tokenizer/module.f.mjs",
33
- "./nodejs/version": "./out/nodejs/version/module.f.mjs",
34
- "./text/ascii": "./out/text/ascii/module.f.mjs",
35
- "./text": "./out/text/module.f.mjs",
36
- "./text/sgr": "./out/text/sgr/module.f.mjs",
37
- "./text/utf16": "./out/text/utf16/module.f.mjs",
38
- "./text/utf8": "./out/text/utf8/module.f.mjs",
39
- "./types/array": "./out/types/array/module.f.mjs",
40
- "./types/bigfloat": "./out/types/bigfloat/module.f.mjs",
41
- "./types/bigint": "./out/types/bigint/module.f.mjs",
42
- "./types/bit_vec": "./out/types/bit_vec/module.f.mjs",
43
- "./types/btree/find": "./out/types/btree/find/module.f.mjs",
44
- "./types/btree": "./out/types/btree/module.f.mjs",
45
- "./types/btree/remove": "./out/types/btree/remove/module.f.mjs",
46
- "./types/btree/set": "./out/types/btree/set/module.f.mjs",
47
- "./types/btree/types": "./out/types/btree/types/module.f.mjs",
48
- "./types/byte_set": "./out/types/byte_set/module.f.mjs",
49
- "./types/function/compare": "./out/types/function/compare/module.f.mjs",
50
- "./types/function": "./out/types/function/module.f.mjs",
51
- "./types/function/operator": "./out/types/function/operator/module.f.mjs",
52
- "./types/list": "./out/types/list/module.f.mjs",
53
- "./types/map": "./out/types/map/module.f.mjs",
54
- "./types/nibble_set": "./out/types/nibble_set/module.f.mjs",
55
- "./types/nullable": "./out/types/nullable/module.f.mjs",
56
- "./types/number": "./out/types/number/module.f.mjs",
57
- "./types/object": "./out/types/object/module.f.mjs",
58
- "./types/range": "./out/types/range/module.f.mjs",
59
- "./types/range_map": "./out/types/range_map/module.f.mjs",
60
- "./types/result": "./out/types/result/module.f.mjs",
61
- "./types/sorted_list": "./out/types/sorted_list/module.f.mjs",
62
- "./types/sorted_set": "./out/types/sorted_set/module.f.mjs",
63
- "./types/string": "./out/types/string/module.f.mjs",
64
- "./types/string_set": "./out/types/string_set/module.f.mjs"
65
- }
66
- }
@@ -1,47 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
-
3
- /** @typedef {{}} Buffer */
4
-
5
- /**
6
- * @template T
7
- * @typedef {{
8
- * readonly readFileSync: (name: string) => Buffer
9
- * readonly writeFileSync: (name: string, content: string) => T
10
- * }} Fs
11
- */
12
-
13
- /**
14
- * @template T
15
- * @typedef {{
16
- * readonly fs: Fs<T>
17
- * }} Node
18
- */
19
-
20
- const { stringify, parse } = JSON
21
-
22
- /** @type {<T>(fs: Fs<T>) => string} */
23
- export const getVersion = fs => readJson(fs)('package').version
24
-
25
- const jsonFile = (/** @type {string} */jsonFile) => `${jsonFile}.json`
26
-
27
- /** @type {<T>(node: Fs<T>) => (name: string) => any} */
28
- const readJson = fs => name => parse(fs.readFileSync(jsonFile(name)).toString())
29
-
30
- /** @type {<T>(node: Node<T>) => readonly[T, T]} */
31
- export const updateVersion = ({ fs }) => {
32
- const f = (/** @type {string} */name) => {
33
- return fs.writeFileSync(
34
- jsonFile(name),
35
- stringify(
36
- {
37
- ...readJson(fs)(name),
38
- version: getVersion(fs)
39
- },
40
- null,
41
- 2))
42
- }
43
- return [
44
- f('package'),
45
- f('jsr')
46
- ]
47
- }
@@ -1,7 +0,0 @@
1
- /**
2
- * Generates the C++ code for a library.
3
- * @type {(name: string) => (lib: types.Library) => text.Block}
4
- */
5
- export const cpp: (name: string) => (lib: types.Library) => text.Block;
6
- import * as types from '../types/module.f.mjs';
7
- import * as text from '../../text/module.f.mjs';
@@ -1,130 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- /**
3
- * This module generates C++ code blocks, including structs, interfaces, and method headers,
4
- * based on a COM library of type definitions.
5
- */
6
- import * as types from '../types/module.f.mjs';
7
- import * as text from '../../text/module.f.mjs';
8
- import * as O from '../../types/object/module.f.mjs';
9
- import * as list from '../../types/list/module.f.mjs';
10
- import * as string from '../../types/string/module.f.mjs';
11
- const { join } = string;
12
- const { paramList } = types;
13
- const { map, flatMap, flat } = list;
14
- const { entries } = Object;
15
- /** @type {(name: string) => (body: text.Block) => text.Block} */
16
- const struct = name => body => [`struct ${name}`, '{', body, '};'];
17
- const baseTypeMap = {
18
- u8: 'uint8_t',
19
- i8: 'int8_t',
20
- u16: 'uint16_t',
21
- i16: 'int16_t',
22
- u32: 'uint32_t',
23
- i32: 'int32_t',
24
- u64: 'uint64_t',
25
- i64: 'int64_t',
26
- usize: 'size_t',
27
- isize: 'ptrdiff_t',
28
- f32: 'float',
29
- f64: 'double',
30
- bool: 'bool',
31
- };
32
- /** @type {(t: types.BaseType) => string} */
33
- const baseType = t => baseTypeMap[t];
34
- const resultVoid = types.result('void');
35
- const namespace = text.curly('namespace');
36
- /** @type {(id: string) => string} */
37
- const comRef = id => `::nanocom::ref<${id}>`;
38
- /** @type {(id: string) => string} */
39
- const ptr = id => `${id} const*`;
40
- /** @type {(id: string) => string} */
41
- const ref = id => `${id} const&`;
42
- /** @type {(p: types.Field) => string} */
43
- const paramName = ([name]) => name;
44
- const mapParamName = map(paramName);
45
- const joinComma = join(', ');
46
- /**
47
- * Generates the C++ code for a library.
48
- * @type {(name: string) => (lib: types.Library) => text.Block}
49
- */
50
- export const cpp = name => lib => {
51
- /** @type {(t: types.Type) => string|null} */
52
- const interface_ = t => {
53
- if (!(t instanceof Array) || t.length !== 1) {
54
- return null;
55
- }
56
- const [name] = t;
57
- return 'interface' in lib[name] ? name : null;
58
- };
59
- /** @type {(i: (t: string) => string) => (t: types.Type) => string} */
60
- const objectType = i => t => {
61
- if (typeof (t) === 'string') {
62
- return baseType(t);
63
- }
64
- if (t.length === 2) {
65
- return `${type(t[1])} const*`;
66
- }
67
- const [id] = t;
68
- return 'interface' in lib[id] ? i(id) : id;
69
- };
70
- const type = objectType(comRef);
71
- const resultType = objectType(ptr);
72
- /** @type {(s: types.Field) => text.Item} */
73
- const field = ([name, t]) => `${type(t)} ${name};`;
74
- const mapField = map(field);
75
- /** @type {(s: types.Struct) => text.Block} */
76
- const defStruct = s => mapField(entries(s.struct));
77
- /** @type {(fa: types.FieldArray) => string} */
78
- const cppResult = resultVoid(resultType);
79
- /** @type {(p: types.Field) => string} */
80
- const param = ([name, t]) => `${objectType(ref)(t)} ${name}`;
81
- const mapParam = map(param);
82
- /** @type {(result: string) => (paramArrayStr: string) => (name: string) => text.Item} */
83
- const methodHeader = result => paramArrayStr => name => `virtual ${result} ${name}${paramArrayStr} const noexcept = 0;`;
84
- /** @type {(m: types.Method) => readonly text.Item[]} */
85
- const method = ([name, paramArray]) => {
86
- const result = cppResult(paramArray);
87
- const paramL = paramList(paramArray);
88
- const paramArrayStr = `(${joinComma(mapParam(paramL))})`;
89
- const m = methodHeader(result)(paramArrayStr);
90
- const resultName = interface_(paramArray._);
91
- if (resultName === null) {
92
- return [m(name)];
93
- }
94
- return [
95
- m(`${name}_`),
96
- `${comRef(resultName)} ${name}${paramArrayStr} const noexcept`,
97
- '{',
98
- [`return ::nanocom::move_to_ref(${name}_(${joinComma(mapParamName(paramL))}));`],
99
- '}',
100
- ];
101
- };
102
- const mapMethod = flatMap(method);
103
- /** @type {(i: types.Interface) => text.Block} */
104
- const defInterface = ({ guid, interface: i }) => {
105
- const g = guid.replaceAll('-', '');
106
- const lo = g.substring(0, 16);
107
- const hi = g.substring(16);
108
- return flat([
109
- [`constexpr static ::nanocom::GUID const guid = ::nanocom::GUID(0x${lo}, 0x${hi});`],
110
- mapMethod(entries(i))
111
- ]);
112
- };
113
- /** @type {(kv: O.Entry<types.Definition>) => text.Block} */
114
- const def = ([name, d]) => 'interface' in d
115
- ? [
116
- `class ${name} : public ::nanocom::IUnknown`,
117
- '{',
118
- 'public:',
119
- defInterface(d),
120
- '};'
121
- ]
122
- : struct(name)(defStruct(d));
123
- /** @type {(kv: O.Entry<types.Definition>) => text.Block} */
124
- const forward = ([name]) => [`struct ${name};`];
125
- const e = entries(lib);
126
- return flat([
127
- ['#pragma once', ''],
128
- namespace(name)(flat([flatMap(forward)(e), flatMap(def)(e)]))
129
- ]);
130
- };
@@ -1,2 +0,0 @@
1
- export default f;
2
- declare function f(): void;
@@ -1,40 +0,0 @@
1
- import cpp from './testlib.f.mjs';
2
- const f = () => {
3
- const e = '#pragma once\n' +
4
- '\n' +
5
- 'namespace My\n' +
6
- '{\n' +
7
- ' struct Slice;\n' +
8
- ' struct ManagedStruct;\n' +
9
- ' struct IMy;\n' +
10
- ' struct Slice\n' +
11
- ' {\n' +
12
- ' uint8_t const* Start;\n' +
13
- ' size_t Size;\n' +
14
- ' };\n' +
15
- ' struct ManagedStruct\n' +
16
- ' {\n' +
17
- ' ::nanocom::ref<IMy> M;\n' +
18
- ' };\n' +
19
- ' class IMy : public ::nanocom::IUnknown\n' +
20
- ' {\n' +
21
- ' public:\n' +
22
- ' constexpr static ::nanocom::GUID const guid = ::nanocom::GUID(0xC66FB2702D8049AD, 0xBB6E88C1F90B805D);\n' +
23
- ' virtual Slice GetSlice() const noexcept = 0;\n' +
24
- ' virtual void SetSlice(Slice slice) const noexcept = 0;\n' +
25
- ' virtual bool const* GetUnsafe() const noexcept = 0;\n' +
26
- ' virtual void SetUnsafe(Slice const* p, uint32_t size) const noexcept = 0;\n' +
27
- ' virtual bool Some(IMy const& p) const noexcept = 0;\n' +
28
- ' virtual IMy const* GetIMy_(uint16_t a, int16_t b) const noexcept = 0;\n' +
29
- ' ::nanocom::ref<IMy> GetIMy(uint16_t a, int16_t b) const noexcept\n' +
30
- ' {\n' +
31
- ' return ::nanocom::move_to_ref(GetIMy_(a, b));\n' +
32
- ' }\n' +
33
- ' virtual void SetManagedStruct(ManagedStruct a) const noexcept = 0;\n' +
34
- ' };\n' +
35
- '}';
36
- if (cpp() !== e) {
37
- throw cpp;
38
- }
39
- };
40
- export default f;
@@ -1,2 +0,0 @@
1
- declare function _default(): string;
2
- export default _default;
@@ -1,7 +0,0 @@
1
- import * as string from '../../types/string/module.f.mjs';
2
- const { join } = string;
3
- import * as text from '../../text/module.f.mjs';
4
- const { flat } = text;
5
- import library from '../types/testlib.f.mjs';
6
- import { cpp } from './module.f.mjs';
7
- export default () => join('\n')(flat(' ')(cpp('My')(library)));
@@ -1,7 +0,0 @@
1
- /**
2
- * Generates the C# code for a library.
3
- * @type {(name: string) => (library: types.Library) => text.Block}
4
- */
5
- export const cs: (name: string) => (library: types.Library) => text.Block;
6
- import * as types from '../types/module.f.mjs';
7
- import * as text from '../../text/module.f.mjs';
@@ -1,104 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- /**
3
- * This module generates C# code blocks for COM interop from a high-level type library definition.
4
- *
5
- * The module maps type definitions (e.g., structs, interfaces, and methods) into C# constructs
6
- * with appropriate attributes for COM interop, such as `[StructLayout]`, `[Guid]`, and `[InterfaceType]`.
7
- */
8
- import * as types from '../types/module.f.mjs';
9
- const { result, paramList } = types;
10
- import * as text from '../../text/module.f.mjs';
11
- const { curly } = text;
12
- import * as list from '../../types/list/module.f.mjs';
13
- const { flat, map, some, flatMap } = list;
14
- import * as string from '../../types/string/module.f.mjs';
15
- const { join } = string;
16
- import * as O from '../../types/object/module.f.mjs';
17
- const { entries } = Object;
18
- /** @type {(v: string) => string} */
19
- const using = v => `using ${v};`;
20
- /**
21
- * @type {(attributes: list.List<string>) =>
22
- * (type: string) =>
23
- * (name: string) =>
24
- * (body: text.Block) =>
25
- * list.List<text.Item>}
26
- */
27
- const typeDef = attributes => type => name => body => flat([
28
- map(v => `[${v}]`)(attributes),
29
- curly(`public ${type}`)(name)(body)
30
- ]);
31
- const baseTypeMap = {
32
- bool: 'byte',
33
- f32: 'float',
34
- f64: 'double',
35
- i16: 'short',
36
- i32: 'int',
37
- i64: 'long',
38
- i8: 'sbyte',
39
- isize: 'IntPtr',
40
- u16: 'ushort',
41
- u32: 'uint',
42
- u64: 'ulong',
43
- u8: 'byte',
44
- usize: 'UIntPtr',
45
- };
46
- /** @type {(t: types.BaseType) => string} */
47
- const baseType = t => baseTypeMap[t];
48
- /** @type {(isUnsafe: boolean) => string} */
49
- const unsafe = isUnsafe => isUnsafe ? 'unsafe ' : '';
50
- /** @type {(t: types.Type) => readonly[boolean, string]} */
51
- const fullType = t => typeof (t) === 'string' ? [false, baseType(t)] :
52
- t.length === 1 ? [false, t[0]] :
53
- [true, `${type(t[1])}*`];
54
- /** @type {(m: types.Type) => string} */
55
- const type = t => fullType(t)[1];
56
- /** @type {(f: types.Field) => string} */
57
- const param = ([name, t]) => `${type(t)} ${name}`;
58
- const mapParam = map(param);
59
- /** @type {(f: types.Field) => string} */
60
- const field = ([name, comType]) => {
61
- const [isUnsafe, t] = fullType(comType);
62
- return `public ${unsafe(isUnsafe)}${t} ${name};`;
63
- };
64
- /** @type {(field: types.Field) => boolean} */
65
- const isUnsafeField = field => fullType(field[1])[0];
66
- const mapIsUnsafeField = map(isUnsafeField);
67
- const resultVoid = result('void');
68
- const joinComma = join(', ');
69
- /** @type {(e: O.Entry<types.FieldArray>) => readonly string[]} */
70
- const method = ([name, m]) => {
71
- const paramAndResultList = entries(m);
72
- const pl = paramList(m);
73
- const isUnsafe = some(mapIsUnsafeField(paramAndResultList));
74
- return [
75
- '[PreserveSig]',
76
- `${unsafe(isUnsafe)}${resultVoid(type)(m)} ${name}(${joinComma(mapParam(pl))});`
77
- ];
78
- };
79
- const struct = typeDef(['StructLayout(LayoutKind.Sequential)'])('struct');
80
- const mapField = map(field);
81
- const flatMapMethod = flatMap(method);
82
- /** @type {(e: O.Entry<types.Definition>) => list.List<text.Item>} */
83
- const def = ([n, d]) => {
84
- return !('interface' in d) ?
85
- struct(n)(mapField(entries(d.struct))) :
86
- typeDef([`Guid("${d.guid}")`, 'InterfaceType(ComInterfaceType.InterfaceIsIUnknown)'])('interface')(n)(flatMapMethod(entries(d.interface)));
87
- };
88
- const flatMapDef = flatMap(def);
89
- const namespace = curly('namespace');
90
- /** @type {text.Block} */
91
- const header = [
92
- using('System'),
93
- using('System.Runtime.InteropServices'),
94
- ''
95
- ];
96
- /**
97
- * Generates the C# code for a library.
98
- * @type {(name: string) => (library: types.Library) => text.Block}
99
- */
100
- export const cs = name => library => {
101
- const v = flatMapDef(entries(library));
102
- const ns = namespace(name)(v);
103
- return flat([header, ns]);
104
- };
@@ -1,2 +0,0 @@
1
- export default f;
2
- declare function f(): void;
@@ -1,43 +0,0 @@
1
- import cs from './testlib.f.mjs';
2
- const f = () => {
3
- const e = 'using System;\n' +
4
- 'using System.Runtime.InteropServices;\n' +
5
- '\n' +
6
- 'namespace My\n' +
7
- '{\n' +
8
- ' [StructLayout(LayoutKind.Sequential)]\n' +
9
- ' public struct Slice\n' +
10
- ' {\n' +
11
- ' public unsafe byte* Start;\n' +
12
- ' public UIntPtr Size;\n' +
13
- ' }\n' +
14
- ' [StructLayout(LayoutKind.Sequential)]\n' +
15
- ' public struct ManagedStruct\n' +
16
- ' {\n' +
17
- ' public IMy M;\n' +
18
- ' }\n' +
19
- ' [Guid("C66FB270-2D80-49AD-BB6E-88C1F90B805D")]\n' +
20
- ' [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n' +
21
- ' public interface IMy\n' +
22
- ' {\n' +
23
- ' [PreserveSig]\n' +
24
- ' Slice GetSlice();\n' +
25
- ' [PreserveSig]\n' +
26
- ' void SetSlice(Slice slice);\n' +
27
- ' [PreserveSig]\n' +
28
- ' unsafe byte* GetUnsafe();\n' +
29
- ' [PreserveSig]\n' +
30
- ' unsafe void SetUnsafe(Slice* p, uint size);\n' +
31
- ' [PreserveSig]\n' +
32
- ' byte Some(IMy p);\n' +
33
- ' [PreserveSig]\n' +
34
- ' IMy GetIMy(ushort a, short b);\n' +
35
- ' [PreserveSig]\n' +
36
- ' void SetManagedStruct(ManagedStruct a);\n' +
37
- ' }\n' +
38
- '}';
39
- if (cs !== e) {
40
- throw cs;
41
- }
42
- };
43
- export default f;
@@ -1,2 +0,0 @@
1
- declare const _default: string;
2
- export default _default;
@@ -1,7 +0,0 @@
1
- import * as text from '../../text/module.f.mjs';
2
- const { flat } = text;
3
- import * as string from '../../types/string/module.f.mjs';
4
- const { join } = string;
5
- import { cs } from './module.f.mjs';
6
- import library from '../types/testlib.f.mjs';
7
- export default join('\n')(flat(' ')(cs('My')(library)));