functionalscript 0.2.6 → 0.3.1

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 +20 -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} +66 -61
  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
@@ -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
+ }