functionalscript 0.2.6 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (428) hide show
  1. package/.github/workflows/ci.yml +19 -4
  2. package/CHANGELOG.md +5 -0
  3. package/com/cpp/{module.f.mjs → module.f.ts} +65 -44
  4. package/com/cpp/{test.f.mjs → test.f.ts} +1 -1
  5. package/com/cpp/testlib.f.ts +8 -0
  6. package/com/cs/{module.f.mjs → module.f.ts} +47 -38
  7. package/com/cs/{test.f.mjs → test.f.ts} +2 -2
  8. package/com/cs/testlib.f.ts +8 -0
  9. package/com/rust/module.f.ts +287 -0
  10. package/com/rust/{test.f.mjs → test.f.ts} +1 -1
  11. package/com/rust/testlib.f.ts +8 -0
  12. package/com/test/{build.f.mjs → build.f.ts} +47 -45
  13. package/com/test/{build.mjs → build.ts} +7 -6
  14. package/com/types/module.f.ts +62 -0
  15. package/com/types/{testlib.f.mjs → testlib.f.ts} +2 -3
  16. package/commonjs/build/module.f.ts +100 -0
  17. package/commonjs/build/{test.f.mjs → test.f.ts} +21 -17
  18. package/commonjs/module/function/module.f.ts +13 -0
  19. package/commonjs/module/module.f.ts +41 -0
  20. package/commonjs/module.f.ts +7 -0
  21. package/commonjs/{module.mjs → module.ts} +12 -9
  22. package/commonjs/package/dependencies/module.f.ts +22 -0
  23. package/commonjs/package/dependencies/{test.f.mjs → test.f.ts} +1 -1
  24. package/commonjs/package/module.f.ts +31 -0
  25. package/commonjs/package/{test.f.mjs → test.f.ts} +1 -1
  26. package/commonjs/path/{module.f.mjs → module.f.ts} +72 -67
  27. package/commonjs/path/{test.f.mjs → test.f.ts} +25 -19
  28. package/commonjs/{test.mjs → test.ts} +5 -4
  29. package/crypto/prime_field/{module.f.mjs → module.f.ts} +40 -37
  30. package/crypto/prime_field/{test.f.mjs → test.f.ts} +7 -5
  31. package/crypto/secp/{module.f.mjs → module.f.ts} +44 -44
  32. package/crypto/secp/{test.f.mjs → test.f.ts} +16 -11
  33. package/crypto/sha2/{module.f.mjs → module.f.ts} +61 -46
  34. package/crypto/sha2/{test.f.mjs → test.f.ts} +12 -9
  35. package/deno.json +71 -0
  36. package/dev/README.md +8 -0
  37. package/dev/index.ts +3 -0
  38. package/dev/{module.f.mjs → module.f.ts} +0 -2
  39. package/dev/{module.mjs → module.ts} +65 -60
  40. package/dev/test/{module.f.mjs → module.f.ts} +57 -70
  41. package/dev/{test.f.mjs → test.f.ts} +7 -5
  42. package/dev/test.ts +53 -0
  43. package/djs/{module.f.mjs → module.f.ts} +31 -31
  44. package/djs/parser/{module.f.mjs → module.f.ts} +190 -182
  45. package/djs/parser/{test.f.mjs → test.f.ts} +173 -150
  46. package/djs/serializer/module.f.ts +90 -0
  47. package/djs/{test.f.mjs → test.f.ts} +4 -4
  48. package/djs/tokenizer/{module.f.mjs → module.f.ts} +35 -42
  49. package/djs/tokenizer/{test.f.mjs → test.f.ts} +9 -8
  50. package/fsc/{module.f.mjs → module.f.ts} +41 -44
  51. package/fsc/{test.f.mjs → test.f.ts} +8 -6
  52. package/fsm/module.f.ts +107 -0
  53. package/fsm/{test.f.mjs → test.f.ts} +10 -9
  54. package/html/module.f.ts +108 -0
  55. package/html/{test.f.mjs → test.f.ts} +10 -7
  56. package/issues/lang/3110-function.md +25 -1
  57. package/issues/{test.f.mjs → test.f.ts} +3 -2
  58. package/js/tokenizer/module.f.ts +882 -0
  59. package/js/tokenizer/{test.f.mjs → test.f.ts} +11 -10
  60. package/json/module.f.ts +94 -0
  61. package/json/parser/{module.f.mjs → module.f.ts} +113 -109
  62. package/json/parser/{test.f.mjs → test.f.ts} +10 -9
  63. package/json/serializer/module.f.ts +70 -0
  64. package/json/serializer/{test.f.mjs → test.f.ts} +3 -3
  65. package/json/{test.f.mjs → test.f.ts} +3 -3
  66. package/json/tokenizer/{module.f.mjs → module.f.ts} +29 -36
  67. package/json/tokenizer/{test.f.mjs → test.f.ts} +9 -8
  68. package/nanvm-lib/src/extension.rs +15 -4
  69. package/nanvm-lib/src/interface.rs +7 -10
  70. package/nanvm-lib/src/lib.rs +3 -3
  71. package/nanvm-lib/src/naive.rs +10 -3
  72. package/nanvm-lib/src/nanenum.rs +5 -1
  73. package/nanvm-lib/tests/{test.f.mjs → test.f.ts} +7 -6
  74. package/nodejs/version/{main.mjs → main.ts} +1 -1
  75. package/nodejs/version/module.f.ts +42 -0
  76. package/nodejs/version/{test.f.mjs → test.f.ts} +11 -12
  77. package/package.json +9 -9
  78. package/text/ascii/{module.f.mjs → module.f.ts} +10 -8
  79. package/text/ascii/{test.f.mjs → test.f.ts} +4 -4
  80. package/text/module.f.ts +30 -0
  81. package/text/sgr/{module.f.mjs → module.f.ts} +3 -5
  82. package/text/{test.f.mjs → test.f.ts} +5 -4
  83. package/text/utf16/module.f.ts +108 -0
  84. package/text/utf16/{test.f.mjs → test.f.ts} +7 -6
  85. package/text/utf8/{module.f.mjs → module.f.ts} +29 -23
  86. package/text/utf8/{test.f.mjs → test.f.ts} +4 -4
  87. package/tsconfig.json +4 -1
  88. package/types/array/module.f.ts +89 -0
  89. package/types/array/{test.f.mjs → test.f.ts} +3 -3
  90. package/types/bigfloat/{module.f.mjs → module.f.ts} +25 -20
  91. package/types/bigfloat/{test.f.mjs → test.f.ts} +1 -1
  92. package/types/bigint/{module.f.mjs → module.f.ts} +29 -28
  93. package/types/bigint/{test.f.mjs → test.f.ts} +2 -2
  94. package/types/bit_vec/{module.f.mjs → module.f.ts} +16 -37
  95. package/types/bit_vec/{test.f.mjs → test.f.ts} +1 -1
  96. package/types/btree/find/module.f.ts +92 -0
  97. package/types/btree/find/{test.f.mjs → test.f.ts} +20 -16
  98. package/types/btree/{module.f.mjs → module.f.ts} +9 -9
  99. package/types/btree/remove/{module.f.mjs → module.f.ts} +43 -53
  100. package/types/btree/remove/{test.f.mjs → test.f.ts} +19 -15
  101. package/types/btree/set/{module.f.mjs → module.f.ts} +17 -20
  102. package/types/btree/set/{test.f.mjs → test.f.ts} +96 -66
  103. package/types/btree/{test.f.mjs → test.f.ts} +34 -26
  104. package/types/btree/types/module.f.ts +27 -0
  105. package/types/byte_set/module.f.ts +70 -0
  106. package/types/byte_set/{test.f.mjs → test.f.ts} +8 -7
  107. package/types/function/compare/module.f.ts +26 -0
  108. package/types/function/compare/{test.f.mjs → test.f.ts} +1 -1
  109. package/types/function/module.f.ts +43 -0
  110. package/types/function/operator/module.f.ts +63 -0
  111. package/types/function/test.f.ts +20 -0
  112. package/types/list/module.f.ts +345 -0
  113. package/types/list/{test.f.mjs → test.f.ts} +30 -24
  114. package/types/map/module.f.ts +65 -0
  115. package/types/map/{test.f.mjs → test.f.ts} +6 -5
  116. package/types/nibble_set/module.f.ts +34 -0
  117. package/types/nibble_set/{test.f.mjs → test.f.ts} +3 -3
  118. package/types/nullable/module.f.ts +9 -0
  119. package/types/nullable/{test.f.mjs → test.f.ts} +2 -2
  120. package/types/number/module.f.ts +16 -0
  121. package/types/number/{test.f.mjs → test.f.ts} +7 -5
  122. package/types/object/module.f.ts +30 -0
  123. package/types/object/{test.f.mjs → test.f.ts} +2 -2
  124. package/types/range/module.f.ts +10 -0
  125. package/types/range/{test.f.mjs → test.f.ts} +1 -1
  126. package/types/range_map/module.f.ts +70 -0
  127. package/types/range_map/{test.f.mjs → test.f.ts} +82 -57
  128. package/types/result/module.f.ts +20 -0
  129. package/types/result/{module.mjs → module.ts} +4 -3
  130. package/types/sorted_list/module.f.ts +83 -0
  131. package/types/sorted_list/{test.f.mjs → test.f.ts} +14 -12
  132. package/types/sorted_set/module.f.ts +36 -0
  133. package/types/sorted_set/{test.f.mjs → test.f.ts} +14 -12
  134. package/types/string/module.f.ts +24 -0
  135. package/types/string/{test.f.mjs → test.f.ts} +2 -2
  136. package/types/string_set/module.f.ts +37 -0
  137. package/types/string_set/{test.f.mjs → test.f.ts} +2 -2
  138. package/com/cpp/testlib.f.mjs +0 -8
  139. package/com/cs/testlib.f.mjs +0 -8
  140. package/com/rust/module.f.mjs +0 -272
  141. package/com/rust/testlib.f.mjs +0 -8
  142. package/com/types/module.f.mjs +0 -67
  143. package/commonjs/build/module.f.mjs +0 -100
  144. package/commonjs/module/function/module.f.mjs +0 -21
  145. package/commonjs/module/module.f.mjs +0 -53
  146. package/commonjs/module.f.mjs +0 -11
  147. package/commonjs/package/dependencies/module.f.mjs +0 -22
  148. package/commonjs/package/module.f.mjs +0 -36
  149. package/dev/index.mjs +0 -3
  150. package/dev/test.mjs +0 -60
  151. package/fsm/module.f.mjs +0 -99
  152. package/html/module.f.mjs +0 -102
  153. package/js/tokenizer/module.f.mjs +0 -872
  154. package/json/module.f.mjs +0 -89
  155. package/json/serializer/module.f.mjs +0 -87
  156. package/jsr.json +0 -66
  157. package/nodejs/version/module.f.mjs +0 -47
  158. package/out/com/cpp/module.f.d.mts +0 -7
  159. package/out/com/cpp/module.f.mjs +0 -130
  160. package/out/com/cpp/test.f.d.mts +0 -2
  161. package/out/com/cpp/test.f.mjs +0 -40
  162. package/out/com/cpp/testlib.f.d.mts +0 -2
  163. package/out/com/cpp/testlib.f.mjs +0 -7
  164. package/out/com/cs/module.f.d.mts +0 -7
  165. package/out/com/cs/module.f.mjs +0 -104
  166. package/out/com/cs/test.f.d.mts +0 -2
  167. package/out/com/cs/test.f.mjs +0 -43
  168. package/out/com/cs/testlib.f.d.mts +0 -2
  169. package/out/com/cs/testlib.f.mjs +0 -7
  170. package/out/com/rust/module.f.d.mts +0 -23
  171. package/out/com/rust/module.f.mjs +0 -224
  172. package/out/com/rust/test.f.d.mts +0 -2
  173. package/out/com/rust/test.f.mjs +0 -123
  174. package/out/com/rust/testlib.f.d.mts +0 -2
  175. package/out/com/rust/testlib.f.mjs +0 -7
  176. package/out/com/test/build.d.mts +0 -1
  177. package/out/com/test/build.f.d.mts +0 -26
  178. package/out/com/test/build.f.mjs +0 -98
  179. package/out/com/test/build.mjs +0 -40
  180. package/out/com/types/module.f.d.mts +0 -23
  181. package/out/com/types/module.f.mjs +0 -51
  182. package/out/com/types/testlib.f.d.mts +0 -44
  183. package/out/com/types/testlib.f.mjs +0 -30
  184. package/out/commonjs/build/module.f.d.mts +0 -20
  185. package/out/commonjs/build/module.f.mjs +0 -107
  186. package/out/commonjs/build/test.f.d.mts +0 -3
  187. package/out/commonjs/build/test.f.mjs +0 -102
  188. package/out/commonjs/module/function/module.f.d.mts +0 -5
  189. package/out/commonjs/module/function/module.f.mjs +0 -15
  190. package/out/commonjs/module/module.f.d.mts +0 -52
  191. package/out/commonjs/module/module.f.mjs +0 -48
  192. package/out/commonjs/module.d.mts +0 -3
  193. package/out/commonjs/module.f.d.mts +0 -2
  194. package/out/commonjs/module.f.mjs +0 -10
  195. package/out/commonjs/module.mjs +0 -26
  196. package/out/commonjs/package/dependencies/module.f.d.mts +0 -6
  197. package/out/commonjs/package/dependencies/module.f.mjs +0 -21
  198. package/out/commonjs/package/dependencies/test.f.d.mts +0 -2
  199. package/out/commonjs/package/dependencies/test.f.mjs +0 -15
  200. package/out/commonjs/package/module.f.d.mts +0 -21
  201. package/out/commonjs/package/module.f.mjs +0 -40
  202. package/out/commonjs/package/test.f.d.mts +0 -2
  203. package/out/commonjs/package/test.f.mjs +0 -27
  204. package/out/commonjs/path/module.f.d.mts +0 -60
  205. package/out/commonjs/path/module.f.mjs +0 -171
  206. package/out/commonjs/path/test.f.d.mts +0 -25
  207. package/out/commonjs/path/test.f.mjs +0 -231
  208. package/out/commonjs/test.d.mts +0 -8
  209. package/out/commonjs/test.mjs +0 -87
  210. package/out/crypto/prime_field/module.f.d.mts +0 -67
  211. package/out/crypto/prime_field/module.f.mjs +0 -110
  212. package/out/crypto/prime_field/test.f.d.mts +0 -13
  213. package/out/crypto/prime_field/test.f.mjs +0 -152
  214. package/out/crypto/secp/module.f.d.mts +0 -110
  215. package/out/crypto/secp/module.f.mjs +0 -173
  216. package/out/crypto/secp/test.f.d.mts +0 -5
  217. package/out/crypto/secp/test.f.mjs +0 -78
  218. package/out/crypto/sha2/module.f.d.mts +0 -15
  219. package/out/crypto/sha2/module.f.mjs +0 -172
  220. package/out/crypto/sha2/test.f.d.mts +0 -10
  221. package/out/crypto/sha2/test.f.mjs +0 -86
  222. package/out/dev/index.d.mts +0 -1
  223. package/out/dev/index.mjs +0 -2
  224. package/out/dev/module.d.mts +0 -26
  225. package/out/dev/module.f.d.mts +0 -1
  226. package/out/dev/module.f.mjs +0 -2
  227. package/out/dev/module.mjs +0 -167
  228. package/out/dev/test/module.f.d.mts +0 -25
  229. package/out/dev/test/module.f.mjs +0 -134
  230. package/out/dev/test.d.mts +0 -3
  231. package/out/dev/test.f.d.mts +0 -9
  232. package/out/dev/test.f.mjs +0 -58
  233. package/out/dev/test.mjs +0 -52
  234. package/out/djs/module.f.d.mts +0 -20
  235. package/out/djs/module.f.mjs +0 -79
  236. package/out/djs/parser/module.f.d.mts +0 -56
  237. package/out/djs/parser/module.f.mjs +0 -448
  238. package/out/djs/parser/test.f.d.mts +0 -13
  239. package/out/djs/parser/test.f.mjs +0 -569
  240. package/out/djs/test.f.d.mts +0 -12
  241. package/out/djs/test.f.mjs +0 -84
  242. package/out/djs/tokenizer/module.f.d.mts +0 -13
  243. package/out/djs/tokenizer/module.f.mjs +0 -91
  244. package/out/djs/tokenizer/test.f.d.mts +0 -7
  245. package/out/djs/tokenizer/test.f.mjs +0 -530
  246. package/out/fsc/module.f.d.mts +0 -7
  247. package/out/fsc/module.f.mjs +0 -105
  248. package/out/fsc/test.f.d.mts +0 -4
  249. package/out/fsc/test.f.mjs +0 -19
  250. package/out/fsm/module.f.d.mts +0 -14
  251. package/out/fsm/module.f.mjs +0 -80
  252. package/out/fsm/test.f.d.mts +0 -5
  253. package/out/fsm/test.f.mjs +0 -138
  254. package/out/html/module.f.d.mts +0 -17
  255. package/out/html/module.f.mjs +0 -80
  256. package/out/html/test.f.d.mts +0 -10
  257. package/out/html/test.f.mjs +0 -45
  258. package/out/issues/test.f.d.mts +0 -16
  259. package/out/issues/test.f.mjs +0 -66
  260. package/out/js/tokenizer/module.f.d.mts +0 -163
  261. package/out/js/tokenizer/module.f.mjs +0 -729
  262. package/out/js/tokenizer/test.f.d.mts +0 -9
  263. package/out/js/tokenizer/test.f.mjs +0 -906
  264. package/out/json/module.f.d.mts +0 -33
  265. package/out/json/module.f.mjs +0 -89
  266. package/out/json/parser/module.f.d.mts +0 -32
  267. package/out/json/parser/module.f.mjs +0 -224
  268. package/out/json/parser/test.f.d.mts +0 -5
  269. package/out/json/parser/test.f.mjs +0 -329
  270. package/out/json/serializer/module.f.d.mts +0 -36
  271. package/out/json/serializer/module.f.mjs +0 -67
  272. package/out/json/serializer/test.f.d.mts +0 -8
  273. package/out/json/serializer/test.f.mjs +0 -87
  274. package/out/json/test.f.d.mts +0 -8
  275. package/out/json/test.f.mjs +0 -61
  276. package/out/json/tokenizer/module.f.d.mts +0 -13
  277. package/out/json/tokenizer/module.f.mjs +0 -78
  278. package/out/json/tokenizer/test.f.d.mts +0 -6
  279. package/out/json/tokenizer/test.f.mjs +0 -420
  280. package/out/nanvm-lib/tests/test.f.d.mts +0 -36
  281. package/out/nanvm-lib/tests/test.f.mjs +0 -87
  282. package/out/nodejs/version/main.d.mts +0 -1
  283. package/out/nodejs/version/main.mjs +0 -3
  284. package/out/nodejs/version/module.f.d.mts +0 -12
  285. package/out/nodejs/version/module.f.mjs +0 -34
  286. package/out/nodejs/version/test.f.d.mts +0 -2
  287. package/out/nodejs/version/test.f.mjs +0 -97
  288. package/out/text/ascii/module.f.d.mts +0 -70
  289. package/out/text/ascii/module.f.mjs +0 -154
  290. package/out/text/ascii/test.f.d.mts +0 -4
  291. package/out/text/ascii/test.f.mjs +0 -14
  292. package/out/text/module.f.d.mts +0 -13
  293. package/out/text/module.f.mjs +0 -19
  294. package/out/text/sgr/module.f.d.mts +0 -12
  295. package/out/text/sgr/module.f.mjs +0 -17
  296. package/out/text/test.f.d.mts +0 -2
  297. package/out/text/test.f.mjs +0 -19
  298. package/out/text/utf16/module.f.d.mts +0 -12
  299. package/out/text/utf16/module.f.mjs +0 -86
  300. package/out/text/utf16/test.f.d.mts +0 -6
  301. package/out/text/utf16/test.f.mjs +0 -145
  302. package/out/text/utf8/module.f.d.mts +0 -10
  303. package/out/text/utf8/module.f.mjs +0 -126
  304. package/out/text/utf8/test.f.d.mts +0 -6
  305. package/out/text/utf8/test.f.mjs +0 -175
  306. package/out/types/array/module.f.d.mts +0 -31
  307. package/out/types/array/module.f.mjs +0 -95
  308. package/out/types/array/test.f.d.mts +0 -10
  309. package/out/types/array/test.f.mjs +0 -116
  310. package/out/types/bigfloat/module.f.d.mts +0 -6
  311. package/out/types/bigfloat/module.f.mjs +0 -77
  312. package/out/types/bigfloat/test.f.d.mts +0 -6
  313. package/out/types/bigfloat/test.f.mjs +0 -349
  314. package/out/types/bigint/module.f.d.mts +0 -29
  315. package/out/types/bigint/module.f.mjs +0 -114
  316. package/out/types/bigint/test.f.d.mts +0 -16
  317. package/out/types/bigint/test.f.mjs +0 -199
  318. package/out/types/bit_vec/module.f.d.mts +0 -158
  319. package/out/types/bit_vec/module.f.mjs +0 -194
  320. package/out/types/bit_vec/test.f.d.mts +0 -23
  321. package/out/types/bit_vec/test.f.mjs +0 -210
  322. package/out/types/btree/find/module.f.d.mts +0 -36
  323. package/out/types/btree/find/module.f.mjs +0 -137
  324. package/out/types/btree/find/test.f.d.mts +0 -2
  325. package/out/types/btree/find/test.f.mjs +0 -156
  326. package/out/types/btree/module.f.d.mts +0 -5
  327. package/out/types/btree/module.f.mjs +0 -34
  328. package/out/types/btree/remove/module.f.d.mts +0 -14
  329. package/out/types/btree/remove/module.f.mjs +0 -209
  330. package/out/types/btree/remove/test.f.d.mts +0 -7
  331. package/out/types/btree/remove/test.f.mjs +0 -638
  332. package/out/types/btree/set/module.f.d.mts +0 -5
  333. package/out/types/btree/set/module.f.mjs +0 -114
  334. package/out/types/btree/set/test.f.d.mts +0 -2
  335. package/out/types/btree/set/test.f.mjs +0 -390
  336. package/out/types/btree/test.f.d.mts +0 -13
  337. package/out/types/btree/test.f.mjs +0 -83
  338. package/out/types/btree/types/module.f.d.mts +0 -14
  339. package/out/types/btree/types/module.f.mjs +0 -50
  340. package/out/types/byte_set/module.f.d.mts +0 -25
  341. package/out/types/byte_set/module.f.mjs +0 -42
  342. package/out/types/byte_set/test.f.d.mts +0 -13
  343. package/out/types/byte_set/test.f.mjs +0 -123
  344. package/out/types/function/compare/module.f.d.mts +0 -23
  345. package/out/types/function/compare/module.f.mjs +0 -22
  346. package/out/types/function/compare/test.f.d.mts +0 -2
  347. package/out/types/function/compare/test.f.mjs +0 -8
  348. package/out/types/function/module.f.d.mts +0 -51
  349. package/out/types/function/module.f.mjs +0 -44
  350. package/out/types/function/operator/module.f.d.mts +0 -60
  351. package/out/types/function/operator/module.f.mjs +0 -60
  352. package/out/types/function/test.f.d.mts +0 -2
  353. package/out/types/function/test.f.mjs +0 -15
  354. package/out/types/list/module.f.d.mts +0 -82
  355. package/out/types/list/module.f.mjs +0 -269
  356. package/out/types/list/test.f.d.mts +0 -38
  357. package/out/types/list/test.f.mjs +0 -401
  358. package/out/types/map/module.f.d.mts +0 -21
  359. package/out/types/map/module.f.mjs +0 -54
  360. package/out/types/map/test.f.d.mts +0 -5
  361. package/out/types/map/test.f.mjs +0 -115
  362. package/out/types/nibble_set/module.f.d.mts +0 -16
  363. package/out/types/nibble_set/module.f.mjs +0 -19
  364. package/out/types/nibble_set/test.f.d.mts +0 -13
  365. package/out/types/nibble_set/test.f.mjs +0 -90
  366. package/out/types/nullable/module.f.d.mts +0 -9
  367. package/out/types/nullable/module.f.mjs +0 -9
  368. package/out/types/nullable/test.f.d.mts +0 -2
  369. package/out/types/nullable/test.f.mjs +0 -12
  370. package/out/types/number/module.f.d.mts +0 -7
  371. package/out/types/number/module.f.mjs +0 -12
  372. package/out/types/number/test.f.d.mts +0 -11
  373. package/out/types/number/test.f.mjs +0 -126
  374. package/out/types/object/module.f.d.mts +0 -22
  375. package/out/types/object/module.f.mjs +0 -27
  376. package/out/types/object/test.f.d.mts +0 -5
  377. package/out/types/object/test.f.mjs +0 -17
  378. package/out/types/range/module.f.d.mts +0 -6
  379. package/out/types/range/module.f.mjs +0 -6
  380. package/out/types/range/test.f.d.mts +0 -2
  381. package/out/types/range/test.f.mjs +0 -18
  382. package/out/types/range_map/module.f.d.mts +0 -19
  383. package/out/types/range_map/module.f.mjs +0 -84
  384. package/out/types/range_map/test.f.d.mts +0 -6
  385. package/out/types/range_map/test.f.mjs +0 -201
  386. package/out/types/result/module.d.mts +0 -7
  387. package/out/types/result/module.f.d.mts +0 -22
  388. package/out/types/result/module.f.mjs +0 -25
  389. package/out/types/result/module.mjs +0 -16
  390. package/out/types/sorted_list/module.f.d.mts +0 -53
  391. package/out/types/sorted_list/module.f.mjs +0 -102
  392. package/out/types/sorted_list/test.f.d.mts +0 -5
  393. package/out/types/sorted_list/test.f.mjs +0 -66
  394. package/out/types/sorted_set/module.f.d.mts +0 -19
  395. package/out/types/sorted_set/module.f.mjs +0 -29
  396. package/out/types/sorted_set/test.f.d.mts +0 -6
  397. package/out/types/sorted_set/test.f.mjs +0 -80
  398. package/out/types/string/module.f.d.mts +0 -9
  399. package/out/types/string/module.f.mjs +0 -17
  400. package/out/types/string/test.f.d.mts +0 -15
  401. package/out/types/string/test.f.mjs +0 -58
  402. package/out/types/string_set/module.f.d.mts +0 -13
  403. package/out/types/string_set/module.f.mjs +0 -29
  404. package/out/types/string_set/test.f.d.mts +0 -5
  405. package/out/types/string_set/test.f.mjs +0 -65
  406. package/text/module.f.mjs +0 -27
  407. package/text/utf16/module.f.mjs +0 -96
  408. package/types/array/module.f.mjs +0 -119
  409. package/types/btree/find/module.f.mjs +0 -125
  410. package/types/btree/types/module.f.mjs +0 -64
  411. package/types/byte_set/module.f.mjs +0 -61
  412. package/types/function/compare/module.f.mjs +0 -29
  413. package/types/function/module.f.mjs +0 -50
  414. package/types/function/operator/module.f.mjs +0 -78
  415. package/types/function/test.f.mjs +0 -17
  416. package/types/list/module.f.mjs +0 -320
  417. package/types/map/module.f.mjs +0 -67
  418. package/types/nibble_set/module.f.mjs +0 -28
  419. package/types/nullable/module.f.mjs +0 -11
  420. package/types/number/module.f.mjs +0 -16
  421. package/types/object/module.f.mjs +0 -33
  422. package/types/range/module.f.mjs +0 -8
  423. package/types/range_map/module.f.mjs +0 -84
  424. package/types/result/module.f.mjs +0 -28
  425. package/types/sorted_list/module.f.mjs +0 -107
  426. package/types/sorted_set/module.f.mjs +0 -38
  427. package/types/string/module.f.mjs +0 -22
  428. package/types/string_set/module.f.mjs +0 -36
@@ -1,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;