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
@@ -0,0 +1,287 @@
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 * as types from '../types/module.f.ts'
8
+ const { paramList } = types
9
+ import * as Text from '../../text/module.f.ts'
10
+ import * as O from '../../types/object/module.f.ts'
11
+ import * as list from '../../types/list/module.f.ts'
12
+ const { flat, map, flatMap } = list
13
+ const { entries } = Object
14
+ import * as func from '../../types/function/module.f.ts'
15
+ const { fn } = func
16
+ import * as string from '../../types/string/module.f.ts'
17
+ const { join } = string
18
+
19
+ const rustField
20
+ : (field: string) => string
21
+ = field => `pub ${field},`
22
+
23
+ const mapRustField = map(rustField)
24
+
25
+ const rustStruct
26
+ : (b: list.Thunk<string>) => (name: string) => Text.Block
27
+ = b => name => [`#[repr(C)]`, `pub struct ${name} {`, mapRustField(b), `}`]
28
+
29
+ const commaJoin = join(', ')
30
+
31
+ const ref
32
+ : (name: string) => string
33
+ = name => `${name}::Ref`
34
+
35
+ const obj
36
+ : (name: string) => string
37
+ = name => `&${name}::Object`
38
+
39
+ const self = ['&self']
40
+
41
+ const paramName
42
+ : (p: types.Field) => string
43
+ = ([n]) => n
44
+
45
+ const callList
46
+ : (p: types.FieldArray) => list.Thunk<string>
47
+ = p => map(paramName)(paramList(p))
48
+
49
+ const call
50
+ : (p: types.FieldArray) => string
51
+ = p => commaJoin(callList(p))
52
+
53
+ const virtualCall
54
+ : (p: types.FieldArray) => string
55
+ = p => commaJoin(flat([['self'], callList(p)]))
56
+
57
+ const super_ = 'super::'
58
+
59
+ const assign
60
+ : (m: types.Method) => string
61
+ = ([n]) => `${n}: Self::${n},`
62
+
63
+ const mapAssign = map(assign)
64
+
65
+ const this_ = ['this: &Object']
66
+
67
+ const rustType
68
+ : (n: string) => string
69
+ = n => `pub type ${n} = nanocom::${n}<Interface>;`
70
+
71
+ type OptionalProperty<T> = T|{}
72
+
73
+ type Where = {readonly where: readonly string[]}
74
+
75
+ type WhereContent = OptionalProperty<Where> & {readonly content: Text.Block}
76
+
77
+ const whereContent
78
+ : (h: string) => (wh: WhereContent) => Text.Block
79
+ = h => wh => {
80
+ const w = 'where' in wh ? [
81
+ h,
82
+ `where`,
83
+ mapComma(wh.where),
84
+ '{'
85
+ ]: [`${h} {`]
86
+ const x = [
87
+ wh.content,
88
+ '}',
89
+ ]
90
+ return flat([w, x])
91
+ }
92
+
93
+ type Impl = {
94
+ readonly param?: string
95
+ readonly trait: string
96
+ readonly type: string
97
+ readonly where?: readonly string[]
98
+ readonly content: Text.Block
99
+ }
100
+
101
+ const rustImpl
102
+ : (impl: Impl) => Text.Block
103
+ = i => {
104
+ const p = 'param' in i ? `<${i.param}>` : ''
105
+ const header = `impl${p} ${i.trait} for ${i.type}`
106
+ return whereContent(header)(i)
107
+ }
108
+
109
+ type Trait = {
110
+ readonly pub?: true
111
+ readonly type: string
112
+ readonly where?: readonly string[]
113
+ readonly content: Text.Block
114
+ }
115
+
116
+ const comma: (s: string) => string = s => `${s},`
117
+
118
+ const mapComma = map(comma)
119
+
120
+ const trait
121
+ : (t: Trait) => Text.Block
122
+ = t => {
123
+ const p = t.pub === true ? 'pub ' : ''
124
+ const h = `${p}trait ${t.type}`
125
+ return whereContent(h)(t)
126
+ }
127
+
128
+ const traitImpl
129
+ : (t: Trait) => Text.Block
130
+ = t => {
131
+ const i = rustImpl({
132
+ param: 'T',
133
+ trait: t.type,
134
+ type: 'T',
135
+ where,
136
+ content: [],
137
+ })
138
+ return flat([trait({ ...t, where }), i])
139
+ }
140
+
141
+ const where = ['Self: nanocom::Class<Interface = Interface>', 'nanocom::CObject<Self>: Ex']
142
+
143
+ /**
144
+ * Generates Rust code for the given type library.
145
+ *
146
+ * @param library - The library of type definitions to generate Rust code for.
147
+ * @returns A block of Rust code representing the library.
148
+ */
149
+ export const rust = (library: types.Library): Text.Block => {
150
+
151
+ const type
152
+ : (p: string) => (o: (_: string) => string) => (t: types.Type) => string
153
+ = p => {
154
+ const f
155
+ : (o: (_: string) => string) => (t: types.Type) => string
156
+ = o => t => {
157
+ if (typeof t === 'string') { return t }
158
+ if (t.length === 2) { return `*const ${f(ref)(t[1])}` }
159
+ const [id] = t
160
+ const fullId = `${p}${id}`
161
+ return 'interface' in library[id] ? o(fullId) : fullId
162
+ }
163
+ return f
164
+ }
165
+
166
+ const pf
167
+ : (p: string) => (o: (_: string) => string) => (f: types.Field) => string
168
+ = p => o => ([name, t]) => `${name}: ${type(p)(o)(t)}`
169
+
170
+ const param = pf(super_)(obj)
171
+
172
+ const mapParam = map(param)
173
+
174
+ const mapField = map(pf('')(ref))
175
+
176
+ const struct
177
+ : (fa: types.FieldArray) => (name: string) => Text.Block
178
+ = fn(entries)
179
+ .then(mapField)
180
+ .then(rustStruct)
181
+ .result
182
+
183
+ const func
184
+ : (first: readonly string[]) => (p: types.FieldArray) => string
185
+ = first => p => {
186
+ const resultStr = '_' in p ? ` -> ${type(super_)(ref)(p._)}` : ''
187
+ const params = commaJoin(flat([first, mapParam(paramList(p))]))
188
+ return `(${params})${resultStr}`
189
+ }
190
+
191
+ const virtualFnType
192
+ : (n: string) => (p: types.FieldArray) => string
193
+ = n => p => `extern "system" fn${n}${func(this_)(p)}`
194
+
195
+ const virtualFn
196
+ : (m: types.Method) => string
197
+ = ([n, p]) => `${n}: unsafe ${virtualFnType('')(p)}`
198
+
199
+ const mapVirtualFn = map(virtualFn)
200
+
201
+ const headerFn
202
+ : (m: types.Method) => string
203
+ = ([n, p]) => `fn ${n}${func(self)(p)}`
204
+
205
+ const traitFn
206
+ : (m: types.Method) => string
207
+ = m => `${headerFn(m)};`
208
+
209
+ const mapTraitFn = map(traitFn)
210
+
211
+ const implFn
212
+ : (m: types.Method) => Text.Block
213
+ = m => {
214
+ const [n, p] = m
215
+ return [
216
+ `${headerFn(m)} {`,
217
+ [`unsafe { (self.interface().${n})(${virtualCall(p)}) }`],
218
+ '}'
219
+ ]
220
+ }
221
+
222
+ const flatMapImplFn = flatMap(implFn)
223
+
224
+ const impl
225
+ : (m: types.Method) => Text.Block
226
+ = ([n, p]) => {
227
+ const type = virtualFnType(` ${n}`)(p)
228
+ return [
229
+ `${type} {`,
230
+ [`unsafe { nanocom::CObject::from_object_unchecked(this) }.${n}(${call(p)})`],
231
+ '}'
232
+ ]
233
+ }
234
+
235
+ const flatMapImpl = flatMap(impl)
236
+
237
+ const interface_
238
+ : (i: types.Interface) => (name: string) => Text.Block
239
+ = ({ interface: i, guid }) => name => {
240
+
241
+ const e = entries(i)
242
+
243
+ return [
244
+ `pub mod ${name} {`,
245
+ [
246
+ rustType('Object'),
247
+ rustType('Ref'),
248
+ rustType('Vmt'),
249
+ ],
250
+ rustStruct(mapVirtualFn(e))('Interface'),
251
+ rustImpl({
252
+ trait: 'nanocom::Interface',
253
+ type: 'Interface',
254
+ content: [`const GUID: nanocom::GUID = 0x${guid.replaceAll('-', '_')};`]
255
+ }),
256
+ trait({ pub: true, type: 'Ex', content: mapTraitFn(e) }),
257
+ rustImpl({
258
+ trait: 'Ex',
259
+ type: 'Object',
260
+ content: flatMapImplFn(e)
261
+ }),
262
+ traitImpl({
263
+ pub: true,
264
+ type: 'ClassEx',
265
+ content: ['const VMT: Vmt = Vmt {',
266
+ [ 'iunknown: nanocom::CObject::<Self>::IUNKNOWN,',
267
+ 'interface: Interface {',
268
+ mapAssign(e),
269
+ '},',
270
+ ],
271
+ '};'
272
+ ]
273
+ }),
274
+ traitImpl({
275
+ type: 'PrivateClassEx',
276
+ content: flatMapImpl(e)
277
+ }),
278
+ '}'
279
+ ]
280
+ }
281
+
282
+ const def
283
+ : (type: O.Entry<types.Definition>) => Text.Block
284
+ = ([name, type]) => ('interface' in type ? interface_(type) : struct(type.struct))(name)
285
+
286
+ return flat([['#![allow(non_snake_case)]'], flatMap(def)(entries(library))])
287
+ }
@@ -1,4 +1,4 @@
1
- import rust from './testlib.f.mjs'
1
+ import rust from './testlib.f.ts'
2
2
 
3
3
  export default () => {
4
4
  const e =
@@ -0,0 +1,8 @@
1
+ import * as text from '../../text/module.f.ts'
2
+ const { flat } = text
3
+ import * as string from '../../types/string/module.f.ts'
4
+ const { join } = string
5
+ import { rust } from './module.f.ts'
6
+ import library from '../types/testlib.f.ts'
7
+
8
+ export default join('\n')(flat(' ')(rust(library)))
@@ -1,47 +1,42 @@
1
- import * as list from '../../types/list/module.f.mjs'
1
+ import * as list from '../../types/list/module.f.ts'
2
2
  const { flat } = list
3
3
 
4
- import cppContent from '../cpp/testlib.f.mjs'
5
- import csContent from '../cs/testlib.f.mjs'
6
- import rustContent from '../rust/testlib.f.mjs'
4
+ import cppContent from '../cpp/testlib.f.ts'
5
+ import csContent from '../cs/testlib.f.ts'
6
+ import rustContent from '../rust/testlib.f.ts'
7
7
 
8
- /**
9
- * @typedef {|
10
- * 'aix' |
11
- * 'android' |
12
- * 'darwin' |
13
- * 'freebsd' |
14
- * 'haiku' |
15
- * 'linux' |
16
- * 'openbsd' |
17
- * 'sunos' |
18
- * 'win32' |
19
- * 'cygwin' |
20
- * 'netbsd'
21
- * } Platform
22
- */
8
+ type Platform =
9
+ | 'aix'
10
+ | 'android'
11
+ | 'darwin'
12
+ | 'freebsd'
13
+ | 'haiku'
14
+ | 'linux'
15
+ | 'openbsd'
16
+ | 'sunos'
17
+ | 'win32'
18
+ | 'cygwin'
19
+ | 'netbsd'
23
20
 
24
- /**
25
- * @typedef {{
26
- * readonly dirname: string
27
- * readonly platform: Platform
28
- * }} NodeJs
29
- */
21
+ type NodeJs = {
22
+ readonly dirname: string
23
+ readonly platform: Platform
24
+ }
25
+
26
+ type Output ={
27
+ readonly file: {
28
+ readonly name: string
29
+ readonly content: string
30
+ }
31
+ readonly line: list.List<list.List<string>>
32
+ }
30
33
 
31
- /**
32
- * @typedef {{
33
- * readonly file: {
34
- * readonly name: string
35
- * readonly content: string
36
- * }
37
- * readonly line: list.List<list.List<string>>
38
- * }} Output
39
- */
34
+ export type Func = (nodejs: NodeJs) => Output
40
35
 
41
- /** @typedef {(nodejs: NodeJs) => Output} Func */
36
+ const flags
37
+ : (platform: Platform) => readonly string[]
38
+ = platform => {
42
39
 
43
- /** @type {(platform: Platform) => readonly string[]} */
44
- const flags = platform => {
45
40
  switch (platform) {
46
41
  case 'win32':
47
42
  return []
@@ -52,8 +47,10 @@ const flags = platform => {
52
47
  }
53
48
  }
54
49
 
55
- /** @type {(platform: Platform) => (name: string) => string} */
56
- const output = platform => name => {
50
+ const output
51
+ : (platform: Platform) => (name: string) => string
52
+ = platform => name => {
53
+
57
54
  switch (platform) {
58
55
  case 'win32': return `${name}.dll`
59
56
  case 'darwin': return `lib${name}.dylib`
@@ -61,8 +58,10 @@ const output = platform => name => {
61
58
  }
62
59
  }
63
60
 
64
- /** @type {Func} */
65
- const cpp = ({ dirname, platform }) => ({
61
+ const cpp
62
+ : Func
63
+ = ({ dirname, platform }) => ({
64
+
66
65
  file: {
67
66
  name: `${dirname}/cpp/_result.hpp`,
68
67
  content: cppContent(),
@@ -76,8 +75,10 @@ const cpp = ({ dirname, platform }) => ({
76
75
  ],
77
76
  })
78
77
 
79
- /** @type {Func} */
80
- const cs = ({ dirname, platform }) => ({
78
+ const cs
79
+ : Func
80
+ = ({ dirname, platform }) => ({
81
+
81
82
  file: {
82
83
  name: `${dirname}/cs/_result.cs`,
83
84
  content: csContent,
@@ -90,8 +91,9 @@ const cs = ({ dirname, platform }) => ({
90
91
  ],
91
92
  })
92
93
 
93
- /** @type {Func} */
94
- const rust = ({ dirname }) => ({
94
+ const rust
95
+ : Func
96
+ = ({ dirname }) => ({
95
97
  file: {
96
98
  name: `${dirname}/rust/src/_result.rs`,
97
99
  content: rustContent,
@@ -1,14 +1,14 @@
1
1
  import { writeFileSync } from 'node:fs'
2
2
  import { execSync } from 'node:child_process'
3
3
  import { platform, exit } from 'node:process'
4
- import build, * as Build from './build.f.mjs'
4
+ import build, * as Build from './build.f.ts'
5
5
  const { cpp, cs, rust } = build
6
- import * as string from '../../types/string/module.f.mjs'
6
+ import * as string from '../../types/string/module.f.ts'
7
7
  const { join } = string
8
8
  const { log, error } = console
9
- import * as sgr from '../../text/sgr/module.f.mjs'
9
+ import * as sgr from '../../text/sgr/module.f.ts'
10
10
  const { bold, reset } = sgr.codes
11
- import * as list from '../../types/list/module.f.mjs'
11
+ import * as list from '../../types/list/module.f.ts'
12
12
 
13
13
  import { fileURLToPath } from 'node:url'
14
14
  import { dirname } from 'node:path'
@@ -21,8 +21,9 @@ const nodeJs = {
21
21
  platform,
22
22
  }
23
23
 
24
- /** @type {(f: Build.Func) => void} */
25
- const run = f => {
24
+ const run
25
+ : (f: Build.Func) => void
26
+ = f => {
26
27
  const { file: { name, content }, line } = f(nodeJs)
27
28
  log(`${bold}writing: ${name}${reset}`)
28
29
  writeFileSync(name, content)
@@ -0,0 +1,62 @@
1
+ import * as O from '../../types/object/module.f.ts'
2
+ import * as list from '../../types/list/module.f.ts'
3
+ import * as f from '../../types/function/module.f.ts'
4
+ const { compose } = f
5
+ const { filter } = list
6
+ const { entries } = Object
7
+
8
+ export type Library = {readonly[k in string]: Definition}
9
+
10
+ export type Definition = Struct|Interface
11
+
12
+ export type Struct = {
13
+ readonly struct: FieldArray
14
+ }
15
+
16
+ export type FieldArray = {readonly[k in string]: Type}
17
+
18
+ export type Field = O.Entry<Type>
19
+
20
+ export type Interface = {
21
+ readonly interface: MethodArray
22
+ readonly guid: string
23
+ }
24
+
25
+ type MethodArray = {readonly[k in string]: FieldArray}
26
+
27
+ export type Method = O.Entry<FieldArray>
28
+
29
+ export type Type = BaseType|Id|Pointer
30
+
31
+ type Id = readonly[string]
32
+
33
+ export type BaseType = |
34
+ 'u8'|
35
+ 'i8'|
36
+ 'u16'|
37
+ 'i16'|
38
+ 'u32'|
39
+ 'i32'|
40
+ 'u64'|
41
+ 'i64'|
42
+ 'usize'|
43
+ 'isize'|
44
+ 'f32'|
45
+ 'f64'|
46
+ 'bool'
47
+
48
+ type Pointer = readonly['*', Type]
49
+
50
+ const isParam
51
+ : (kv: O.Entry<Type>) => boolean
52
+ = ([name]) => name !== '_'
53
+
54
+ const filterParam = filter(isParam)
55
+
56
+ export const paramList
57
+ : (fa: FieldArray) => list.List<Field>
58
+ = compose(entries)(filterParam)
59
+
60
+ export const result
61
+ : <T>(v: T) => (f: (type: Type) => T) => (fa: FieldArray) => T
62
+ = v => f => fa => '_' in fa ? f(fa._) : v
@@ -1,6 +1,5 @@
1
- import * as _ from './module.f.mjs'
1
+ import * as _ from './module.f.ts'
2
2
 
3
- /** @type {_.Library} */
4
3
  export default {
5
4
  Slice: {
6
5
  struct: {
@@ -28,4 +27,4 @@ export default {
28
27
  SetManagedStruct: { a: ['ManagedStruct'] },
29
28
  },
30
29
  }
31
- }
30
+ } satisfies _.Library
@@ -0,0 +1,100 @@
1
+ import * as package_ from '../package/module.f.ts'
2
+ import * as module from '../module/module.f.ts'
3
+ const { idToString, dir } = module
4
+ import * as function_ from '../module/function/module.f.ts'
5
+ import * as map from '../../types/map/module.f.ts'
6
+ const { empty: mapEmpty, setReplace } = map
7
+ import * as object from '../../types/object/module.f.ts'
8
+ const { fromMap } = object
9
+ import * as path from '../path/module.f.ts'
10
+ const { parseAndFind } = path
11
+ import * as stringSet from '../../types/string_set/module.f.ts'
12
+ const { set: setSet, contains: setContains, empty: stringSetEmpty } = stringSet
13
+
14
+ type Config<M> = {
15
+ readonly packageGet: package_.Get
16
+ readonly moduleMapInterface: module.MapInterface<M>
17
+ readonly moduleId: module.Id
18
+ readonly moduleMap: M
19
+ }
20
+
21
+ type Result<M> = readonly[module.State, M]
22
+
23
+ const notFound
24
+ : <M>(moduleMap: M) => Result<M>
25
+ = moduleMap => [['error', ['file not found']], moduleMap]
26
+
27
+ export const getOrBuild
28
+ : (compile: function_.Compile) =>
29
+ (packageGet: package_.Get) =>
30
+ <M>(moduleMapInterface: module.MapInterface<M>) =>
31
+ (moduleId: module.Id) =>
32
+ (moduleMap: M) =>
33
+ Result<M>
34
+ = compile => packageGet => moduleMapInterface => {
35
+
36
+ type M = typeof moduleMapInterface extends module.MapInterface<infer M> ? M : never
37
+
38
+ const build
39
+ : (buildSet: stringSet.StringSet) =>
40
+ (moduleId: module.Id) =>
41
+ (source: string) =>
42
+ (moduleMap: M) =>
43
+ Result<M>
44
+ = buildSet => moduleId => {
45
+
46
+ const moduleIdStr = idToString(moduleId)
47
+ const buildSet1 = setSet(moduleIdStr)(buildSet)
48
+ const moduleDir = dir(moduleId)
49
+ const require_
50
+ : function_.Require<readonly[map.Map<string>, M]>
51
+ = p => ([requireMap, m]) => {
52
+ const error
53
+ : (e: unknown) => function_.Result<readonly[map.Map<string>, M]>
54
+ = e => [['error', e], [requireMap, m]]
55
+ if (moduleDir === null) { return error('file not found') }
56
+ const r = parseAndFind(packageGet)(moduleDir)(p)
57
+ if (r === null) { return error('file not found') }
58
+ const rIdStr = idToString(r.id)
59
+ if (setContains(rIdStr)(buildSet1)) { return error('circular reference') }
60
+ const [state, m1] = build(buildSet1)(r.id)(r.source)(m)
61
+ return [state[0] === 'error' ? state : ['ok', state[1].exports], [setReplace(p)(rIdStr)(requireMap), m1]]
62
+ }
63
+ return source => moduleMap => {
64
+ const set
65
+ : (s: module.State) => (m: M) => Result<M>
66
+ = s => m => [s, moduleMapInterface.setReplace(moduleIdStr)(s)(m)]
67
+ const error
68
+ : (e: module.Error) => (m: M) => Result<M>
69
+ = e => set(['error', e])
70
+ // check compilation
71
+ const [kind, result] = compile(source)
72
+ if (kind === 'error') { return error(['compilation error', result])(moduleMap) }
73
+ // build
74
+ const [[state, value], [requireMap, moduleMap2]] = result(require_)([mapEmpty, moduleMap])
75
+ const x = state === 'error' ?
76
+ error(['runtime error', value]) :
77
+ set(['ok', { exports: value, requireMap: fromMap(requireMap) }])
78
+ return x(moduleMap2)
79
+ }
80
+ }
81
+
82
+ const f
83
+ : (moduleId: module.Id) => (moduleMap: M) => Result<M>
84
+ = moduleId => moduleMap => {
85
+
86
+ const moduleIdStr = idToString(moduleId)
87
+ // check moduleMap
88
+ {
89
+ const m = moduleMapInterface.at(moduleIdStr)(moduleMap)
90
+ if (m !== null) { return [m, moduleMap] }
91
+ }
92
+ // check package
93
+ const p = packageGet(moduleId.package)
94
+ if (p === null) { return notFound(moduleMap) }
95
+ // check file
96
+ const source = p.file(moduleId.path.join('/'))
97
+ return (source === null ? notFound : build(stringSetEmpty)(moduleId)(source))(moduleMap)
98
+ }
99
+ return f
100
+ }