functionalscript 0.2.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (433) hide show
  1. package/.github/workflows/ci.yml +19 -4
  2. package/CHANGELOG.md +9 -0
  3. package/com/cpp/{module.f.mjs → module.f.ts} +65 -44
  4. package/com/cpp/{test.f.mjs → test.f.ts} +1 -1
  5. package/com/cpp/testlib.f.ts +8 -0
  6. package/com/cs/{module.f.mjs → module.f.ts} +47 -38
  7. package/com/cs/{test.f.mjs → test.f.ts} +2 -2
  8. package/com/cs/testlib.f.ts +8 -0
  9. package/com/rust/module.f.ts +287 -0
  10. package/com/rust/{test.f.mjs → test.f.ts} +1 -1
  11. package/com/rust/testlib.f.ts +8 -0
  12. package/com/test/{build.f.mjs → build.f.ts} +47 -45
  13. package/com/test/{build.mjs → build.ts} +7 -6
  14. package/com/types/module.f.ts +62 -0
  15. package/com/types/{testlib.f.mjs → testlib.f.ts} +2 -3
  16. package/commonjs/build/module.f.ts +100 -0
  17. package/commonjs/build/{test.f.mjs → test.f.ts} +21 -17
  18. package/commonjs/module/function/module.f.ts +13 -0
  19. package/commonjs/module/module.f.ts +41 -0
  20. package/commonjs/module.f.ts +7 -0
  21. package/commonjs/{module.mjs → module.ts} +12 -9
  22. package/commonjs/package/dependencies/module.f.ts +22 -0
  23. package/commonjs/package/dependencies/{test.f.mjs → test.f.ts} +1 -1
  24. package/commonjs/package/module.f.ts +31 -0
  25. package/commonjs/package/{test.f.mjs → test.f.ts} +1 -1
  26. package/commonjs/path/{module.f.mjs → module.f.ts} +72 -67
  27. package/commonjs/path/{test.f.mjs → test.f.ts} +25 -19
  28. package/commonjs/{test.mjs → test.ts} +5 -4
  29. package/crypto/prime_field/{module.f.mjs → module.f.ts} +40 -37
  30. package/crypto/prime_field/{test.f.mjs → test.f.ts} +7 -5
  31. package/crypto/secp/{module.f.mjs → module.f.ts} +44 -44
  32. package/crypto/secp/{test.f.mjs → test.f.ts} +16 -11
  33. package/crypto/sha2/{module.f.mjs → module.f.ts} +61 -46
  34. package/crypto/sha2/{test.f.mjs → test.f.ts} +12 -9
  35. package/deno.json +71 -0
  36. package/dev/README.md +8 -0
  37. package/dev/index.ts +3 -0
  38. package/dev/{module.f.mjs → module.f.ts} +0 -2
  39. package/dev/{module.mjs → module.ts} +65 -60
  40. package/dev/test/{module.f.mjs → module.f.ts} +57 -70
  41. package/dev/{test.f.mjs → test.f.ts} +7 -5
  42. package/dev/test.ts +53 -0
  43. package/djs/{module.f.mjs → module.f.ts} +31 -31
  44. package/djs/parser/{module.f.mjs → module.f.ts} +190 -182
  45. package/djs/parser/{test.f.mjs → test.f.ts} +173 -150
  46. package/djs/serializer/module.f.ts +90 -0
  47. package/djs/{test.f.mjs → test.f.ts} +4 -4
  48. package/djs/tokenizer/{module.f.mjs → module.f.ts} +35 -42
  49. package/djs/tokenizer/{test.f.mjs → test.f.ts} +9 -8
  50. package/fsc/{module.f.mjs → module.f.ts} +41 -44
  51. package/fsc/{test.f.mjs → test.f.ts} +8 -6
  52. package/fsm/module.f.ts +107 -0
  53. package/fsm/{test.f.mjs → test.f.ts} +10 -9
  54. package/html/README.md +10 -9
  55. package/html/module.f.ts +108 -0
  56. package/html/{test.f.mjs → test.f.ts} +10 -7
  57. package/issues/README.md +3 -0
  58. package/issues/lang/3110-function.md +25 -1
  59. package/issues/{test.f.mjs → test.f.ts} +3 -2
  60. package/js/tokenizer/module.f.ts +882 -0
  61. package/js/tokenizer/{test.f.mjs → test.f.ts} +11 -10
  62. package/json/module.f.ts +94 -0
  63. package/json/parser/{module.f.mjs → module.f.ts} +113 -109
  64. package/json/parser/{test.f.mjs → test.f.ts} +10 -9
  65. package/json/serializer/module.f.ts +70 -0
  66. package/json/serializer/{test.f.mjs → test.f.ts} +3 -3
  67. package/json/{test.f.mjs → test.f.ts} +3 -3
  68. package/json/tokenizer/{module.f.mjs → module.f.ts} +29 -36
  69. package/json/tokenizer/{test.f.mjs → test.f.ts} +9 -8
  70. package/nanvm-lib/src/extension.rs +15 -4
  71. package/nanvm-lib/src/interface.rs +7 -10
  72. package/nanvm-lib/src/lib.rs +3 -3
  73. package/nanvm-lib/src/naive.rs +10 -3
  74. package/nanvm-lib/src/nanenum.rs +5 -1
  75. package/nanvm-lib/tests/{test.f.mjs → test.f.ts} +7 -6
  76. package/nodejs/version/{main.mjs → main.ts} +1 -1
  77. package/nodejs/version/module.f.ts +42 -0
  78. package/nodejs/version/{test.f.mjs → test.f.ts} +11 -12
  79. package/package.json +9 -9
  80. package/text/ascii/{module.f.mjs → module.f.ts} +10 -8
  81. package/text/ascii/{test.f.mjs → test.f.ts} +4 -4
  82. package/text/module.f.ts +30 -0
  83. package/text/sgr/{module.f.mjs → module.f.ts} +3 -5
  84. package/text/{test.f.mjs → test.f.ts} +5 -4
  85. package/text/utf16/module.f.ts +108 -0
  86. package/text/utf16/{test.f.mjs → test.f.ts} +7 -6
  87. package/text/utf8/{module.f.mjs → module.f.ts} +29 -23
  88. package/text/utf8/{test.f.mjs → test.f.ts} +4 -4
  89. package/tsconfig.json +4 -1
  90. package/types/array/module.f.ts +89 -0
  91. package/types/array/{test.f.mjs → test.f.ts} +3 -3
  92. package/types/bigfloat/{module.f.mjs → module.f.ts} +25 -20
  93. package/types/bigfloat/{test.f.mjs → test.f.ts} +1 -1
  94. package/types/bigint/{module.f.mjs → module.f.ts} +29 -28
  95. package/types/bigint/{test.f.mjs → test.f.ts} +2 -2
  96. package/types/bit_vec/README.md +18 -0
  97. package/types/bit_vec/module.f.ts +185 -0
  98. package/types/bit_vec/test.f.ts +129 -0
  99. package/types/btree/find/module.f.ts +92 -0
  100. package/types/btree/find/{test.f.mjs → test.f.ts} +20 -16
  101. package/types/btree/{module.f.mjs → module.f.ts} +9 -9
  102. package/types/btree/remove/{module.f.mjs → module.f.ts} +43 -53
  103. package/types/btree/remove/{test.f.mjs → test.f.ts} +19 -15
  104. package/types/btree/set/{module.f.mjs → module.f.ts} +17 -20
  105. package/types/btree/set/{test.f.mjs → test.f.ts} +96 -66
  106. package/types/btree/{test.f.mjs → test.f.ts} +34 -26
  107. package/types/btree/types/module.f.ts +27 -0
  108. package/types/byte_set/module.f.ts +70 -0
  109. package/types/byte_set/{test.f.mjs → test.f.ts} +8 -7
  110. package/types/function/compare/module.f.ts +26 -0
  111. package/types/function/compare/{test.f.mjs → test.f.ts} +1 -1
  112. package/types/function/module.f.ts +43 -0
  113. package/types/function/operator/module.f.ts +63 -0
  114. package/types/function/test.f.ts +20 -0
  115. package/types/list/module.f.ts +345 -0
  116. package/types/list/{test.f.mjs → test.f.ts} +30 -24
  117. package/types/map/module.f.ts +65 -0
  118. package/types/map/{test.f.mjs → test.f.ts} +6 -5
  119. package/types/nibble_set/module.f.ts +34 -0
  120. package/types/nibble_set/{test.f.mjs → test.f.ts} +3 -3
  121. package/types/nullable/module.f.ts +9 -0
  122. package/types/nullable/{test.f.mjs → test.f.ts} +2 -2
  123. package/types/number/module.f.ts +16 -0
  124. package/types/number/{test.f.mjs → test.f.ts} +7 -5
  125. package/types/object/module.f.ts +30 -0
  126. package/types/object/{test.f.mjs → test.f.ts} +2 -2
  127. package/types/range/module.f.ts +10 -0
  128. package/types/range/{test.f.mjs → test.f.ts} +1 -1
  129. package/types/range_map/module.f.ts +70 -0
  130. package/types/range_map/{test.f.mjs → test.f.ts} +82 -57
  131. package/types/result/module.f.ts +20 -0
  132. package/types/result/{module.mjs → module.ts} +4 -3
  133. package/types/sorted_list/module.f.ts +83 -0
  134. package/types/sorted_list/{test.f.mjs → test.f.ts} +14 -12
  135. package/types/sorted_set/module.f.ts +36 -0
  136. package/types/sorted_set/{test.f.mjs → test.f.ts} +14 -12
  137. package/types/string/module.f.ts +24 -0
  138. package/types/string/{test.f.mjs → test.f.ts} +2 -2
  139. package/types/string_set/module.f.ts +37 -0
  140. package/types/string_set/{test.f.mjs → test.f.ts} +2 -2
  141. package/com/cpp/testlib.f.mjs +0 -8
  142. package/com/cs/testlib.f.mjs +0 -8
  143. package/com/rust/module.f.mjs +0 -272
  144. package/com/rust/testlib.f.mjs +0 -8
  145. package/com/types/module.f.mjs +0 -67
  146. package/commonjs/build/module.f.mjs +0 -100
  147. package/commonjs/module/function/module.f.mjs +0 -21
  148. package/commonjs/module/module.f.mjs +0 -53
  149. package/commonjs/module.f.mjs +0 -11
  150. package/commonjs/package/dependencies/module.f.mjs +0 -22
  151. package/commonjs/package/module.f.mjs +0 -36
  152. package/dev/index.mjs +0 -3
  153. package/dev/test.mjs +0 -60
  154. package/fsm/module.f.mjs +0 -99
  155. package/html/module.f.mjs +0 -102
  156. package/js/tokenizer/module.f.mjs +0 -872
  157. package/json/module.f.mjs +0 -89
  158. package/json/serializer/module.f.mjs +0 -87
  159. package/jsr.json +0 -66
  160. package/nodejs/version/module.f.mjs +0 -47
  161. package/out/com/cpp/module.f.d.mts +0 -7
  162. package/out/com/cpp/module.f.mjs +0 -130
  163. package/out/com/cpp/test.f.d.mts +0 -2
  164. package/out/com/cpp/test.f.mjs +0 -40
  165. package/out/com/cpp/testlib.f.d.mts +0 -2
  166. package/out/com/cpp/testlib.f.mjs +0 -7
  167. package/out/com/cs/module.f.d.mts +0 -7
  168. package/out/com/cs/module.f.mjs +0 -104
  169. package/out/com/cs/test.f.d.mts +0 -2
  170. package/out/com/cs/test.f.mjs +0 -43
  171. package/out/com/cs/testlib.f.d.mts +0 -2
  172. package/out/com/cs/testlib.f.mjs +0 -7
  173. package/out/com/rust/module.f.d.mts +0 -23
  174. package/out/com/rust/module.f.mjs +0 -224
  175. package/out/com/rust/test.f.d.mts +0 -2
  176. package/out/com/rust/test.f.mjs +0 -123
  177. package/out/com/rust/testlib.f.d.mts +0 -2
  178. package/out/com/rust/testlib.f.mjs +0 -7
  179. package/out/com/test/build.d.mts +0 -1
  180. package/out/com/test/build.f.d.mts +0 -26
  181. package/out/com/test/build.f.mjs +0 -98
  182. package/out/com/test/build.mjs +0 -40
  183. package/out/com/types/module.f.d.mts +0 -23
  184. package/out/com/types/module.f.mjs +0 -51
  185. package/out/com/types/testlib.f.d.mts +0 -44
  186. package/out/com/types/testlib.f.mjs +0 -30
  187. package/out/commonjs/build/module.f.d.mts +0 -20
  188. package/out/commonjs/build/module.f.mjs +0 -107
  189. package/out/commonjs/build/test.f.d.mts +0 -3
  190. package/out/commonjs/build/test.f.mjs +0 -102
  191. package/out/commonjs/module/function/module.f.d.mts +0 -5
  192. package/out/commonjs/module/function/module.f.mjs +0 -15
  193. package/out/commonjs/module/module.f.d.mts +0 -52
  194. package/out/commonjs/module/module.f.mjs +0 -48
  195. package/out/commonjs/module.d.mts +0 -3
  196. package/out/commonjs/module.f.d.mts +0 -2
  197. package/out/commonjs/module.f.mjs +0 -10
  198. package/out/commonjs/module.mjs +0 -26
  199. package/out/commonjs/package/dependencies/module.f.d.mts +0 -6
  200. package/out/commonjs/package/dependencies/module.f.mjs +0 -21
  201. package/out/commonjs/package/dependencies/test.f.d.mts +0 -2
  202. package/out/commonjs/package/dependencies/test.f.mjs +0 -15
  203. package/out/commonjs/package/module.f.d.mts +0 -21
  204. package/out/commonjs/package/module.f.mjs +0 -40
  205. package/out/commonjs/package/test.f.d.mts +0 -2
  206. package/out/commonjs/package/test.f.mjs +0 -27
  207. package/out/commonjs/path/module.f.d.mts +0 -60
  208. package/out/commonjs/path/module.f.mjs +0 -171
  209. package/out/commonjs/path/test.f.d.mts +0 -25
  210. package/out/commonjs/path/test.f.mjs +0 -231
  211. package/out/commonjs/test.d.mts +0 -8
  212. package/out/commonjs/test.mjs +0 -87
  213. package/out/crypto/prime_field/module.f.d.mts +0 -67
  214. package/out/crypto/prime_field/module.f.mjs +0 -110
  215. package/out/crypto/prime_field/test.f.d.mts +0 -13
  216. package/out/crypto/prime_field/test.f.mjs +0 -152
  217. package/out/crypto/secp/module.f.d.mts +0 -110
  218. package/out/crypto/secp/module.f.mjs +0 -173
  219. package/out/crypto/secp/test.f.d.mts +0 -5
  220. package/out/crypto/secp/test.f.mjs +0 -78
  221. package/out/crypto/sha2/module.f.d.mts +0 -15
  222. package/out/crypto/sha2/module.f.mjs +0 -172
  223. package/out/crypto/sha2/test.f.d.mts +0 -10
  224. package/out/crypto/sha2/test.f.mjs +0 -86
  225. package/out/dev/index.d.mts +0 -1
  226. package/out/dev/index.mjs +0 -2
  227. package/out/dev/module.d.mts +0 -26
  228. package/out/dev/module.f.d.mts +0 -1
  229. package/out/dev/module.f.mjs +0 -2
  230. package/out/dev/module.mjs +0 -167
  231. package/out/dev/test/module.f.d.mts +0 -25
  232. package/out/dev/test/module.f.mjs +0 -134
  233. package/out/dev/test.d.mts +0 -3
  234. package/out/dev/test.f.d.mts +0 -9
  235. package/out/dev/test.f.mjs +0 -58
  236. package/out/dev/test.mjs +0 -52
  237. package/out/djs/module.f.d.mts +0 -20
  238. package/out/djs/module.f.mjs +0 -79
  239. package/out/djs/parser/module.f.d.mts +0 -56
  240. package/out/djs/parser/module.f.mjs +0 -448
  241. package/out/djs/parser/test.f.d.mts +0 -13
  242. package/out/djs/parser/test.f.mjs +0 -569
  243. package/out/djs/test.f.d.mts +0 -12
  244. package/out/djs/test.f.mjs +0 -84
  245. package/out/djs/tokenizer/module.f.d.mts +0 -13
  246. package/out/djs/tokenizer/module.f.mjs +0 -91
  247. package/out/djs/tokenizer/test.f.d.mts +0 -7
  248. package/out/djs/tokenizer/test.f.mjs +0 -530
  249. package/out/fsc/module.f.d.mts +0 -7
  250. package/out/fsc/module.f.mjs +0 -105
  251. package/out/fsc/test.f.d.mts +0 -4
  252. package/out/fsc/test.f.mjs +0 -19
  253. package/out/fsm/module.f.d.mts +0 -14
  254. package/out/fsm/module.f.mjs +0 -80
  255. package/out/fsm/test.f.d.mts +0 -5
  256. package/out/fsm/test.f.mjs +0 -138
  257. package/out/html/module.f.d.mts +0 -17
  258. package/out/html/module.f.mjs +0 -80
  259. package/out/html/test.f.d.mts +0 -10
  260. package/out/html/test.f.mjs +0 -45
  261. package/out/issues/test.f.d.mts +0 -16
  262. package/out/issues/test.f.mjs +0 -66
  263. package/out/js/tokenizer/module.f.d.mts +0 -163
  264. package/out/js/tokenizer/module.f.mjs +0 -729
  265. package/out/js/tokenizer/test.f.d.mts +0 -9
  266. package/out/js/tokenizer/test.f.mjs +0 -906
  267. package/out/json/module.f.d.mts +0 -33
  268. package/out/json/module.f.mjs +0 -89
  269. package/out/json/parser/module.f.d.mts +0 -32
  270. package/out/json/parser/module.f.mjs +0 -224
  271. package/out/json/parser/test.f.d.mts +0 -5
  272. package/out/json/parser/test.f.mjs +0 -329
  273. package/out/json/serializer/module.f.d.mts +0 -36
  274. package/out/json/serializer/module.f.mjs +0 -67
  275. package/out/json/serializer/test.f.d.mts +0 -8
  276. package/out/json/serializer/test.f.mjs +0 -87
  277. package/out/json/test.f.d.mts +0 -8
  278. package/out/json/test.f.mjs +0 -61
  279. package/out/json/tokenizer/module.f.d.mts +0 -13
  280. package/out/json/tokenizer/module.f.mjs +0 -78
  281. package/out/json/tokenizer/test.f.d.mts +0 -6
  282. package/out/json/tokenizer/test.f.mjs +0 -420
  283. package/out/nanvm-lib/tests/test.f.d.mts +0 -36
  284. package/out/nanvm-lib/tests/test.f.mjs +0 -87
  285. package/out/nodejs/version/main.d.mts +0 -1
  286. package/out/nodejs/version/main.mjs +0 -3
  287. package/out/nodejs/version/module.f.d.mts +0 -12
  288. package/out/nodejs/version/module.f.mjs +0 -34
  289. package/out/nodejs/version/test.f.d.mts +0 -2
  290. package/out/nodejs/version/test.f.mjs +0 -97
  291. package/out/text/ascii/module.f.d.mts +0 -70
  292. package/out/text/ascii/module.f.mjs +0 -154
  293. package/out/text/ascii/test.f.d.mts +0 -4
  294. package/out/text/ascii/test.f.mjs +0 -14
  295. package/out/text/module.f.d.mts +0 -13
  296. package/out/text/module.f.mjs +0 -19
  297. package/out/text/sgr/module.f.d.mts +0 -12
  298. package/out/text/sgr/module.f.mjs +0 -17
  299. package/out/text/test.f.d.mts +0 -2
  300. package/out/text/test.f.mjs +0 -19
  301. package/out/text/utf16/module.f.d.mts +0 -12
  302. package/out/text/utf16/module.f.mjs +0 -86
  303. package/out/text/utf16/test.f.d.mts +0 -6
  304. package/out/text/utf16/test.f.mjs +0 -145
  305. package/out/text/utf8/module.f.d.mts +0 -10
  306. package/out/text/utf8/module.f.mjs +0 -126
  307. package/out/text/utf8/test.f.d.mts +0 -6
  308. package/out/text/utf8/test.f.mjs +0 -175
  309. package/out/types/array/module.f.d.mts +0 -31
  310. package/out/types/array/module.f.mjs +0 -95
  311. package/out/types/array/test.f.d.mts +0 -10
  312. package/out/types/array/test.f.mjs +0 -116
  313. package/out/types/bigfloat/module.f.d.mts +0 -6
  314. package/out/types/bigfloat/module.f.mjs +0 -77
  315. package/out/types/bigfloat/test.f.d.mts +0 -6
  316. package/out/types/bigfloat/test.f.mjs +0 -349
  317. package/out/types/bigint/module.f.d.mts +0 -29
  318. package/out/types/bigint/module.f.mjs +0 -114
  319. package/out/types/bigint/test.f.d.mts +0 -16
  320. package/out/types/bigint/test.f.mjs +0 -199
  321. package/out/types/bit_vec/module.f.d.mts +0 -72
  322. package/out/types/bit_vec/module.f.mjs +0 -83
  323. package/out/types/bit_vec/test.f.d.mts +0 -9
  324. package/out/types/bit_vec/test.f.mjs +0 -60
  325. package/out/types/btree/find/module.f.d.mts +0 -36
  326. package/out/types/btree/find/module.f.mjs +0 -137
  327. package/out/types/btree/find/test.f.d.mts +0 -2
  328. package/out/types/btree/find/test.f.mjs +0 -156
  329. package/out/types/btree/module.f.d.mts +0 -5
  330. package/out/types/btree/module.f.mjs +0 -34
  331. package/out/types/btree/remove/module.f.d.mts +0 -14
  332. package/out/types/btree/remove/module.f.mjs +0 -209
  333. package/out/types/btree/remove/test.f.d.mts +0 -7
  334. package/out/types/btree/remove/test.f.mjs +0 -638
  335. package/out/types/btree/set/module.f.d.mts +0 -5
  336. package/out/types/btree/set/module.f.mjs +0 -114
  337. package/out/types/btree/set/test.f.d.mts +0 -2
  338. package/out/types/btree/set/test.f.mjs +0 -390
  339. package/out/types/btree/test.f.d.mts +0 -13
  340. package/out/types/btree/test.f.mjs +0 -83
  341. package/out/types/btree/types/module.f.d.mts +0 -14
  342. package/out/types/btree/types/module.f.mjs +0 -50
  343. package/out/types/byte_set/module.f.d.mts +0 -25
  344. package/out/types/byte_set/module.f.mjs +0 -42
  345. package/out/types/byte_set/test.f.d.mts +0 -13
  346. package/out/types/byte_set/test.f.mjs +0 -123
  347. package/out/types/function/compare/module.f.d.mts +0 -23
  348. package/out/types/function/compare/module.f.mjs +0 -22
  349. package/out/types/function/compare/test.f.d.mts +0 -2
  350. package/out/types/function/compare/test.f.mjs +0 -8
  351. package/out/types/function/module.f.d.mts +0 -51
  352. package/out/types/function/module.f.mjs +0 -44
  353. package/out/types/function/operator/module.f.d.mts +0 -60
  354. package/out/types/function/operator/module.f.mjs +0 -60
  355. package/out/types/function/test.f.d.mts +0 -2
  356. package/out/types/function/test.f.mjs +0 -15
  357. package/out/types/list/module.f.d.mts +0 -82
  358. package/out/types/list/module.f.mjs +0 -269
  359. package/out/types/list/test.f.d.mts +0 -38
  360. package/out/types/list/test.f.mjs +0 -401
  361. package/out/types/map/module.f.d.mts +0 -21
  362. package/out/types/map/module.f.mjs +0 -54
  363. package/out/types/map/test.f.d.mts +0 -5
  364. package/out/types/map/test.f.mjs +0 -115
  365. package/out/types/nibble_set/module.f.d.mts +0 -16
  366. package/out/types/nibble_set/module.f.mjs +0 -19
  367. package/out/types/nibble_set/test.f.d.mts +0 -13
  368. package/out/types/nibble_set/test.f.mjs +0 -90
  369. package/out/types/nullable/module.f.d.mts +0 -9
  370. package/out/types/nullable/module.f.mjs +0 -9
  371. package/out/types/nullable/test.f.d.mts +0 -2
  372. package/out/types/nullable/test.f.mjs +0 -12
  373. package/out/types/number/module.f.d.mts +0 -7
  374. package/out/types/number/module.f.mjs +0 -12
  375. package/out/types/number/test.f.d.mts +0 -11
  376. package/out/types/number/test.f.mjs +0 -126
  377. package/out/types/object/module.f.d.mts +0 -22
  378. package/out/types/object/module.f.mjs +0 -27
  379. package/out/types/object/test.f.d.mts +0 -5
  380. package/out/types/object/test.f.mjs +0 -17
  381. package/out/types/range/module.f.d.mts +0 -6
  382. package/out/types/range/module.f.mjs +0 -6
  383. package/out/types/range/test.f.d.mts +0 -2
  384. package/out/types/range/test.f.mjs +0 -18
  385. package/out/types/range_map/module.f.d.mts +0 -19
  386. package/out/types/range_map/module.f.mjs +0 -84
  387. package/out/types/range_map/test.f.d.mts +0 -6
  388. package/out/types/range_map/test.f.mjs +0 -201
  389. package/out/types/result/module.d.mts +0 -7
  390. package/out/types/result/module.f.d.mts +0 -22
  391. package/out/types/result/module.f.mjs +0 -25
  392. package/out/types/result/module.mjs +0 -16
  393. package/out/types/sorted_list/module.f.d.mts +0 -53
  394. package/out/types/sorted_list/module.f.mjs +0 -102
  395. package/out/types/sorted_list/test.f.d.mts +0 -5
  396. package/out/types/sorted_list/test.f.mjs +0 -66
  397. package/out/types/sorted_set/module.f.d.mts +0 -19
  398. package/out/types/sorted_set/module.f.mjs +0 -29
  399. package/out/types/sorted_set/test.f.d.mts +0 -6
  400. package/out/types/sorted_set/test.f.mjs +0 -80
  401. package/out/types/string/module.f.d.mts +0 -9
  402. package/out/types/string/module.f.mjs +0 -17
  403. package/out/types/string/test.f.d.mts +0 -15
  404. package/out/types/string/test.f.mjs +0 -58
  405. package/out/types/string_set/module.f.d.mts +0 -13
  406. package/out/types/string_set/module.f.mjs +0 -29
  407. package/out/types/string_set/test.f.d.mts +0 -5
  408. package/out/types/string_set/test.f.mjs +0 -65
  409. package/text/module.f.mjs +0 -27
  410. package/text/utf16/module.f.mjs +0 -96
  411. package/types/array/module.f.mjs +0 -119
  412. package/types/bit_vec/module.f.mjs +0 -90
  413. package/types/bit_vec/test.f.mjs +0 -41
  414. package/types/btree/find/module.f.mjs +0 -125
  415. package/types/btree/types/module.f.mjs +0 -64
  416. package/types/byte_set/module.f.mjs +0 -61
  417. package/types/function/compare/module.f.mjs +0 -29
  418. package/types/function/module.f.mjs +0 -50
  419. package/types/function/operator/module.f.mjs +0 -78
  420. package/types/function/test.f.mjs +0 -17
  421. package/types/list/module.f.mjs +0 -320
  422. package/types/map/module.f.mjs +0 -67
  423. package/types/nibble_set/module.f.mjs +0 -28
  424. package/types/nullable/module.f.mjs +0 -11
  425. package/types/number/module.f.mjs +0 -16
  426. package/types/object/module.f.mjs +0 -33
  427. package/types/range/module.f.mjs +0 -8
  428. package/types/range_map/module.f.mjs +0 -84
  429. package/types/result/module.f.mjs +0 -28
  430. package/types/sorted_list/module.f.mjs +0 -107
  431. package/types/sorted_set/module.f.mjs +0 -38
  432. package/types/string/module.f.mjs +0 -22
  433. package/types/string_set/module.f.mjs +0 -36
@@ -1,23 +0,0 @@
1
- export function rust(library: types.Library): Text.Block;
2
- export type OptionalProperty<T> = T | {};
3
- export type Where = {
4
- readonly where: readonly string[];
5
- };
6
- export type WhereContent = OptionalProperty<Where> & {
7
- readonly content: Text.Block;
8
- };
9
- export type Impl = {
10
- readonly param?: string;
11
- readonly trait: string;
12
- readonly type: string;
13
- readonly where?: readonly string[];
14
- readonly content: Text.Block;
15
- };
16
- export type Trait = {
17
- readonly pub?: true;
18
- readonly type: string;
19
- readonly where?: readonly string[];
20
- readonly content: Text.Block;
21
- };
22
- import * as types from '../types/module.f.mjs';
23
- import * as Text from '../../text/module.f.mjs';
@@ -1,224 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- /**
3
- * This module generates Rust code for COM interop from a high-level type library definition.
4
- *
5
- * The module provides functions to define structs, traits, and implementations in Rust,
6
- * specifically tailored for `nanocom` interoperation.
7
- */
8
- import * as types from '../types/module.f.mjs';
9
- const { paramList } = types;
10
- import * as Text from '../../text/module.f.mjs';
11
- import * as O from '../../types/object/module.f.mjs';
12
- import * as list from '../../types/list/module.f.mjs';
13
- const { flat, map, flatMap } = list;
14
- const { entries } = Object;
15
- import * as func from '../../types/function/module.f.mjs';
16
- const { fn } = func;
17
- import * as string from '../../types/string/module.f.mjs';
18
- const { join } = string;
19
- /** @type {(field: string) => string} */
20
- const rustField = field => `pub ${field},`;
21
- const mapRustField = map(rustField);
22
- /** @type {(b: list.Thunk<string>) => (name: string) => Text.Block} */
23
- const rustStruct = b => name => [`#[repr(C)]`, `pub struct ${name} {`, mapRustField(b), `}`];
24
- const commaJoin = join(', ');
25
- /** @type {(name: string) => string} */
26
- const ref = name => `${name}::Ref`;
27
- /** @type {(name: string) => string} */
28
- const obj = name => `&${name}::Object`;
29
- const self = ['&self'];
30
- /** @type {(p: types.Field) => string} */
31
- const paramName = ([n]) => n;
32
- /** @type {(p: types.FieldArray) => list.Thunk<string>} */
33
- const callList = p => map(paramName)(paramList(p));
34
- /** @type {(p: types.FieldArray) => string} */
35
- const call = p => commaJoin(callList(p));
36
- /** @type {(p: types.FieldArray) => string} */
37
- const virtualCall = p => commaJoin(flat([['self'], callList(p)]));
38
- const super_ = 'super::';
39
- /** @type {(m: types.Method) => string} */
40
- const assign = ([n]) => `${n}: Self::${n},`;
41
- const mapAssign = map(assign);
42
- const this_ = ['this: &Object'];
43
- /** @type {(n: string) => string} */
44
- const rustType = n => `pub type ${n} = nanocom::${n}<Interface>;`;
45
- /**
46
- * @template T
47
- * @typedef {T|{}} OptionalProperty
48
- */
49
- /** @typedef {{readonly where: readonly string[]}} Where */
50
- /**
51
- * @typedef {OptionalProperty<Where> & {readonly content: Text.Block}} WhereContent
52
- */
53
- /** @type {(h: string) => (wh: WhereContent) => Text.Block} */
54
- const whereContent = h => wh => {
55
- const w = 'where' in wh ? [
56
- h,
57
- `where`,
58
- mapComma(wh.where),
59
- '{'
60
- ] : [`${h} {`];
61
- const x = [
62
- wh.content,
63
- '}',
64
- ];
65
- return flat([w, x]);
66
- };
67
- /**
68
- * @typedef {{
69
- * readonly param?: string
70
- * readonly trait: string
71
- * readonly type: string
72
- * readonly where?: readonly string[]
73
- * readonly content: Text.Block
74
- * }} Impl
75
- */
76
- /** @type {(impl: Impl) => Text.Block} */
77
- const rustImpl = i => {
78
- const p = 'param' in i ? `<${i.param}>` : '';
79
- const header = `impl${p} ${i.trait} for ${i.type}`;
80
- return whereContent(header)(i);
81
- };
82
- /**
83
- * @typedef {{
84
- * readonly pub?: true
85
- * readonly type: string
86
- * readonly where?: readonly string[]
87
- * readonly content: Text.Block
88
- * }} Trait
89
- */
90
- /** @type {(s: string) => string} */
91
- const comma = s => `${s},`;
92
- const mapComma = map(comma);
93
- /** @type {(t: Trait) => Text.Block} */
94
- const trait = t => {
95
- const p = t.pub === true ? 'pub ' : '';
96
- const h = `${p}trait ${t.type}`;
97
- return whereContent(h)(t);
98
- };
99
- /** @type {(t: Trait) => Text.Block} */
100
- const traitImpl = t => {
101
- const i = rustImpl({
102
- param: 'T',
103
- trait: t.type,
104
- type: 'T',
105
- where,
106
- content: [],
107
- });
108
- return flat([trait({ ...t, where }), i]);
109
- };
110
- const where = ['Self: nanocom::Class<Interface = Interface>', 'nanocom::CObject<Self>: Ex'];
111
- /**
112
- * Generates Rust code for the given type library.
113
- *
114
- * @param {types.Library} library - The library of type definitions to generate Rust code for.
115
- * @returns {Text.Block} - A block of Rust code representing the library.
116
- */
117
- export const rust = library => {
118
- /** @type {(p: string) => (o: (_: string) => string) => (t: types.Type) => string} */
119
- const type = p => {
120
- /** @type {(o: (_: string) => string) => (t: types.Type) => string} */
121
- const f = o => t => {
122
- if (typeof t === 'string') {
123
- return t;
124
- }
125
- if (t.length === 2) {
126
- return `*const ${f(ref)(t[1])}`;
127
- }
128
- const [id] = t;
129
- const fullId = `${p}${id}`;
130
- return 'interface' in library[id] ? o(fullId) : fullId;
131
- };
132
- return f;
133
- };
134
- /** @type {(p: string) => (o: (_: string) => string) => (f: types.Field) => string} */
135
- const pf = p => o => ([name, t]) => `${name}: ${type(p)(o)(t)}`;
136
- const param = pf(super_)(obj);
137
- const mapParam = map(param);
138
- const mapField = map(pf('')(ref));
139
- /** @type {(fa: types.FieldArray) => (name: string) => Text.Block} */
140
- const struct = fn(entries)
141
- .then(mapField)
142
- .then(rustStruct)
143
- .result;
144
- /** @type {(first: readonly string[]) => (p: types.FieldArray) => string} */
145
- const func = first => p => {
146
- const resultStr = '_' in p ? ` -> ${type(super_)(ref)(p._)}` : '';
147
- const params = commaJoin(flat([first, mapParam(paramList(p))]));
148
- return `(${params})${resultStr}`;
149
- };
150
- /** @type {(n: string) => (p: types.FieldArray) => string} */
151
- const virtualFnType = n => p => `extern "system" fn${n}${func(this_)(p)}`;
152
- /** @type {(m: types.Method) => string} */
153
- const virtualFn = ([n, p]) => `${n}: unsafe ${virtualFnType('')(p)}`;
154
- const mapVirtualFn = map(virtualFn);
155
- /** @type {(m: types.Method) => string} */
156
- const headerFn = ([n, p]) => `fn ${n}${func(self)(p)}`;
157
- /** @type {(m: types.Method) => string} */
158
- const traitFn = m => `${headerFn(m)};`;
159
- const mapTraitFn = map(traitFn);
160
- /** @type {(m: types.Method) => Text.Block} */
161
- const implFn = m => {
162
- const [n, p] = m;
163
- return [
164
- `${headerFn(m)} {`,
165
- [`unsafe { (self.interface().${n})(${virtualCall(p)}) }`],
166
- '}'
167
- ];
168
- };
169
- const flatMapImplFn = flatMap(implFn);
170
- /** @type {(m: types.Method) => Text.Block} */
171
- const impl = ([n, p]) => {
172
- const type = virtualFnType(` ${n}`)(p);
173
- return [
174
- `${type} {`,
175
- [`unsafe { nanocom::CObject::from_object_unchecked(this) }.${n}(${call(p)})`],
176
- '}'
177
- ];
178
- };
179
- const flatMapImpl = flatMap(impl);
180
- /** @type {(i: types.Interface) => (name: string) => Text.Block} */
181
- const interface_ = ({ interface: i, guid }) => name => {
182
- const e = entries(i);
183
- return [
184
- `pub mod ${name} {`,
185
- [
186
- rustType('Object'),
187
- rustType('Ref'),
188
- rustType('Vmt'),
189
- ],
190
- rustStruct(mapVirtualFn(e))('Interface'),
191
- rustImpl({
192
- trait: 'nanocom::Interface',
193
- type: 'Interface',
194
- content: [`const GUID: nanocom::GUID = 0x${guid.replaceAll('-', '_')};`]
195
- }),
196
- trait({ pub: true, type: 'Ex', content: mapTraitFn(e) }),
197
- rustImpl({
198
- trait: 'Ex',
199
- type: 'Object',
200
- content: flatMapImplFn(e)
201
- }),
202
- traitImpl({
203
- pub: true,
204
- type: 'ClassEx',
205
- content: ['const VMT: Vmt = Vmt {',
206
- ['iunknown: nanocom::CObject::<Self>::IUNKNOWN,',
207
- 'interface: Interface {',
208
- mapAssign(e),
209
- '},',
210
- ],
211
- '};'
212
- ]
213
- }),
214
- traitImpl({
215
- type: 'PrivateClassEx',
216
- content: flatMapImpl(e)
217
- }),
218
- '}'
219
- ];
220
- };
221
- /** @type {(type: O.Entry<types.Definition>) => Text.Block} */
222
- const def = ([name, type]) => ('interface' in type ? interface_(type) : struct(type.struct))(name);
223
- return flat([['#![allow(non_snake_case)]'], flatMap(def)(entries(library))]);
224
- };
@@ -1,2 +0,0 @@
1
- declare function _default(): void;
2
- export default _default;
@@ -1,123 +0,0 @@
1
- import rust from './testlib.f.mjs';
2
- export default () => {
3
- const e = '#![allow(non_snake_case)]\n' +
4
- '#[repr(C)]\n' +
5
- 'pub struct Slice {\n' +
6
- ' pub Start: *const u8,\n' +
7
- ' pub Size: usize,\n' +
8
- '}\n' +
9
- '#[repr(C)]\n' +
10
- 'pub struct ManagedStruct {\n' +
11
- ' pub M: IMy::Ref,\n' +
12
- '}\n' +
13
- 'pub mod IMy {\n' +
14
- ' pub type Object = nanocom::Object<Interface>;\n' +
15
- ' pub type Ref = nanocom::Ref<Interface>;\n' +
16
- ' pub type Vmt = nanocom::Vmt<Interface>;\n' +
17
- ' #[repr(C)]\n' +
18
- ' pub struct Interface {\n' +
19
- ' pub GetSlice: unsafe extern "system" fn(this: &Object) -> super::Slice,\n' +
20
- ' pub SetSlice: unsafe extern "system" fn(this: &Object, slice: super::Slice),\n' +
21
- ' pub GetUnsafe: unsafe extern "system" fn(this: &Object) -> *const bool,\n' +
22
- ' pub SetUnsafe: unsafe extern "system" fn(this: &Object, p: *const super::Slice, size: u32),\n' +
23
- ' pub Some: unsafe extern "system" fn(this: &Object, p: &super::IMy::Object) -> bool,\n' +
24
- ' pub GetIMy: unsafe extern "system" fn(this: &Object, a: u16, b: i16) -> super::IMy::Ref,\n' +
25
- ' pub SetManagedStruct: unsafe extern "system" fn(this: &Object, a: super::ManagedStruct),\n' +
26
- ' }\n' +
27
- ' impl nanocom::Interface for Interface {\n' +
28
- ' const GUID: nanocom::GUID = 0xC66FB270_2D80_49AD_BB6E_88C1F90B805D;\n' +
29
- ' }\n' +
30
- ' pub trait Ex {\n' +
31
- ' fn GetSlice(&self) -> super::Slice;\n' +
32
- ' fn SetSlice(&self, slice: super::Slice);\n' +
33
- ' fn GetUnsafe(&self) -> *const bool;\n' +
34
- ' fn SetUnsafe(&self, p: *const super::Slice, size: u32);\n' +
35
- ' fn Some(&self, p: &super::IMy::Object) -> bool;\n' +
36
- ' fn GetIMy(&self, a: u16, b: i16) -> super::IMy::Ref;\n' +
37
- ' fn SetManagedStruct(&self, a: super::ManagedStruct);\n' +
38
- ' }\n' +
39
- ' impl Ex for Object {\n' +
40
- ' fn GetSlice(&self) -> super::Slice {\n' +
41
- ' unsafe { (self.interface().GetSlice)(self) }\n' +
42
- ' }\n' +
43
- ' fn SetSlice(&self, slice: super::Slice) {\n' +
44
- ' unsafe { (self.interface().SetSlice)(self, slice) }\n' +
45
- ' }\n' +
46
- ' fn GetUnsafe(&self) -> *const bool {\n' +
47
- ' unsafe { (self.interface().GetUnsafe)(self) }\n' +
48
- ' }\n' +
49
- ' fn SetUnsafe(&self, p: *const super::Slice, size: u32) {\n' +
50
- ' unsafe { (self.interface().SetUnsafe)(self, p, size) }\n' +
51
- ' }\n' +
52
- ' fn Some(&self, p: &super::IMy::Object) -> bool {\n' +
53
- ' unsafe { (self.interface().Some)(self, p) }\n' +
54
- ' }\n' +
55
- ' fn GetIMy(&self, a: u16, b: i16) -> super::IMy::Ref {\n' +
56
- ' unsafe { (self.interface().GetIMy)(self, a, b) }\n' +
57
- ' }\n' +
58
- ' fn SetManagedStruct(&self, a: super::ManagedStruct) {\n' +
59
- ' unsafe { (self.interface().SetManagedStruct)(self, a) }\n' +
60
- ' }\n' +
61
- ' }\n' +
62
- ' pub trait ClassEx\n' +
63
- ' where\n' +
64
- ' Self: nanocom::Class<Interface = Interface>,\n' +
65
- ' nanocom::CObject<Self>: Ex,\n' +
66
- ' {\n' +
67
- ' const VMT: Vmt = Vmt {\n' +
68
- ' iunknown: nanocom::CObject::<Self>::IUNKNOWN,\n' +
69
- ' interface: Interface {\n' +
70
- ' GetSlice: Self::GetSlice,\n' +
71
- ' SetSlice: Self::SetSlice,\n' +
72
- ' GetUnsafe: Self::GetUnsafe,\n' +
73
- ' SetUnsafe: Self::SetUnsafe,\n' +
74
- ' Some: Self::Some,\n' +
75
- ' GetIMy: Self::GetIMy,\n' +
76
- ' SetManagedStruct: Self::SetManagedStruct,\n' +
77
- ' },\n' +
78
- ' };\n' +
79
- ' }\n' +
80
- ' impl<T> ClassEx for T\n' +
81
- ' where\n' +
82
- ' Self: nanocom::Class<Interface = Interface>,\n' +
83
- ' nanocom::CObject<Self>: Ex,\n' +
84
- ' {\n' +
85
- ' }\n' +
86
- ' trait PrivateClassEx\n' +
87
- ' where\n' +
88
- ' Self: nanocom::Class<Interface = Interface>,\n' +
89
- ' nanocom::CObject<Self>: Ex,\n' +
90
- ' {\n' +
91
- ' extern "system" fn GetSlice(this: &Object) -> super::Slice {\n' +
92
- ' unsafe { nanocom::CObject::from_object_unchecked(this) }.GetSlice()\n' +
93
- ' }\n' +
94
- ' extern "system" fn SetSlice(this: &Object, slice: super::Slice) {\n' +
95
- ' unsafe { nanocom::CObject::from_object_unchecked(this) }.SetSlice(slice)\n' +
96
- ' }\n' +
97
- ' extern "system" fn GetUnsafe(this: &Object) -> *const bool {\n' +
98
- ' unsafe { nanocom::CObject::from_object_unchecked(this) }.GetUnsafe()\n' +
99
- ' }\n' +
100
- ' extern "system" fn SetUnsafe(this: &Object, p: *const super::Slice, size: u32) {\n' +
101
- ' unsafe { nanocom::CObject::from_object_unchecked(this) }.SetUnsafe(p, size)\n' +
102
- ' }\n' +
103
- ' extern "system" fn Some(this: &Object, p: &super::IMy::Object) -> bool {\n' +
104
- ' unsafe { nanocom::CObject::from_object_unchecked(this) }.Some(p)\n' +
105
- ' }\n' +
106
- ' extern "system" fn GetIMy(this: &Object, a: u16, b: i16) -> super::IMy::Ref {\n' +
107
- ' unsafe { nanocom::CObject::from_object_unchecked(this) }.GetIMy(a, b)\n' +
108
- ' }\n' +
109
- ' extern "system" fn SetManagedStruct(this: &Object, a: super::ManagedStruct) {\n' +
110
- ' unsafe { nanocom::CObject::from_object_unchecked(this) }.SetManagedStruct(a)\n' +
111
- ' }\n' +
112
- ' }\n' +
113
- ' impl<T> PrivateClassEx for T\n' +
114
- ' where\n' +
115
- ' Self: nanocom::Class<Interface = Interface>,\n' +
116
- ' nanocom::CObject<Self>: Ex,\n' +
117
- ' {\n' +
118
- ' }\n' +
119
- '}';
120
- if (rust !== e) {
121
- throw rust;
122
- }
123
- };
@@ -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 { rust } from './module.f.mjs';
6
- import library from '../types/testlib.f.mjs';
7
- export default join('\n')(flat(' ')(rust(library)));
@@ -1 +0,0 @@
1
- export {};
@@ -1,26 +0,0 @@
1
- declare namespace _default {
2
- export { cpp };
3
- export { cs };
4
- export { rust };
5
- }
6
- export default _default;
7
- export type Platform = "aix" | "android" | "darwin" | "freebsd" | "haiku" | "linux" | "openbsd" | "sunos" | "win32" | "cygwin" | "netbsd";
8
- export type NodeJs = {
9
- readonly dirname: string;
10
- readonly platform: Platform;
11
- };
12
- export type Output = {
13
- readonly file: {
14
- readonly name: string;
15
- readonly content: string;
16
- };
17
- readonly line: list.List<list.List<string>>;
18
- };
19
- export type Func = (nodejs: NodeJs) => Output;
20
- /** @type {Func} */
21
- declare const cpp: Func;
22
- /** @type {Func} */
23
- declare const cs: Func;
24
- /** @type {Func} */
25
- declare const rust: Func;
26
- import * as list from '../../types/list/module.f.mjs';
@@ -1,98 +0,0 @@
1
- import * as list from '../../types/list/module.f.mjs';
2
- const { flat } = list;
3
- import cppContent from '../cpp/testlib.f.mjs';
4
- import csContent from '../cs/testlib.f.mjs';
5
- import rustContent from '../rust/testlib.f.mjs';
6
- /**
7
- * @typedef {|
8
- * 'aix' |
9
- * 'android' |
10
- * 'darwin' |
11
- * 'freebsd' |
12
- * 'haiku' |
13
- * 'linux' |
14
- * 'openbsd' |
15
- * 'sunos' |
16
- * 'win32' |
17
- * 'cygwin' |
18
- * 'netbsd'
19
- * } Platform
20
- */
21
- /**
22
- * @typedef {{
23
- * readonly dirname: string
24
- * readonly platform: Platform
25
- * }} NodeJs
26
- */
27
- /**
28
- * @typedef {{
29
- * readonly file: {
30
- * readonly name: string
31
- * readonly content: string
32
- * }
33
- * readonly line: list.List<list.List<string>>
34
- * }} Output
35
- */
36
- /** @typedef {(nodejs: NodeJs) => Output} Func */
37
- /** @type {(platform: Platform) => readonly string[]} */
38
- const flags = platform => {
39
- switch (platform) {
40
- case 'win32':
41
- return [];
42
- case 'linux':
43
- return ['-std=c++17', '-lstdc++', '-fPIC'];
44
- default:
45
- return ['-std=c++17', '-lc++'];
46
- }
47
- };
48
- /** @type {(platform: Platform) => (name: string) => string} */
49
- const output = platform => name => {
50
- switch (platform) {
51
- case 'win32': return `${name}.dll`;
52
- case 'darwin': return `lib${name}.dylib`;
53
- default: return `lib${name}.so`;
54
- }
55
- };
56
- /** @type {Func} */
57
- const cpp = ({ dirname, platform }) => ({
58
- file: {
59
- name: `${dirname}/cpp/_result.hpp`,
60
- content: cppContent(),
61
- },
62
- line: [
63
- flat([
64
- ['clang', '-shared', '-o', output(platform)('testc')],
65
- flags(platform),
66
- [`${dirname}/cpp/main.cpp`],
67
- ]),
68
- ],
69
- });
70
- /** @type {Func} */
71
- const cs = ({ dirname, platform }) => ({
72
- file: {
73
- name: `${dirname}/cs/_result.cs`,
74
- content: csContent,
75
- },
76
- line: [
77
- platform === 'win32'
78
- ? ['dotnet', 'run', '--project', `${dirname}/cs/cs.csproj`]
79
- // .Net on Linux and MacOS doesn't properly support COM object marshalling
80
- : ['dotnet', 'build', `${dirname}/cs/cs.csproj`]
81
- ],
82
- });
83
- /** @type {Func} */
84
- const rust = ({ dirname }) => ({
85
- file: {
86
- name: `${dirname}/rust/src/_result.rs`,
87
- content: rustContent,
88
- },
89
- line: [['cargo', 'build' /**, '--locked' */]]
90
- });
91
- export default {
92
- /** @readonly */
93
- cpp,
94
- /** @readonly */
95
- cs,
96
- /** @readonly */
97
- rust,
98
- };
@@ -1,40 +0,0 @@
1
- import { writeFileSync } from 'node:fs';
2
- import { execSync } from 'node:child_process';
3
- import { platform, exit } from 'node:process';
4
- import build, * as Build from './build.f.mjs';
5
- const { cpp, cs, rust } = build;
6
- import * as string from '../../types/string/module.f.mjs';
7
- const { join } = string;
8
- const { log, error } = console;
9
- import * as sgr from '../../text/sgr/module.f.mjs';
10
- const { bold, reset } = sgr.codes;
11
- import * as list from '../../types/list/module.f.mjs';
12
- import { fileURLToPath } from 'node:url';
13
- import { dirname } from 'node:path';
14
- const __filename = fileURLToPath(import.meta.url);
15
- const __dirname = dirname(__filename);
16
- const nodeJs = {
17
- dirname: __dirname,
18
- platform,
19
- };
20
- /** @type {(f: Build.Func) => void} */
21
- const run = f => {
22
- const { file: { name, content }, line } = f(nodeJs);
23
- log(`${bold}writing: ${name}${reset}`);
24
- writeFileSync(name, content);
25
- for (const i of list.iterable(line)) {
26
- const cmd = join(' ')(i);
27
- log(`${bold}running: ${cmd}${reset}`);
28
- try {
29
- log(execSync(cmd).toString());
30
- }
31
- catch (e) {
32
- // @ts-ignore
33
- error(e.output.toString());
34
- exit(-1);
35
- }
36
- }
37
- };
38
- run(cpp);
39
- run(rust);
40
- run(cs);
@@ -1,23 +0,0 @@
1
- /** @type {(fa: FieldArray) => list.List<Field> } */
2
- export const paramList: (fa: FieldArray) => list.List<Field>;
3
- /** @type {<T>(v: T) => (f: (type: Type) => T) => (fa: FieldArray) => T} */
4
- export const result: <T>(v: T) => (f: (type: Type) => T) => (fa: FieldArray) => T;
5
- export type Library = { readonly [k in string]: Definition; };
6
- export type Definition = Struct | Interface;
7
- export type Struct = {
8
- readonly struct: FieldArray;
9
- };
10
- export type FieldArray = { readonly [k in string]: Type; };
11
- export type Field = O.Entry<Type>;
12
- export type Interface = {
13
- readonly interface: MethodArray;
14
- readonly guid: string;
15
- };
16
- export type MethodArray = { readonly [k in string]: FieldArray; };
17
- export type Method = O.Entry<FieldArray>;
18
- export type Type = BaseType | Id | Pointer;
19
- export type Id = readonly [string];
20
- export type BaseType = "u8" | "i8" | "u16" | "i16" | "u32" | "i32" | "u64" | "i64" | "usize" | "isize" | "f32" | "f64" | "bool";
21
- export type Pointer = readonly ["*", Type];
22
- import * as list from '../../types/list/module.f.mjs';
23
- import * as O from '../../types/object/module.f.mjs';
@@ -1,51 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- import * as O from '../../types/object/module.f.mjs';
3
- import * as list from '../../types/list/module.f.mjs';
4
- import * as f from '../../types/function/module.f.mjs';
5
- const { compose } = f;
6
- const { filter } = list;
7
- const { entries } = Object;
8
- /** @typedef {{readonly[k in string]: Definition}} Library */
9
- /** @typedef {Struct|Interface} Definition */
10
- /**
11
- * @typedef {{
12
- * readonly struct: FieldArray
13
- * }} Struct
14
- */
15
- /** @typedef {{readonly[k in string]: Type}} FieldArray */
16
- /** @typedef {O.Entry<Type>} Field */
17
- /**
18
- * @typedef {{
19
- * readonly interface: MethodArray
20
- * readonly guid: string
21
- * }} Interface
22
- */
23
- /** @typedef {{readonly[k in string]: FieldArray}} MethodArray */
24
- /** @typedef {O.Entry<FieldArray>} Method */
25
- /** @typedef {BaseType|Id|Pointer} Type */
26
- /** @typedef {readonly[string]} Id */
27
- /**
28
- * @typedef {|
29
- * 'u8'|
30
- * 'i8'|
31
- * 'u16'|
32
- * 'i16'|
33
- * 'u32'|
34
- * 'i32'|
35
- * 'u64'|
36
- * 'i64'|
37
- * 'usize'|
38
- * 'isize'|
39
- * 'f32'|
40
- * 'f64'|
41
- * 'bool'
42
- * } BaseType
43
- */
44
- /** @typedef {readonly['*', Type]} Pointer */
45
- /** @type {(kv: O.Entry<Type>) => boolean} */
46
- const isParam = ([name]) => name !== '_';
47
- const filterParam = filter(isParam);
48
- /** @type {(fa: FieldArray) => list.List<Field> } */
49
- export const paramList = compose(entries)(filterParam);
50
- /** @type {<T>(v: T) => (f: (type: Type) => T) => (fa: FieldArray) => T} */
51
- export const result = v => f => fa => '_' in fa ? f(fa._) : v;
@@ -1,44 +0,0 @@
1
- declare const _default: {
2
- Slice: {
3
- struct: {
4
- Start: ["*", "u8"];
5
- Size: "usize";
6
- };
7
- };
8
- ManagedStruct: {
9
- struct: {
10
- M: ["IMy"];
11
- };
12
- };
13
- IMy: {
14
- guid: string;
15
- interface: {
16
- GetSlice: {
17
- _: ["Slice"];
18
- };
19
- SetSlice: {
20
- slice: ["Slice"];
21
- };
22
- GetUnsafe: {
23
- _: ["*", "bool"];
24
- };
25
- SetUnsafe: {
26
- p: ["*", ["Slice"]];
27
- size: "u32";
28
- };
29
- Some: {
30
- p: ["IMy"];
31
- _: "bool";
32
- };
33
- GetIMy: {
34
- a: "u16";
35
- b: "i16";
36
- _: ["IMy"];
37
- };
38
- SetManagedStruct: {
39
- a: ["ManagedStruct"];
40
- };
41
- };
42
- };
43
- };
44
- export default _default;