functionalscript 0.3.4 → 0.3.6

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 (457) hide show
  1. package/com/cpp/module.f.d.ts +10 -0
  2. package/com/cpp/module.f.js +107 -0
  3. package/com/cpp/test.f.d.ts +2 -0
  4. package/com/cpp/{test.f.ts → test.f.js} +9 -11
  5. package/com/cpp/testlib.f.d.ts +2 -0
  6. package/com/cpp/testlib.f.js +5 -0
  7. package/com/cs/module.f.d.ts +12 -0
  8. package/com/cs/module.f.js +80 -0
  9. package/com/cs/test.f.d.ts +2 -0
  10. package/com/cs/{test.f.ts → test.f.js} +9 -11
  11. package/com/cs/testlib.f.d.ts +2 -0
  12. package/com/cs/testlib.f.js +5 -0
  13. package/com/rust/module.f.d.ts +15 -0
  14. package/com/rust/module.f.js +169 -0
  15. package/com/rust/test.f.d.ts +2 -0
  16. package/com/rust/{test.f.ts → test.f.js} +7 -7
  17. package/com/rust/testlib.f.d.ts +2 -0
  18. package/com/rust/testlib.f.js +5 -0
  19. package/com/test/build.f.d.ts +20 -0
  20. package/com/test/build.f.js +58 -0
  21. package/com/types/module.f.d.ts +28 -0
  22. package/com/types/module.f.js +8 -0
  23. package/com/types/testlib.f.d.ts +44 -0
  24. package/com/types/{testlib.f.ts → testlib.f.js} +2 -3
  25. package/commonjs/build/module.f.d.ts +6 -0
  26. package/commonjs/build/module.f.js +69 -0
  27. package/commonjs/build/test.f.d.ts +2 -0
  28. package/commonjs/build/test.f.js +96 -0
  29. package/commonjs/module/function/{module.f.ts → module.f.d.ts} +5 -10
  30. package/commonjs/module/function/module.f.js +4 -0
  31. package/commonjs/module/module.f.d.ts +18 -0
  32. package/commonjs/module/module.f.js +12 -0
  33. package/commonjs/module.f.d.ts +6 -0
  34. package/commonjs/module.f.js +1 -0
  35. package/commonjs/package/dependencies/module.f.d.ts +7 -0
  36. package/commonjs/package/dependencies/module.f.js +13 -0
  37. package/commonjs/package/dependencies/test.f.d.ts +2 -0
  38. package/commonjs/package/dependencies/test.f.js +15 -0
  39. package/commonjs/package/module.f.d.ts +17 -0
  40. package/commonjs/package/module.f.js +18 -0
  41. package/commonjs/package/test.f.d.ts +2 -0
  42. package/commonjs/package/test.f.js +27 -0
  43. package/commonjs/path/module.f.d.ts +24 -0
  44. package/commonjs/path/module.f.js +114 -0
  45. package/commonjs/path/test.f.d.ts +25 -0
  46. package/commonjs/path/{test.f.ts → test.f.js} +123 -89
  47. package/crypto/prime_field/module.f.d.ts +43 -0
  48. package/crypto/prime_field/module.f.js +78 -0
  49. package/crypto/prime_field/test.f.d.ts +13 -0
  50. package/crypto/prime_field/test.f.js +149 -0
  51. package/crypto/secp/module.f.d.ts +68 -0
  52. package/crypto/secp/module.f.js +127 -0
  53. package/crypto/secp/test.f.d.ts +5 -0
  54. package/crypto/secp/test.f.js +72 -0
  55. package/crypto/sha2/module.f.d.ts +13 -0
  56. package/crypto/sha2/module.f.js +145 -0
  57. package/crypto/sha2/test.f.d.ts +9 -0
  58. package/crypto/sha2/test.f.js +82 -0
  59. package/dev/module.f.d.ts +1 -0
  60. package/dev/module.f.js +1 -0
  61. package/dev/test/module.f.d.ts +20 -0
  62. package/dev/test/module.f.js +75 -0
  63. package/dev/test.f.d.ts +9 -0
  64. package/dev/{test.f.ts → test.f.js} +22 -24
  65. package/djs/module.f.d.ts +17 -0
  66. package/djs/module.f.js +63 -0
  67. package/djs/parser/module.f.d.ts +12 -0
  68. package/djs/parser/module.f.js +333 -0
  69. package/djs/parser/test.f.d.ts +12 -0
  70. package/djs/parser/test.f.js +717 -0
  71. package/djs/serializer/module.f.d.ts +9 -0
  72. package/djs/serializer/module.f.js +81 -0
  73. package/djs/test/input.f.d.ts +2 -0
  74. package/djs/test/input.f.js +4 -0
  75. package/djs/test/m.f.d.ts +2 -0
  76. package/djs/test/m.f.js +1 -0
  77. package/djs/test.f.d.ts +12 -0
  78. package/djs/test.f.js +84 -0
  79. package/djs/tokenizer/module.f.d.ts +8 -0
  80. package/djs/tokenizer/module.f.js +60 -0
  81. package/djs/tokenizer/test.f.d.ts +7 -0
  82. package/djs/tokenizer/test.f.js +529 -0
  83. package/fsc/module.f.d.ts +5 -0
  84. package/fsc/module.f.js +75 -0
  85. package/fsc/test.f.d.ts +4 -0
  86. package/fsc/test.f.js +19 -0
  87. package/fsm/module.f.d.ts +13 -0
  88. package/fsm/module.f.js +59 -0
  89. package/fsm/test.f.d.ts +5 -0
  90. package/fsm/test.f.js +137 -0
  91. package/html/module.f.d.ts +13 -0
  92. package/html/module.f.js +58 -0
  93. package/html/test.f.d.ts +9 -0
  94. package/html/test.f.js +42 -0
  95. package/issues/test.f.d.ts +16 -0
  96. package/issues/test.f.js +70 -0
  97. package/js/tokenizer/module.f.d.ts +86 -0
  98. package/js/tokenizer/module.f.js +503 -0
  99. package/js/tokenizer/test.f.d.ts +9 -0
  100. package/js/tokenizer/test.f.js +905 -0
  101. package/json/module.f.d.ts +20 -0
  102. package/json/module.f.js +68 -0
  103. package/json/parser/module.f.d.ts +5 -0
  104. package/json/parser/module.f.js +155 -0
  105. package/json/parser/test.f.d.ts +5 -0
  106. package/json/parser/test.f.js +328 -0
  107. package/json/serializer/module.f.d.ts +7 -0
  108. package/json/serializer/module.f.js +21 -0
  109. package/json/serializer/test.f.d.ts +8 -0
  110. package/json/serializer/test.f.js +87 -0
  111. package/json/test.f.d.ts +8 -0
  112. package/json/test.f.js +61 -0
  113. package/json/tokenizer/module.f.d.ts +8 -0
  114. package/json/tokenizer/module.f.js +52 -0
  115. package/json/tokenizer/test.f.d.ts +6 -0
  116. package/json/tokenizer/test.f.js +419 -0
  117. package/nanvm-lib/tests/test.f.d.ts +27 -0
  118. package/nanvm-lib/tests/test.f.js +84 -0
  119. package/nodejs/version/module.f.d.ts +11 -0
  120. package/nodejs/version/module.f.js +16 -0
  121. package/nodejs/version/test.f.d.ts +2 -0
  122. package/nodejs/version/{test.f.ts → test.f.js} +13 -22
  123. package/package.json +9 -5
  124. package/text/ascii/module.f.d.ts +129 -0
  125. package/text/ascii/module.f.js +148 -0
  126. package/text/ascii/test.f.d.ts +4 -0
  127. package/text/ascii/test.f.js +14 -0
  128. package/text/module.f.d.ts +8 -0
  129. package/text/module.f.js +10 -0
  130. package/text/sgr/module.f.d.ts +8 -0
  131. package/text/sgr/module.f.js +8 -0
  132. package/text/test.f.d.ts +2 -0
  133. package/text/test.f.js +18 -0
  134. package/text/utf16/module.f.d.ts +9 -0
  135. package/text/utf16/module.f.js +66 -0
  136. package/text/utf16/test.f.d.ts +6 -0
  137. package/text/utf16/test.f.js +144 -0
  138. package/text/utf8/module.f.d.ts +6 -0
  139. package/text/utf8/module.f.js +112 -0
  140. package/text/utf8/test.f.d.ts +6 -0
  141. package/text/utf8/test.f.js +175 -0
  142. package/types/array/module.f.d.ts +21 -0
  143. package/types/array/module.f.js +23 -0
  144. package/types/array/test.f.d.ts +10 -0
  145. package/types/array/test.f.js +116 -0
  146. package/types/bigfloat/module.f.d.ts +3 -0
  147. package/types/bigfloat/module.f.js +66 -0
  148. package/types/bigfloat/test.f.d.ts +6 -0
  149. package/types/bigfloat/test.f.js +349 -0
  150. package/types/bigint/module.f.d.ts +54 -0
  151. package/types/bigint/{module.f.ts → module.f.js} +42 -65
  152. package/types/bigint/test.f.d.ts +16 -0
  153. package/types/bigint/test.f.js +199 -0
  154. package/types/bit_vec/module.f.d.ts +134 -0
  155. package/types/bit_vec/{module.f.ts → module.f.js} +47 -65
  156. package/types/bit_vec/test.f.d.ts +22 -0
  157. package/types/bit_vec/test.f.js +210 -0
  158. package/types/btree/find/module.f.d.ts +20 -0
  159. package/types/btree/find/module.f.js +84 -0
  160. package/types/btree/find/test.f.d.ts +2 -0
  161. package/types/btree/find/test.f.js +152 -0
  162. package/types/btree/module.f.d.ts +4 -0
  163. package/types/btree/module.f.js +31 -0
  164. package/types/btree/remove/module.f.d.ts +4 -0
  165. package/types/btree/remove/module.f.js +174 -0
  166. package/types/btree/remove/test.f.d.ts +5 -0
  167. package/types/btree/remove/test.f.js +634 -0
  168. package/types/btree/set/module.f.d.ts +3 -0
  169. package/types/btree/set/module.f.js +103 -0
  170. package/types/btree/set/test.f.d.ts +2 -0
  171. package/types/btree/set/test.f.js +360 -0
  172. package/types/btree/test.f.d.ts +8 -0
  173. package/types/btree/test.f.js +75 -0
  174. package/types/btree/types/module.f.d.ts +11 -0
  175. package/types/btree/types/module.f.js +1 -0
  176. package/types/byte_set/module.f.d.ts +16 -0
  177. package/types/byte_set/module.f.js +28 -0
  178. package/types/byte_set/test.f.d.ts +12 -0
  179. package/types/byte_set/test.f.js +122 -0
  180. package/types/function/compare/module.f.d.ts +10 -0
  181. package/types/function/compare/module.f.js +7 -0
  182. package/types/function/compare/test.f.d.ts +2 -0
  183. package/types/function/compare/test.f.js +8 -0
  184. package/types/function/module.f.d.ts +28 -0
  185. package/types/function/module.f.js +19 -0
  186. package/types/function/operator/module.f.d.ts +20 -0
  187. package/types/function/operator/module.f.js +18 -0
  188. package/types/function/test.f.d.ts +2 -0
  189. package/types/function/test.f.js +12 -0
  190. package/types/list/module.f.d.ts +50 -0
  191. package/types/list/module.f.js +171 -0
  192. package/types/list/test.f.d.ts +22 -0
  193. package/types/list/test.f.js +395 -0
  194. package/types/map/module.f.d.ts +14 -0
  195. package/types/map/module.f.js +31 -0
  196. package/types/map/test.f.d.ts +5 -0
  197. package/types/map/test.f.js +114 -0
  198. package/types/nibble_set/module.f.d.ts +10 -0
  199. package/types/nibble_set/module.f.js +9 -0
  200. package/types/nibble_set/test.f.d.ts +12 -0
  201. package/types/nibble_set/test.f.js +90 -0
  202. package/types/nullable/module.f.d.ts +3 -0
  203. package/types/nullable/module.f.js +2 -0
  204. package/types/nullable/test.f.d.ts +2 -0
  205. package/types/nullable/test.f.js +12 -0
  206. package/types/number/module.f.d.ts +6 -0
  207. package/types/number/module.f.js +8 -0
  208. package/types/number/test.f.d.ts +11 -0
  209. package/types/number/test.f.js +124 -0
  210. package/types/object/module.f.d.ts +10 -0
  211. package/types/object/module.f.js +12 -0
  212. package/types/object/test.f.d.ts +5 -0
  213. package/types/object/test.f.js +17 -0
  214. package/types/range/module.f.d.ts +3 -0
  215. package/types/range/module.f.js +2 -0
  216. package/types/range/test.f.d.ts +2 -0
  217. package/types/range/test.f.js +18 -0
  218. package/types/range_map/module.f.d.ts +14 -0
  219. package/types/range_map/module.f.js +51 -0
  220. package/types/range_map/test.f.d.ts +6 -0
  221. package/types/range_map/test.f.js +176 -0
  222. package/types/result/module.f.d.ts +7 -0
  223. package/types/result/module.f.js +8 -0
  224. package/types/sorted_list/module.f.d.ts +16 -0
  225. package/types/sorted_list/module.f.js +56 -0
  226. package/types/sorted_list/test.f.d.ts +5 -0
  227. package/types/sorted_list/test.f.js +64 -0
  228. package/types/sorted_set/module.f.d.ts +7 -0
  229. package/types/sorted_set/module.f.js +14 -0
  230. package/types/sorted_set/test.f.d.ts +6 -0
  231. package/types/sorted_set/test.f.js +78 -0
  232. package/types/string/module.f.d.ts +6 -0
  233. package/types/string/module.f.js +11 -0
  234. package/types/string/test.f.d.ts +15 -0
  235. package/types/string/test.f.js +58 -0
  236. package/types/string_set/module.f.d.ts +9 -0
  237. package/types/string_set/module.f.js +22 -0
  238. package/types/string_set/test.f.d.ts +5 -0
  239. package/types/string_set/test.f.js +65 -0
  240. package/.github/FUNDING.yml +0 -12
  241. package/.github/dependabot.yml +0 -11
  242. package/.github/workflows/ci.yml +0 -88
  243. package/.github/workflows/npm-publish.yml +0 -53
  244. package/CHANGELOG.md +0 -29
  245. package/Cargo.lock +0 -18
  246. package/Cargo.toml +0 -7
  247. package/com/README.md +0 -3
  248. package/com/cpp/README.md +0 -80
  249. package/com/cpp/module.f.ts +0 -180
  250. package/com/cpp/nanocom.hpp +0 -195
  251. package/com/cpp/testlib.f.ts +0 -8
  252. package/com/cs/module.f.ts +0 -145
  253. package/com/cs/testlib.f.ts +0 -8
  254. package/com/proposals.md +0 -28
  255. package/com/rust/module.f.ts +0 -287
  256. package/com/rust/nanocom/Cargo.lock +0 -7
  257. package/com/rust/nanocom/Cargo.toml +0 -15
  258. package/com/rust/nanocom/README.md +0 -56
  259. package/com/rust/nanocom/src/class.rs +0 -6
  260. package/com/rust/nanocom/src/cobject.rs +0 -90
  261. package/com/rust/nanocom/src/guid.rs +0 -15
  262. package/com/rust/nanocom/src/hresult.rs +0 -7
  263. package/com/rust/nanocom/src/interface.rs +0 -9
  264. package/com/rust/nanocom/src/iunknown.rs +0 -13
  265. package/com/rust/nanocom/src/lib.rs +0 -20
  266. package/com/rust/nanocom/src/object.rs +0 -34
  267. package/com/rust/nanocom/src/ref.rs +0 -57
  268. package/com/rust/nanocom/src/vmt.rs +0 -7
  269. package/com/rust/nanocom/tests/it.rs +0 -186
  270. package/com/rust/nanocom/tests/itmod.rs +0 -195
  271. package/com/rust/testlib.f.ts +0 -8
  272. package/com/test/build.f.ts +0 -111
  273. package/com/test/build.ts +0 -45
  274. package/com/test/cpp/main.cpp +0 -74
  275. package/com/test/cs/Program.cs +0 -31
  276. package/com/test/cs/cs.csproj +0 -16
  277. package/com/test/rust/Cargo.toml +0 -12
  278. package/com/test/rust/src/lib.rs +0 -56
  279. package/com/types/module.f.ts +0 -62
  280. package/commonjs/README.md +0 -94
  281. package/commonjs/build/module.f.ts +0 -100
  282. package/commonjs/build/test.f.ts +0 -107
  283. package/commonjs/module/module.f.ts +0 -41
  284. package/commonjs/module.f.ts +0 -7
  285. package/commonjs/module.ts +0 -31
  286. package/commonjs/package/dependencies/module.f.ts +0 -22
  287. package/commonjs/package/dependencies/test.f.ts +0 -8
  288. package/commonjs/package/module.f.ts +0 -31
  289. package/commonjs/package/test.f.ts +0 -12
  290. package/commonjs/path/README.md +0 -17
  291. package/commonjs/path/module.f.ts +0 -171
  292. package/commonjs/test.ts +0 -64
  293. package/crypto/README.md +0 -3
  294. package/crypto/prime_field/module.f.ts +0 -114
  295. package/crypto/prime_field/test.f.ts +0 -95
  296. package/crypto/secp/module.f.ts +0 -182
  297. package/crypto/secp/test.f.ts +0 -68
  298. package/crypto/sha2/module.f.ts +0 -215
  299. package/crypto/sha2/test.f.ts +0 -83
  300. package/deno.json +0 -71
  301. package/dev/README.md +0 -8
  302. package/dev/index.ts +0 -3
  303. package/dev/module.f.ts +0 -1
  304. package/dev/module.ts +0 -195
  305. package/dev/test/module.f.ts +0 -135
  306. package/dev/test.ts +0 -53
  307. package/djs/README.md +0 -54
  308. package/djs/module.f.ts +0 -76
  309. package/djs/parser/module.f.ts +0 -509
  310. package/djs/parser/test.f.ts +0 -461
  311. package/djs/serializer/module.f.ts +0 -90
  312. package/djs/test.f.ts +0 -67
  313. package/djs/tokenizer/module.f.ts +0 -99
  314. package/djs/tokenizer/test.f.ts +0 -364
  315. package/doc/LANGUAGE.md +0 -255
  316. package/doc/README.md +0 -61
  317. package/doc/byte-code.md +0 -59
  318. package/doc/fa.md +0 -174
  319. package/doc/predefined.md +0 -143
  320. package/doc/proposals.md +0 -21
  321. package/doc/vm/README.md +0 -24
  322. package/doc/vm-rearchitecture.md +0 -129
  323. package/doc/vm.md +0 -150
  324. package/fsc/README.md +0 -111
  325. package/fsc/module.f.ts +0 -122
  326. package/fsc/test.f.ts +0 -21
  327. package/fsm/README.md +0 -113
  328. package/fsm/module.f.ts +0 -107
  329. package/fsm/test.f.ts +0 -139
  330. package/funding.json +0 -61
  331. package/html/README.md +0 -32
  332. package/html/module.f.ts +0 -109
  333. package/html/test.f.ts +0 -37
  334. package/issues/01-test-debug.md +0 -3
  335. package/issues/02-esm.md +0 -8
  336. package/issues/03-djs.md +0 -57
  337. package/issues/05-publish.md +0 -40
  338. package/issues/11-fs-load.md +0 -13
  339. package/issues/17-djs-extension.md +0 -6
  340. package/issues/README.md +0 -42
  341. package/issues/lang/1000-json.md +0 -50
  342. package/issues/lang/2110-default-export.md +0 -11
  343. package/issues/lang/2120-const.md +0 -14
  344. package/issues/lang/2130-default-import.md +0 -10
  345. package/issues/lang/2210-block-comment.md +0 -12
  346. package/issues/lang/2220-namespace-import.md +0 -25
  347. package/issues/lang/2310-undefined.md +0 -7
  348. package/issues/lang/2320-bigint.md +0 -7
  349. package/issues/lang/2330-property-accessor.md +0 -225
  350. package/issues/lang/2340-operators.md +0 -41
  351. package/issues/lang/2350-grouping.md +0 -11
  352. package/issues/lang/2360-built-in.md +0 -81
  353. package/issues/lang/2410-identifier-property.md +0 -9
  354. package/issues/lang/2420-line-comment.md +0 -10
  355. package/issues/lang/2430-trailing-comma.md +0 -13
  356. package/issues/lang/2440-shorthand.md +0 -8
  357. package/issues/lang/2450-destructuring.md +0 -12
  358. package/issues/lang/3110-function.md +0 -35
  359. package/issues/lang/3120-parameters.md +0 -9
  360. package/issues/lang/3130-body-const.md +0 -12
  361. package/issues/lang/3220-let.md +0 -11
  362. package/issues/lang/3240-export.md +0 -44
  363. package/issues/lang/3370-type-inference.md +0 -69
  364. package/issues/lang/3380-promise.md +0 -22
  365. package/issues/lang/3390-class.md +0 -3
  366. package/issues/lang/3410-expression.md +0 -12
  367. package/issues/lang/3420-one-parameter.md +0 -10
  368. package/issues/lang/3430-assignments.md +0 -23
  369. package/issues/lang/README.md +0 -193
  370. package/issues/test.f.ts +0 -58
  371. package/js/tokenizer/module.f.ts +0 -882
  372. package/js/tokenizer/test.f.ts +0 -617
  373. package/json/html/README.md +0 -49
  374. package/json/module.f.ts +0 -94
  375. package/json/parser/module.f.ts +0 -221
  376. package/json/parser/test.f.ts +0 -255
  377. package/json/serializer/module.f.ts +0 -74
  378. package/json/serializer/test.f.ts +0 -64
  379. package/json/test.f.ts +0 -48
  380. package/json/tokenizer/module.f.ts +0 -85
  381. package/json/tokenizer/test.f.ts +0 -290
  382. package/nanvm-lib/Cargo.toml +0 -6
  383. package/nanvm-lib/src/extension.rs +0 -130
  384. package/nanvm-lib/src/interface.rs +0 -133
  385. package/nanvm-lib/src/lib.rs +0 -7
  386. package/nanvm-lib/src/naive.rs +0 -236
  387. package/nanvm-lib/src/nanenum.rs +0 -236
  388. package/nanvm-lib/src/nullish.rs +0 -7
  389. package/nanvm-lib/src/sign.rs +0 -5
  390. package/nanvm-lib/src/simple.rs +0 -32
  391. package/nanvm-lib/tests/test.f.ts +0 -80
  392. package/nanvm-lib/tests/test.rs +0 -108
  393. package/nodejs/version/main.ts +0 -4
  394. package/nodejs/version/module.f.ts +0 -42
  395. package/text/README.md +0 -110
  396. package/text/ascii/module.f.ts +0 -219
  397. package/text/ascii/test.f.ts +0 -14
  398. package/text/module.f.ts +0 -30
  399. package/text/sgr/README.md +0 -3
  400. package/text/sgr/module.f.ts +0 -11
  401. package/text/test.f.ts +0 -19
  402. package/text/utf16/module.f.ts +0 -120
  403. package/text/utf16/test.f.ts +0 -107
  404. package/text/utf8/module.f.ts +0 -116
  405. package/text/utf8/test.f.ts +0 -125
  406. package/tsconfig.json +0 -104
  407. package/types/array/module.f.ts +0 -89
  408. package/types/array/test.f.ts +0 -88
  409. package/types/bigfloat/module.f.ts +0 -93
  410. package/types/bigfloat/test.f.ts +0 -218
  411. package/types/bigint/README.md +0 -35
  412. package/types/bigint/test.f.ts +0 -144
  413. package/types/bit_vec/README.md +0 -18
  414. package/types/bit_vec/test.f.ts +0 -129
  415. package/types/btree/README.md +0 -160
  416. package/types/btree/find/module.f.ts +0 -92
  417. package/types/btree/find/test.f.ts +0 -122
  418. package/types/btree/module.f.ts +0 -35
  419. package/types/btree/remove/module.f.ts +0 -151
  420. package/types/btree/remove/test.f.ts +0 -498
  421. package/types/btree/set/module.f.ts +0 -89
  422. package/types/btree/set/test.f.ts +0 -415
  423. package/types/btree/test.f.ts +0 -92
  424. package/types/btree/types/module.f.ts +0 -27
  425. package/types/byte_set/module.f.ts +0 -73
  426. package/types/byte_set/test.f.ts +0 -84
  427. package/types/function/compare/module.f.ts +0 -26
  428. package/types/function/compare/test.f.ts +0 -7
  429. package/types/function/module.f.ts +0 -43
  430. package/types/function/operator/module.f.ts +0 -65
  431. package/types/function/test.f.ts +0 -20
  432. package/types/list/module.f.ts +0 -350
  433. package/types/list/test.f.ts +0 -327
  434. package/types/map/module.f.ts +0 -65
  435. package/types/map/test.f.ts +0 -76
  436. package/types/nibble_set/module.f.ts +0 -34
  437. package/types/nibble_set/test.f.ts +0 -57
  438. package/types/nullable/module.f.ts +0 -9
  439. package/types/nullable/test.f.ts +0 -9
  440. package/types/number/module.f.ts +0 -20
  441. package/types/number/test.f.ts +0 -194
  442. package/types/object/module.f.ts +0 -30
  443. package/types/object/test.f.ts +0 -14
  444. package/types/range/module.f.ts +0 -10
  445. package/types/range/test.f.ts +0 -9
  446. package/types/range_map/module.f.ts +0 -70
  447. package/types/range_map/test.f.ts +0 -189
  448. package/types/result/module.f.ts +0 -20
  449. package/types/result/module.ts +0 -18
  450. package/types/sorted_list/module.f.ts +0 -83
  451. package/types/sorted_list/test.f.ts +0 -57
  452. package/types/sorted_set/module.f.ts +0 -36
  453. package/types/sorted_set/test.f.ts +0 -67
  454. package/types/string/module.f.ts +0 -26
  455. package/types/string/test.f.ts +0 -43
  456. package/types/string_set/module.f.ts +0 -37
  457. package/types/string_set/test.f.ts +0 -34
@@ -0,0 +1,10 @@
1
+ /**
2
+ * This module generates C++ code blocks, including structs, interfaces, and method headers,
3
+ * based on a COM library of type definitions.
4
+ */
5
+ import { type Library } from '../types/module.f.ts';
6
+ import * as text from '../../text/module.f.ts';
7
+ /**
8
+ * Generates the C++ code for a library.
9
+ */
10
+ export declare const cpp: (name: string) => (lib: Library) => text.Block;
@@ -0,0 +1,107 @@
1
+ /**
2
+ * This module generates C++ code blocks, including structs, interfaces, and method headers,
3
+ * based on a COM library of type definitions.
4
+ */
5
+ import { paramList, result, } from "../types/module.f.js";
6
+ import * as text from "../../text/module.f.js";
7
+ import * as O from "../../types/object/module.f.js";
8
+ import { map, flatMap, flat } from "../../types/list/module.f.js";
9
+ import { join } from "../../types/string/module.f.js";
10
+ const { entries } = Object;
11
+ const struct = (name) => (body) => [`struct ${name}`, '{', body, '};'];
12
+ const baseTypeMap = {
13
+ u8: 'uint8_t',
14
+ i8: 'int8_t',
15
+ u16: 'uint16_t',
16
+ i16: 'int16_t',
17
+ u32: 'uint32_t',
18
+ i32: 'int32_t',
19
+ u64: 'uint64_t',
20
+ i64: 'int64_t',
21
+ usize: 'size_t',
22
+ isize: 'ptrdiff_t',
23
+ f32: 'float',
24
+ f64: 'double',
25
+ bool: 'bool',
26
+ };
27
+ const baseType = (t) => baseTypeMap[t];
28
+ const resultVoid = result('void');
29
+ const namespace = text.curly('namespace');
30
+ const comRef = (id) => `::nanocom::ref<${id}>`;
31
+ const ptr = (id) => `${id} const*`;
32
+ const ref = (id) => `${id} const&`;
33
+ const paramName = ([name]) => name;
34
+ const mapParamName = map(paramName);
35
+ const joinComma = join(', ');
36
+ /**
37
+ * Generates the C++ code for a library.
38
+ */
39
+ export const cpp = (name) => (lib) => {
40
+ const interface_ = (t) => {
41
+ if (!(t instanceof Array) || t.length !== 1) {
42
+ return null;
43
+ }
44
+ const [name] = t;
45
+ return 'interface' in lib[name] ? name : null;
46
+ };
47
+ const objectType = (i) => (t) => {
48
+ if (typeof (t) === 'string') {
49
+ return baseType(t);
50
+ }
51
+ if (t.length === 2) {
52
+ return `${type(t[1])} const*`;
53
+ }
54
+ const [id] = t;
55
+ return 'interface' in lib[id] ? i(id) : id;
56
+ };
57
+ const type = objectType(comRef);
58
+ const resultType = objectType(ptr);
59
+ const field = ([name, t]) => `${type(t)} ${name};`;
60
+ const mapField = map(field);
61
+ const defStruct = (s) => mapField(entries(s.struct));
62
+ const cppResult = resultVoid(resultType);
63
+ const param = ([name, t]) => `${objectType(ref)(t)} ${name}`;
64
+ const mapParam = map(param);
65
+ const methodHeader = (result) => (paramArrayStr) => (name) => `virtual ${result} ${name}${paramArrayStr} const noexcept = 0;`;
66
+ const method = ([name, paramArray]) => {
67
+ const result = cppResult(paramArray);
68
+ const paramL = paramList(paramArray);
69
+ const paramArrayStr = `(${joinComma(mapParam(paramL))})`;
70
+ const m = methodHeader(result)(paramArrayStr);
71
+ const resultName = interface_(paramArray._);
72
+ if (resultName === null) {
73
+ return [m(name)];
74
+ }
75
+ return [
76
+ m(`${name}_`),
77
+ `${comRef(resultName)} ${name}${paramArrayStr} const noexcept`,
78
+ '{',
79
+ [`return ::nanocom::move_to_ref(${name}_(${joinComma(mapParamName(paramL))}));`],
80
+ '}',
81
+ ];
82
+ };
83
+ const mapMethod = flatMap(method);
84
+ const defInterface = ({ guid, interface: i }) => {
85
+ const g = guid.replaceAll('-', '');
86
+ const lo = g.substring(0, 16);
87
+ const hi = g.substring(16);
88
+ return flat([
89
+ [`constexpr static ::nanocom::GUID const guid = ::nanocom::GUID(0x${lo}, 0x${hi});`],
90
+ mapMethod(entries(i))
91
+ ]);
92
+ };
93
+ const def = ([name, d]) => 'interface' in d ?
94
+ [`class ${name} : public ::nanocom::IUnknown`,
95
+ '{',
96
+ 'public:',
97
+ defInterface(d),
98
+ '};'
99
+ ] :
100
+ struct(name)(defStruct(d));
101
+ const forward = ([name]) => [`struct ${name};`];
102
+ const e = entries(lib);
103
+ return flat([
104
+ ['#pragma once', ''],
105
+ namespace(name)(flat([flatMap(forward)(e), flatMap(def)(e)]))
106
+ ]);
107
+ };
@@ -0,0 +1,2 @@
1
+ declare const f: () => void;
2
+ export default f;
@@ -1,9 +1,6 @@
1
- import cpp from './testlib.f.ts'
2
-
3
- const f = () =>
4
- {
5
- const e =
6
- '#pragma once\n' +
1
+ import cpp from "./testlib.f.js";
2
+ const f = () => {
3
+ const e = '#pragma once\n' +
7
4
  '\n' +
8
5
  'namespace My\n' +
9
6
  '{\n' +
@@ -35,8 +32,9 @@ const f = () =>
35
32
  ' }\n' +
36
33
  ' virtual void SetManagedStruct(ManagedStruct a) const noexcept = 0;\n' +
37
34
  ' };\n' +
38
- '}'
39
- if (cpp() !== e) { throw cpp }
40
- }
41
-
42
- export default f
35
+ '}';
36
+ if (cpp() !== e) {
37
+ throw cpp;
38
+ }
39
+ };
40
+ export default f;
@@ -0,0 +1,2 @@
1
+ declare const _default: () => string;
2
+ export default _default;
@@ -0,0 +1,5 @@
1
+ import { join } from "../../types/string/module.f.js";
2
+ import { flat } from "../../text/module.f.js";
3
+ import library from "../types/testlib.f.js";
4
+ import { cpp } from "./module.f.js";
5
+ export default () => join('\n')(flat(' ')(cpp('My')(library)));
@@ -0,0 +1,12 @@
1
+ /**
2
+ * This module generates C# code blocks for COM interop from a high-level type library definition.
3
+ *
4
+ * The module maps type definitions (e.g., structs, interfaces, and methods) into C# constructs
5
+ * with appropriate attributes for COM interop, such as `[StructLayout]`, `[Guid]`, and `[InterfaceType]`.
6
+ */
7
+ import { type Library } from '../types/module.f.ts';
8
+ import { type Block } from '../../text/module.f.ts';
9
+ /**
10
+ * Generates the C# code for a library.
11
+ */
12
+ export declare const cs: (name: string) => (library: Library) => Block;
@@ -0,0 +1,80 @@
1
+ /**
2
+ * This module generates C# code blocks for COM interop from a high-level type library definition.
3
+ *
4
+ * The module maps type definitions (e.g., structs, interfaces, and methods) into C# constructs
5
+ * with appropriate attributes for COM interop, such as `[StructLayout]`, `[Guid]`, and `[InterfaceType]`.
6
+ */
7
+ import { result, paramList, } from "../types/module.f.js";
8
+ import { curly } from "../../text/module.f.js";
9
+ import { flat, map, some, flatMap } from "../../types/list/module.f.js";
10
+ import { join } from "../../types/string/module.f.js";
11
+ import * as O from "../../types/object/module.f.js";
12
+ const { entries } = Object;
13
+ const using = (v) => `using ${v};`;
14
+ const typeDef = (attributes) => (type) => (name) => (body) => flat([
15
+ map(v => `[${v}]`)(attributes),
16
+ curly(`public ${type}`)(name)(body)
17
+ ]);
18
+ const baseTypeMap = {
19
+ bool: 'byte',
20
+ f32: 'float',
21
+ f64: 'double',
22
+ i16: 'short',
23
+ i32: 'int',
24
+ i64: 'long',
25
+ i8: 'sbyte',
26
+ isize: 'IntPtr',
27
+ u16: 'ushort',
28
+ u32: 'uint',
29
+ u64: 'ulong',
30
+ u8: 'byte',
31
+ usize: 'UIntPtr',
32
+ };
33
+ const baseType = (t) => baseTypeMap[t];
34
+ const unsafe = isUnsafe => isUnsafe ? 'unsafe ' : '';
35
+ const fullType = t => typeof (t) === 'string' ?
36
+ [false, baseType(t)] :
37
+ t.length === 1 ?
38
+ [false, t[0]] :
39
+ [true, `${type(t[1])}*`];
40
+ const type = t => fullType(t)[1];
41
+ const param = ([name, t]) => `${type(t)} ${name}`;
42
+ const mapParam = map(param);
43
+ const field = ([name, comType]) => {
44
+ const [isUnsafe, t] = fullType(comType);
45
+ return `public ${unsafe(isUnsafe)}${t} ${name};`;
46
+ };
47
+ const isUnsafeField = field => fullType(field[1])[0];
48
+ const mapIsUnsafeField = map(isUnsafeField);
49
+ const resultVoid = result('void');
50
+ const joinComma = join(', ');
51
+ const method = ([name, m]) => {
52
+ const paramAndResultList = entries(m);
53
+ const pl = paramList(m);
54
+ const isUnsafe = some(mapIsUnsafeField(paramAndResultList));
55
+ return [
56
+ '[PreserveSig]',
57
+ `${unsafe(isUnsafe)}${resultVoid(type)(m)} ${name}(${joinComma(mapParam(pl))});`
58
+ ];
59
+ };
60
+ const struct = typeDef(['StructLayout(LayoutKind.Sequential)'])('struct');
61
+ const mapField = map(field);
62
+ const flatMapMethod = flatMap(method);
63
+ const def = ([n, d]) => !('interface' in d) ?
64
+ struct(n)(mapField(entries(d.struct))) :
65
+ typeDef([`Guid("${d.guid}")`, 'InterfaceType(ComInterfaceType.InterfaceIsIUnknown)'])('interface')(n)(flatMapMethod(entries(d.interface)));
66
+ const flatMapDef = flatMap(def);
67
+ const namespace = curly('namespace');
68
+ const header = [
69
+ using('System'),
70
+ using('System.Runtime.InteropServices'),
71
+ ''
72
+ ];
73
+ /**
74
+ * Generates the C# code for a library.
75
+ */
76
+ export const cs = name => library => {
77
+ const v = flatMapDef(entries(library));
78
+ const ns = namespace(name)(v);
79
+ return flat([header, ns]);
80
+ };
@@ -0,0 +1,2 @@
1
+ declare const f: () => void;
2
+ export default f;
@@ -1,9 +1,6 @@
1
- import cs from './testlib.f.ts'
2
-
3
- const f = () =>
4
- {
5
- const e =
6
- 'using System;\n' +
1
+ import cs from "./testlib.f.js";
2
+ const f = () => {
3
+ const e = 'using System;\n' +
7
4
  'using System.Runtime.InteropServices;\n' +
8
5
  '\n' +
9
6
  'namespace My\n' +
@@ -38,8 +35,9 @@ const f = () =>
38
35
  ' [PreserveSig]\n' +
39
36
  ' void SetManagedStruct(ManagedStruct a);\n' +
40
37
  ' }\n' +
41
- '}'
42
- if (cs !== e) { throw cs }
43
- }
44
-
45
- export default f
38
+ '}';
39
+ if (cs !== e) {
40
+ throw cs;
41
+ }
42
+ };
43
+ export default f;
@@ -0,0 +1,2 @@
1
+ declare const _default: string;
2
+ export default _default;
@@ -0,0 +1,5 @@
1
+ import { flat } from "../../text/module.f.js";
2
+ import { join } from "../../types/string/module.f.js";
3
+ import { cs } from "./module.f.js";
4
+ import library from "../types/testlib.f.js";
5
+ export default join('\n')(flat(' ')(cs('My')(library)));
@@ -0,0 +1,15 @@
1
+ /**
2
+ * This module generates Rust code for COM interop from a high-level type library definition.
3
+ *
4
+ * The module provides functions to define structs, traits, and implementations in Rust,
5
+ * specifically tailored for `nanocom` interoperation.
6
+ */
7
+ import { type Library } from '../types/module.f.ts';
8
+ import * as Text from '../../text/module.f.ts';
9
+ /**
10
+ * Generates Rust code for the given type library.
11
+ *
12
+ * @param library - The library of type definitions to generate Rust code for.
13
+ * @returns A block of Rust code representing the library.
14
+ */
15
+ export declare const rust: (library: Library) => Text.Block;
@@ -0,0 +1,169 @@
1
+ /**
2
+ * This module generates Rust code for COM interop from a high-level type library definition.
3
+ *
4
+ * The module provides functions to define structs, traits, and implementations in Rust,
5
+ * specifically tailored for `nanocom` interoperation.
6
+ */
7
+ import { paramList } from "../types/module.f.js";
8
+ import * as Text from "../../text/module.f.js";
9
+ import * as O from "../../types/object/module.f.js";
10
+ import * as list from "../../types/list/module.f.js";
11
+ const { flat, map, flatMap } = list;
12
+ const { entries } = Object;
13
+ import * as func from "../../types/function/module.f.js";
14
+ const { fn } = func;
15
+ import * as string from "../../types/string/module.f.js";
16
+ const { join } = string;
17
+ const rustField = field => `pub ${field},`;
18
+ const mapRustField = map(rustField);
19
+ const rustStruct = b => name => [`#[repr(C)]`, `pub struct ${name} {`, mapRustField(b), `}`];
20
+ const commaJoin = join(', ');
21
+ const ref = name => `${name}::Ref`;
22
+ const obj = name => `&${name}::Object`;
23
+ const self = ['&self'];
24
+ const paramName = ([n]) => n;
25
+ const callList = p => map(paramName)(paramList(p));
26
+ const call = p => commaJoin(callList(p));
27
+ const virtualCall = p => commaJoin(flat([['self'], callList(p)]));
28
+ const super_ = 'super::';
29
+ const assign = ([n]) => `${n}: Self::${n},`;
30
+ const mapAssign = map(assign);
31
+ const this_ = ['this: &Object'];
32
+ const rustType = n => `pub type ${n} = nanocom::${n}<Interface>;`;
33
+ const whereContent = h => wh => {
34
+ const w = 'where' in wh ? [
35
+ h,
36
+ `where`,
37
+ mapComma(wh.where),
38
+ '{'
39
+ ] : [`${h} {`];
40
+ const x = [
41
+ wh.content,
42
+ '}',
43
+ ];
44
+ return flat([w, x]);
45
+ };
46
+ const rustImpl = i => {
47
+ const p = 'param' in i ? `<${i.param}>` : '';
48
+ const header = `impl${p} ${i.trait} for ${i.type}`;
49
+ return whereContent(header)(i);
50
+ };
51
+ const comma = s => `${s},`;
52
+ const mapComma = map(comma);
53
+ const trait = t => {
54
+ const p = t.pub === true ? 'pub ' : '';
55
+ const h = `${p}trait ${t.type}`;
56
+ return whereContent(h)(t);
57
+ };
58
+ const traitImpl = t => {
59
+ const i = rustImpl({
60
+ param: 'T',
61
+ trait: t.type,
62
+ type: 'T',
63
+ where,
64
+ content: [],
65
+ });
66
+ return flat([trait({ ...t, where }), i]);
67
+ };
68
+ const where = ['Self: nanocom::Class<Interface = Interface>', 'nanocom::CObject<Self>: Ex'];
69
+ /**
70
+ * Generates Rust code for the given type library.
71
+ *
72
+ * @param library - The library of type definitions to generate Rust code for.
73
+ * @returns A block of Rust code representing the library.
74
+ */
75
+ export const rust = (library) => {
76
+ const type = p => {
77
+ const f = o => t => {
78
+ if (typeof t === 'string') {
79
+ return t;
80
+ }
81
+ if (t.length === 2) {
82
+ return `*const ${f(ref)(t[1])}`;
83
+ }
84
+ const [id] = t;
85
+ const fullId = `${p}${id}`;
86
+ return 'interface' in library[id] ? o(fullId) : fullId;
87
+ };
88
+ return f;
89
+ };
90
+ const pf = p => o => ([name, t]) => `${name}: ${type(p)(o)(t)}`;
91
+ const param = pf(super_)(obj);
92
+ const mapParam = map(param);
93
+ const mapField = map(pf('')(ref));
94
+ const struct = fn(entries)
95
+ .then(mapField)
96
+ .then(rustStruct)
97
+ .result;
98
+ const func = first => p => {
99
+ const resultStr = '_' in p ? ` -> ${type(super_)(ref)(p._)}` : '';
100
+ const params = commaJoin(flat([first, mapParam(paramList(p))]));
101
+ return `(${params})${resultStr}`;
102
+ };
103
+ const virtualFnType = n => p => `extern "system" fn${n}${func(this_)(p)}`;
104
+ const virtualFn = ([n, p]) => `${n}: unsafe ${virtualFnType('')(p)}`;
105
+ const mapVirtualFn = map(virtualFn);
106
+ const headerFn = ([n, p]) => `fn ${n}${func(self)(p)}`;
107
+ const traitFn = m => `${headerFn(m)};`;
108
+ const mapTraitFn = map(traitFn);
109
+ const implFn = m => {
110
+ const [n, p] = m;
111
+ return [
112
+ `${headerFn(m)} {`,
113
+ [`unsafe { (self.interface().${n})(${virtualCall(p)}) }`],
114
+ '}'
115
+ ];
116
+ };
117
+ const flatMapImplFn = flatMap(implFn);
118
+ const impl = ([n, p]) => {
119
+ const type = virtualFnType(` ${n}`)(p);
120
+ return [
121
+ `${type} {`,
122
+ [`unsafe { nanocom::CObject::from_object_unchecked(this) }.${n}(${call(p)})`],
123
+ '}'
124
+ ];
125
+ };
126
+ const flatMapImpl = flatMap(impl);
127
+ const interface_ = ({ interface: i, guid }) => name => {
128
+ const e = entries(i);
129
+ return [
130
+ `pub mod ${name} {`,
131
+ [
132
+ rustType('Object'),
133
+ rustType('Ref'),
134
+ rustType('Vmt'),
135
+ ],
136
+ rustStruct(mapVirtualFn(e))('Interface'),
137
+ rustImpl({
138
+ trait: 'nanocom::Interface',
139
+ type: 'Interface',
140
+ content: [`const GUID: nanocom::GUID = 0x${guid.replaceAll('-', '_')};`]
141
+ }),
142
+ trait({ pub: true, type: 'Ex', content: mapTraitFn(e) }),
143
+ rustImpl({
144
+ trait: 'Ex',
145
+ type: 'Object',
146
+ content: flatMapImplFn(e)
147
+ }),
148
+ traitImpl({
149
+ pub: true,
150
+ type: 'ClassEx',
151
+ content: ['const VMT: Vmt = Vmt {',
152
+ ['iunknown: nanocom::CObject::<Self>::IUNKNOWN,',
153
+ 'interface: Interface {',
154
+ mapAssign(e),
155
+ '},',
156
+ ],
157
+ '};'
158
+ ]
159
+ }),
160
+ traitImpl({
161
+ type: 'PrivateClassEx',
162
+ content: flatMapImpl(e)
163
+ }),
164
+ '}'
165
+ ];
166
+ };
167
+ const def = ([name, type]) => ('interface' in type ? interface_(type) : struct(type.struct))(name);
168
+ return flat([['#![allow(non_snake_case)]'], flatMap(def)(entries(library))]);
169
+ };
@@ -0,0 +1,2 @@
1
+ declare const _default: () => void;
2
+ export default _default;
@@ -1,8 +1,6 @@
1
- import rust from './testlib.f.ts'
2
-
1
+ import rust from "./testlib.f.js";
3
2
  export default () => {
4
- const e =
5
- '#![allow(non_snake_case)]\n' +
3
+ const e = '#![allow(non_snake_case)]\n' +
6
4
  '#[repr(C)]\n' +
7
5
  'pub struct Slice {\n' +
8
6
  ' pub Start: *const u8,\n' +
@@ -118,6 +116,8 @@ export default () => {
118
116
  ' nanocom::CObject<Self>: Ex,\n' +
119
117
  ' {\n' +
120
118
  ' }\n' +
121
- '}'
122
- if (rust !== e) { throw rust }
123
- }
119
+ '}';
120
+ if (rust !== e) {
121
+ throw rust;
122
+ }
123
+ };
@@ -0,0 +1,2 @@
1
+ declare const _default: string;
2
+ export default _default;
@@ -0,0 +1,5 @@
1
+ import { flat } from "../../text/module.f.js";
2
+ import { join } from "../../types/string/module.f.js";
3
+ import { rust } from "./module.f.js";
4
+ import library from "../types/testlib.f.js";
5
+ export default join('\n')(flat(' ')(rust(library)));
@@ -0,0 +1,20 @@
1
+ import { type List } from '../../types/list/module.f.ts';
2
+ type Platform = 'aix' | 'android' | 'darwin' | 'freebsd' | 'haiku' | 'linux' | 'openbsd' | 'sunos' | 'win32' | 'cygwin' | 'netbsd';
3
+ type NodeJs = {
4
+ readonly dirname: string;
5
+ readonly platform: Platform;
6
+ };
7
+ type Output = {
8
+ readonly file: {
9
+ readonly name: string;
10
+ readonly content: string;
11
+ };
12
+ readonly line: List<List<string>>;
13
+ };
14
+ export type Func = (nodejs: NodeJs) => Output;
15
+ declare const _default: {
16
+ cpp: Func;
17
+ cs: Func;
18
+ rust: Func;
19
+ };
20
+ export default _default;
@@ -0,0 +1,58 @@
1
+ import { flat } from "../../types/list/module.f.js";
2
+ import cppContent from "../cpp/testlib.f.js";
3
+ import csContent from "../cs/testlib.f.js";
4
+ import rustContent from "../rust/testlib.f.js";
5
+ const flags = platform => {
6
+ switch (platform) {
7
+ case 'win32':
8
+ return [];
9
+ case 'linux':
10
+ return ['-std=c++17', '-lstdc++', '-fPIC'];
11
+ default:
12
+ return ['-std=c++17', '-lc++'];
13
+ }
14
+ };
15
+ const output = platform => name => {
16
+ switch (platform) {
17
+ case 'win32': return `${name}.dll`;
18
+ case 'darwin': return `lib${name}.dylib`;
19
+ default: return `lib${name}.so`;
20
+ }
21
+ };
22
+ const cpp = ({ dirname, platform }) => ({
23
+ file: {
24
+ name: `${dirname}/cpp/_result.hpp`,
25
+ content: cppContent(),
26
+ },
27
+ line: [
28
+ flat([
29
+ ['clang', '-shared', '-o', output(platform)('testc')],
30
+ flags(platform),
31
+ [`${dirname}/cpp/main.cpp`],
32
+ ]),
33
+ ],
34
+ });
35
+ const cs = ({ dirname, platform }) => ({
36
+ file: {
37
+ name: `${dirname}/cs/_result.cs`,
38
+ content: csContent,
39
+ },
40
+ line: [
41
+ platform === 'win32'
42
+ ? ['dotnet', 'run', '--project', `${dirname}/cs/cs.csproj`]
43
+ // .Net on Linux and MacOS doesn't properly support COM object marshalling
44
+ : ['dotnet', 'build', `${dirname}/cs/cs.csproj`]
45
+ ],
46
+ });
47
+ const rust = ({ dirname }) => ({
48
+ file: {
49
+ name: `${dirname}/rust/src/_result.rs`,
50
+ content: rustContent,
51
+ },
52
+ line: [['cargo', 'build' /**, '--locked' */]]
53
+ });
54
+ export default {
55
+ cpp,
56
+ cs,
57
+ rust,
58
+ };
@@ -0,0 +1,28 @@
1
+ import * as O from '../../types/object/module.f.ts';
2
+ import { type List } from '../../types/list/module.f.ts';
3
+ export type Library = {
4
+ readonly [k in string]: Definition;
5
+ };
6
+ export type Definition = Struct | Interface;
7
+ export type Struct = {
8
+ readonly struct: FieldArray;
9
+ };
10
+ export type FieldArray = {
11
+ readonly [k in string]: Type;
12
+ };
13
+ export type Field = O.Entry<Type>;
14
+ export type Interface = {
15
+ readonly interface: MethodArray;
16
+ readonly guid: string;
17
+ };
18
+ type MethodArray = {
19
+ readonly [k in string]: FieldArray;
20
+ };
21
+ export type Method = O.Entry<FieldArray>;
22
+ export type Type = BaseType | Id | Pointer;
23
+ type Id = readonly [string];
24
+ export type BaseType = 'u8' | 'i8' | 'u16' | 'i16' | 'u32' | 'i32' | 'u64' | 'i64' | 'usize' | 'isize' | 'f32' | 'f64' | 'bool';
25
+ type Pointer = readonly ['*', Type];
26
+ export declare const paramList: (fa: FieldArray) => List<Field>;
27
+ export declare const result: <T>(v: T) => (f: (type: Type) => T) => (fa: FieldArray) => T;
28
+ export {};
@@ -0,0 +1,8 @@
1
+ import * as O from "../../types/object/module.f.js";
2
+ import { filter } from "../../types/list/module.f.js";
3
+ import { compose } from "../../types/function/module.f.js";
4
+ const { entries } = Object;
5
+ const isParam = ([name]) => name !== '_';
6
+ const filterParam = filter(isParam);
7
+ export const paramList = compose(entries)(filterParam);
8
+ export const result = v => f => fa => '_' in fa ? f(fa._) : v;