functionalscript 0.1.609 → 0.2.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 (393) hide show
  1. package/com/cpp/module.f.mjs +20 -25
  2. package/com/cpp/testlib.f.mjs +3 -4
  3. package/com/cs/module.f.mjs +18 -23
  4. package/com/cs/testlib.f.mjs +3 -5
  5. package/com/rust/module.f.mjs +25 -30
  6. package/com/rust/testlib.f.mjs +3 -5
  7. package/com/test/build.f.mjs +2 -2
  8. package/com/test/build.mjs +4 -4
  9. package/com/types/module.f.mjs +5 -12
  10. package/commonjs/build/module.f.mjs +23 -28
  11. package/commonjs/build/test.f.mjs +4 -4
  12. package/commonjs/module/function/module.f.mjs +0 -2
  13. package/commonjs/module/module.f.mjs +2 -9
  14. package/commonjs/module.f.mjs +0 -2
  15. package/commonjs/module.mjs +2 -7
  16. package/commonjs/package/dependencies/module.f.mjs +5 -10
  17. package/commonjs/package/dependencies/test.f.mjs +1 -1
  18. package/commonjs/package/module.f.mjs +6 -13
  19. package/commonjs/package/test.f.mjs +1 -1
  20. package/commonjs/path/module.f.mjs +12 -23
  21. package/commonjs/path/test.f.mjs +11 -11
  22. package/commonjs/test.mjs +1 -1
  23. package/dev/module.f.mjs +1 -4
  24. package/dev/module.mjs +1 -1
  25. package/dev/test/module.f.mjs +4 -6
  26. package/djs/module.f.mjs +12 -19
  27. package/djs/parser/module.f.mjs +18 -24
  28. package/djs/parser/test.f.mjs +9 -9
  29. package/djs/test.f.mjs +4 -4
  30. package/djs/tokenizer/module.f.mjs +18 -23
  31. package/djs/tokenizer/test.f.mjs +6 -6
  32. package/fsc/module.f.mjs +17 -24
  33. package/fsc/test.f.mjs +3 -3
  34. package/fsm/module.f.mjs +27 -38
  35. package/fsm/test.f.mjs +8 -8
  36. package/html/module.f.mjs +14 -23
  37. package/html/test.f.mjs +4 -4
  38. package/js/tokenizer/module.f.mjs +55 -62
  39. package/js/tokenizer/test.f.mjs +6 -6
  40. package/json/module.f.mjs +18 -31
  41. package/json/parser/module.f.mjs +9 -14
  42. package/json/parser/test.f.mjs +7 -7
  43. package/json/serializer/module.f.mjs +14 -29
  44. package/json/serializer/test.f.mjs +2 -2
  45. package/json/test.f.mjs +3 -3
  46. package/json/tokenizer/module.f.mjs +14 -19
  47. package/json/tokenizer/test.f.mjs +6 -6
  48. package/jsr.json +59 -59
  49. package/nodejs/version/main.mjs +1 -1
  50. package/nodejs/version/module.f.mjs +2 -7
  51. package/nodejs/version/test.f.mjs +3 -3
  52. package/out/com/cpp/module.f.d.mts +4 -0
  53. package/out/com/cpp/module.f.mjs +123 -0
  54. package/out/com/cpp/test.f.mjs +40 -0
  55. package/out/com/cpp/testlib.f.mjs +7 -0
  56. package/out/com/cs/module.f.d.mts +4 -0
  57. package/out/com/cs/module.f.mjs +95 -0
  58. package/out/com/cs/test.f.mjs +43 -0
  59. package/out/com/cs/testlib.f.mjs +7 -0
  60. package/{com → out/com}/rust/module.f.d.mts +3 -7
  61. package/out/com/rust/module.f.mjs +213 -0
  62. package/out/com/rust/test.f.mjs +123 -0
  63. package/out/com/rust/testlib.f.mjs +7 -0
  64. package/{com → out/com}/test/build.f.d.mts +2 -2
  65. package/out/com/test/build.f.mjs +98 -0
  66. package/out/com/test/build.mjs +40 -0
  67. package/{com → out/com}/types/module.f.d.mts +5 -10
  68. package/out/com/types/module.f.mjs +51 -0
  69. package/out/com/types/testlib.f.mjs +30 -0
  70. package/out/commonjs/build/module.f.d.mts +20 -0
  71. package/out/commonjs/build/module.f.mjs +107 -0
  72. package/out/commonjs/build/test.f.mjs +102 -0
  73. package/{commonjs → out/commonjs}/module/function/module.f.d.mts +0 -2
  74. package/out/commonjs/module/function/module.f.mjs +15 -0
  75. package/{commonjs → out/commonjs}/module/module.f.d.mts +16 -21
  76. package/out/commonjs/module/module.f.mjs +48 -0
  77. package/out/commonjs/module.d.mts +3 -0
  78. package/{commonjs → out/commonjs}/module.f.d.mts +0 -2
  79. package/out/commonjs/module.f.mjs +10 -0
  80. package/out/commonjs/module.mjs +26 -0
  81. package/out/commonjs/package/dependencies/module.f.d.mts +6 -0
  82. package/out/commonjs/package/dependencies/module.f.mjs +21 -0
  83. package/out/commonjs/package/dependencies/test.f.mjs +15 -0
  84. package/out/commonjs/package/module.f.d.mts +21 -0
  85. package/out/commonjs/package/module.f.mjs +40 -0
  86. package/out/commonjs/package/test.f.mjs +27 -0
  87. package/{commonjs → out/commonjs}/path/module.f.d.mts +25 -32
  88. package/out/commonjs/path/module.f.mjs +171 -0
  89. package/out/commonjs/path/test.f.mjs +231 -0
  90. package/out/commonjs/test.mjs +87 -0
  91. package/out/dev/index.mjs +2 -0
  92. package/out/dev/module.f.d.mts +1 -0
  93. package/out/dev/module.f.mjs +2 -0
  94. package/out/dev/module.mjs +167 -0
  95. package/{dev → out/dev}/test/module.f.d.mts +2 -3
  96. package/out/dev/test/module.f.mjs +134 -0
  97. package/out/dev/test.f.mjs +58 -0
  98. package/out/dev/test.mjs +52 -0
  99. package/{djs → out/djs}/module.f.d.mts +13 -18
  100. package/out/djs/module.f.mjs +75 -0
  101. package/{djs → out/djs}/parser/module.f.d.mts +11 -15
  102. package/out/djs/parser/module.f.mjs +432 -0
  103. package/out/djs/parser/test.f.mjs +535 -0
  104. package/out/djs/test.f.mjs +84 -0
  105. package/out/djs/tokenizer/module.f.d.mts +13 -0
  106. package/out/djs/tokenizer/module.f.mjs +87 -0
  107. package/out/djs/tokenizer/test.f.mjs +480 -0
  108. package/out/fsc/module.f.d.mts +7 -0
  109. package/out/fsc/module.f.mjs +105 -0
  110. package/out/fsc/test.f.mjs +19 -0
  111. package/out/fsm/module.f.d.mts +14 -0
  112. package/out/fsm/module.f.mjs +80 -0
  113. package/out/fsm/test.f.mjs +138 -0
  114. package/out/html/module.f.d.mts +15 -0
  115. package/out/html/module.f.mjs +94 -0
  116. package/out/html/test.f.mjs +45 -0
  117. package/out/issues/test.f.mjs +66 -0
  118. package/{js → out/js}/tokenizer/module.f.d.mts +10 -15
  119. package/out/js/tokenizer/module.f.mjs +686 -0
  120. package/out/js/tokenizer/test.f.mjs +844 -0
  121. package/out/json/module.f.d.mts +33 -0
  122. package/out/json/module.f.mjs +89 -0
  123. package/{json → out/json}/parser/module.f.d.mts +9 -13
  124. package/out/json/parser/module.f.mjs +224 -0
  125. package/out/json/parser/test.f.mjs +321 -0
  126. package/out/json/serializer/module.f.d.mts +36 -0
  127. package/out/json/serializer/module.f.mjs +67 -0
  128. package/out/json/serializer/test.f.mjs +87 -0
  129. package/out/json/test.f.mjs +61 -0
  130. package/out/json/tokenizer/module.f.d.mts +13 -0
  131. package/out/json/tokenizer/module.f.mjs +78 -0
  132. package/out/json/tokenizer/test.f.mjs +420 -0
  133. package/out/nanvm-lib/tests/test.f.mjs +87 -0
  134. package/out/nodejs/version/main.mjs +3 -0
  135. package/{nodejs → out/nodejs}/version/module.f.d.mts +4 -9
  136. package/out/nodejs/version/module.f.mjs +34 -0
  137. package/out/nodejs/version/test.f.mjs +97 -0
  138. package/{prime_field → out/prime_field}/module.f.d.mts +20 -23
  139. package/out/prime_field/module.f.mjs +87 -0
  140. package/out/prime_field/test.f.mjs +145 -0
  141. package/{secp → out/secp}/module.f.d.mts +27 -28
  142. package/out/secp/module.f.mjs +113 -0
  143. package/out/secp/test.f.mjs +63 -0
  144. package/out/sha2/module.f.d.mts +15 -0
  145. package/out/sha2/module.f.mjs +172 -0
  146. package/out/sha2/test.f.mjs +86 -0
  147. package/out/text/ascii/module.f.d.mts +70 -0
  148. package/out/text/ascii/module.f.mjs +154 -0
  149. package/out/text/ascii/test.f.mjs +14 -0
  150. package/out/text/module.f.d.mts +13 -0
  151. package/out/text/module.f.mjs +19 -0
  152. package/out/text/sgr/module.f.d.mts +12 -0
  153. package/out/text/sgr/module.f.mjs +17 -0
  154. package/out/text/test.f.mjs +19 -0
  155. package/out/text/utf16/module.f.d.mts +12 -0
  156. package/out/text/utf16/module.f.mjs +86 -0
  157. package/out/text/utf16/test.f.mjs +145 -0
  158. package/out/text/utf8/module.f.d.mts +10 -0
  159. package/out/text/utf8/module.f.mjs +126 -0
  160. package/out/text/utf8/test.f.mjs +175 -0
  161. package/{types → out/types}/array/module.f.d.mts +14 -24
  162. package/out/types/array/module.f.mjs +95 -0
  163. package/out/types/array/test.f.mjs +116 -0
  164. package/out/types/bigfloat/module.f.d.mts +6 -0
  165. package/out/types/bigfloat/module.f.mjs +77 -0
  166. package/out/types/bigfloat/test.f.mjs +349 -0
  167. package/out/types/bigint/module.f.d.mts +29 -0
  168. package/{types/bigint/module.f.d.mts → out/types/bigint/module.f.mjs} +64 -27
  169. package/out/types/bigint/test.f.mjs +192 -0
  170. package/{types → out/types}/btree/find/module.f.d.mts +20 -26
  171. package/out/types/btree/find/module.f.mjs +137 -0
  172. package/out/types/btree/find/test.f.mjs +156 -0
  173. package/out/types/btree/module.f.d.mts +5 -0
  174. package/out/types/btree/module.f.mjs +34 -0
  175. package/{types → out/types}/btree/remove/module.f.d.mts +7 -12
  176. package/out/types/btree/remove/module.f.mjs +209 -0
  177. package/out/types/btree/remove/test.f.mjs +638 -0
  178. package/{types → out/types}/btree/set/module.f.d.mts +3 -7
  179. package/out/types/btree/set/module.f.mjs +114 -0
  180. package/out/types/btree/set/test.f.mjs +390 -0
  181. package/out/types/btree/test.f.mjs +83 -0
  182. package/{types → out/types}/btree/types/module.f.d.mts +0 -2
  183. package/out/types/btree/types/module.f.mjs +50 -0
  184. package/out/types/byte_set/module.f.d.mts +25 -0
  185. package/out/types/byte_set/module.f.mjs +42 -0
  186. package/out/types/byte_set/test.f.mjs +123 -0
  187. package/{types → out/types}/function/compare/module.f.d.mts +9 -15
  188. package/out/types/function/compare/module.f.mjs +22 -0
  189. package/out/types/function/compare/test.f.mjs +8 -0
  190. package/{types → out/types}/function/module.f.d.mts +20 -27
  191. package/out/types/function/module.f.mjs +44 -0
  192. package/{types → out/types}/function/operator/module.f.d.mts +28 -43
  193. package/out/types/function/operator/module.f.mjs +60 -0
  194. package/out/types/function/test.f.mjs +15 -0
  195. package/out/types/list/module.f.d.mts +82 -0
  196. package/out/types/list/module.f.mjs +269 -0
  197. package/out/types/list/test.f.mjs +401 -0
  198. package/out/types/map/module.f.d.mts +21 -0
  199. package/out/types/map/module.f.mjs +54 -0
  200. package/out/types/map/test.f.mjs +115 -0
  201. package/out/types/nibble_set/module.f.d.mts +16 -0
  202. package/out/types/nibble_set/module.f.mjs +19 -0
  203. package/out/types/nibble_set/test.f.mjs +90 -0
  204. package/out/types/nullable/module.f.d.mts +9 -0
  205. package/out/types/nullable/module.f.mjs +9 -0
  206. package/out/types/nullable/test.f.mjs +12 -0
  207. package/out/types/number/module.f.d.mts +7 -0
  208. package/out/types/number/module.f.mjs +12 -0
  209. package/out/types/number/test.f.mjs +126 -0
  210. package/out/types/object/module.f.d.mts +22 -0
  211. package/out/types/object/module.f.mjs +27 -0
  212. package/out/types/object/test.f.mjs +17 -0
  213. package/out/types/range/module.f.d.mts +6 -0
  214. package/out/types/range/module.f.mjs +6 -0
  215. package/out/types/range/test.f.mjs +18 -0
  216. package/{types → out/types}/range_map/module.f.d.mts +9 -15
  217. package/out/types/range_map/module.f.mjs +84 -0
  218. package/out/types/range_map/test.f.mjs +201 -0
  219. package/out/types/result/module.d.mts +7 -0
  220. package/{types → out/types}/result/module.f.d.mts +6 -12
  221. package/out/types/result/module.f.mjs +25 -0
  222. package/out/types/result/module.mjs +16 -0
  223. package/{types → out/types}/sorted_list/module.f.d.mts +22 -28
  224. package/out/types/sorted_list/module.f.mjs +102 -0
  225. package/out/types/sorted_list/test.f.mjs +66 -0
  226. package/{types → out/types}/sorted_set/module.f.d.mts +6 -12
  227. package/out/types/sorted_set/module.f.mjs +29 -0
  228. package/out/types/sorted_set/test.f.mjs +80 -0
  229. package/out/types/string/module.f.d.mts +9 -0
  230. package/out/types/string/module.f.mjs +17 -0
  231. package/out/types/string/test.f.mjs +58 -0
  232. package/out/types/string_set/module.f.d.mts +13 -0
  233. package/out/types/string_set/module.f.mjs +29 -0
  234. package/out/types/string_set/test.f.mjs +65 -0
  235. package/package.json +5 -4
  236. package/prime_field/module.f.mjs +9 -12
  237. package/prime_field/test.f.mjs +1 -1
  238. package/secp/module.f.mjs +38 -39
  239. package/secp/test.f.mjs +4 -4
  240. package/sha2/module.f.mjs +7 -20
  241. package/sha2/test.f.mjs +4 -4
  242. package/text/ascii/module.f.mjs +5 -10
  243. package/text/ascii/test.f.mjs +3 -3
  244. package/text/module.f.mjs +7 -14
  245. package/text/sgr/module.f.mjs +2 -4
  246. package/text/test.f.mjs +3 -3
  247. package/text/utf16/module.f.mjs +17 -28
  248. package/text/utf16/test.f.mjs +5 -5
  249. package/text/utf8/module.f.mjs +9 -16
  250. package/text/utf8/test.f.mjs +4 -4
  251. package/tsconfig.json +2 -2
  252. package/types/array/module.f.mjs +8 -25
  253. package/types/array/test.f.mjs +3 -3
  254. package/types/bigfloat/module.f.mjs +3 -10
  255. package/types/bigfloat/test.f.mjs +1 -1
  256. package/types/bigint/module.f.mjs +11 -30
  257. package/types/bigint/test.f.mjs +1 -1
  258. package/types/btree/find/module.f.mjs +8 -17
  259. package/types/btree/find/test.f.mjs +7 -7
  260. package/types/btree/module.f.mjs +6 -11
  261. package/types/btree/remove/module.f.mjs +10 -17
  262. package/types/btree/remove/test.f.mjs +5 -5
  263. package/types/btree/set/module.f.mjs +4 -9
  264. package/types/btree/set/test.f.mjs +4 -4
  265. package/types/btree/test.f.mjs +9 -9
  266. package/types/btree/types/module.f.mjs +0 -2
  267. package/types/byte_set/module.f.mjs +14 -39
  268. package/types/byte_set/test.f.mjs +5 -5
  269. package/types/function/compare/module.f.mjs +3 -12
  270. package/types/function/compare/test.f.mjs +1 -1
  271. package/types/function/module.f.mjs +4 -15
  272. package/types/function/operator/module.f.mjs +14 -41
  273. package/types/function/test.f.mjs +1 -1
  274. package/types/list/module.f.mjs +45 -114
  275. package/types/list/test.f.mjs +10 -10
  276. package/types/map/module.f.mjs +15 -30
  277. package/types/map/test.f.mjs +2 -2
  278. package/types/nibble_set/module.f.mjs +7 -24
  279. package/types/nibble_set/test.f.mjs +2 -2
  280. package/types/nullable/module.f.mjs +2 -9
  281. package/types/nullable/test.f.mjs +1 -1
  282. package/types/number/module.f.mjs +8 -19
  283. package/types/number/test.f.mjs +1 -1
  284. package/types/object/module.f.mjs +9 -20
  285. package/types/object/test.f.mjs +1 -1
  286. package/types/range/module.f.mjs +2 -9
  287. package/types/range/test.f.mjs +1 -1
  288. package/types/range_map/module.f.mjs +9 -18
  289. package/types/range_map/test.f.mjs +32 -32
  290. package/types/result/module.f.mjs +3 -12
  291. package/types/result/module.mjs +2 -2
  292. package/types/sorted_list/module.f.mjs +10 -19
  293. package/types/sorted_list/test.f.mjs +7 -7
  294. package/types/sorted_set/module.f.mjs +7 -16
  295. package/types/sorted_set/test.f.mjs +7 -7
  296. package/types/string/module.f.mjs +10 -21
  297. package/types/string/test.f.mjs +2 -2
  298. package/types/string_set/module.f.mjs +12 -27
  299. package/types/string_set/test.f.mjs +1 -1
  300. package/com/cpp/module.f.d.mts +0 -8
  301. package/com/cs/module.f.d.mts +0 -8
  302. package/commonjs/build/module.f.d.mts +0 -24
  303. package/commonjs/module.d.mts +0 -7
  304. package/commonjs/package/dependencies/module.f.d.mts +0 -10
  305. package/commonjs/package/module.f.d.mts +0 -27
  306. package/dev/module.f.d.mts +0 -4
  307. package/djs/tokenizer/module.f.d.mts +0 -17
  308. package/fsc/module.f.d.mts +0 -12
  309. package/fsm/module.f.d.mts +0 -21
  310. package/html/module.f.d.mts +0 -20
  311. package/json/module.f.d.mts +0 -41
  312. package/json/serializer/module.f.d.mts +0 -45
  313. package/json/tokenizer/module.f.d.mts +0 -17
  314. package/sha2/module.f.d.mts +0 -23
  315. package/text/ascii/module.f.d.mts +0 -73
  316. package/text/module.f.d.mts +0 -18
  317. package/text/sgr/module.f.d.mts +0 -14
  318. package/text/utf16/module.f.d.mts +0 -19
  319. package/text/utf8/module.f.d.mts +0 -15
  320. package/types/bigfloat/module.f.d.mts +0 -11
  321. package/types/btree/module.f.d.mts +0 -9
  322. package/types/byte_set/module.f.d.mts +0 -38
  323. package/types/list/module.f.d.mts +0 -117
  324. package/types/map/module.f.d.mts +0 -30
  325. package/types/nibble_set/module.f.d.mts +0 -26
  326. package/types/nullable/module.f.d.mts +0 -14
  327. package/types/number/module.f.d.mts +0 -13
  328. package/types/object/module.f.d.mts +0 -29
  329. package/types/range/module.f.d.mts +0 -11
  330. package/types/result/module.d.mts +0 -7
  331. package/types/string/module.f.d.mts +0 -15
  332. package/types/string_set/module.f.d.mts +0 -21
  333. /package/{com → out/com}/cpp/test.f.d.mts +0 -0
  334. /package/{com → out/com}/cpp/testlib.f.d.mts +0 -0
  335. /package/{com → out/com}/cs/test.f.d.mts +0 -0
  336. /package/{com → out/com}/cs/testlib.f.d.mts +0 -0
  337. /package/{com → out/com}/rust/test.f.d.mts +0 -0
  338. /package/{com → out/com}/rust/testlib.f.d.mts +0 -0
  339. /package/{com → out/com}/test/build.d.mts +0 -0
  340. /package/{com → out/com}/types/testlib.f.d.mts +0 -0
  341. /package/{commonjs → out/commonjs}/build/test.f.d.mts +0 -0
  342. /package/{commonjs → out/commonjs}/package/dependencies/test.f.d.mts +0 -0
  343. /package/{commonjs → out/commonjs}/package/test.f.d.mts +0 -0
  344. /package/{commonjs → out/commonjs}/path/test.f.d.mts +0 -0
  345. /package/{commonjs → out/commonjs}/test.d.mts +0 -0
  346. /package/{dev → out/dev}/index.d.mts +0 -0
  347. /package/{dev → out/dev}/module.d.mts +0 -0
  348. /package/{dev → out/dev}/test.d.mts +0 -0
  349. /package/{dev → out/dev}/test.f.d.mts +0 -0
  350. /package/{djs → out/djs}/parser/test.f.d.mts +0 -0
  351. /package/{djs → out/djs}/test.f.d.mts +0 -0
  352. /package/{djs → out/djs}/tokenizer/test.f.d.mts +0 -0
  353. /package/{fsc → out/fsc}/test.f.d.mts +0 -0
  354. /package/{fsm → out/fsm}/test.f.d.mts +0 -0
  355. /package/{html → out/html}/test.f.d.mts +0 -0
  356. /package/{issues → out/issues}/test.f.d.mts +0 -0
  357. /package/{js → out/js}/tokenizer/test.f.d.mts +0 -0
  358. /package/{json → out/json}/parser/test.f.d.mts +0 -0
  359. /package/{json → out/json}/serializer/test.f.d.mts +0 -0
  360. /package/{json → out/json}/test.f.d.mts +0 -0
  361. /package/{json → out/json}/tokenizer/test.f.d.mts +0 -0
  362. /package/{nanvm-lib → out/nanvm-lib}/tests/test.f.d.mts +0 -0
  363. /package/{nodejs → out/nodejs}/version/main.d.mts +0 -0
  364. /package/{nodejs → out/nodejs}/version/test.f.d.mts +0 -0
  365. /package/{prime_field → out/prime_field}/test.f.d.mts +0 -0
  366. /package/{secp → out/secp}/test.f.d.mts +0 -0
  367. /package/{sha2 → out/sha2}/test.f.d.mts +0 -0
  368. /package/{text → out/text}/ascii/test.f.d.mts +0 -0
  369. /package/{text → out/text}/test.f.d.mts +0 -0
  370. /package/{text → out/text}/utf16/test.f.d.mts +0 -0
  371. /package/{text → out/text}/utf8/test.f.d.mts +0 -0
  372. /package/{types → out/types}/array/test.f.d.mts +0 -0
  373. /package/{types → out/types}/bigfloat/test.f.d.mts +0 -0
  374. /package/{types → out/types}/bigint/test.f.d.mts +0 -0
  375. /package/{types → out/types}/btree/find/test.f.d.mts +0 -0
  376. /package/{types → out/types}/btree/remove/test.f.d.mts +0 -0
  377. /package/{types → out/types}/btree/set/test.f.d.mts +0 -0
  378. /package/{types → out/types}/btree/test.f.d.mts +0 -0
  379. /package/{types → out/types}/byte_set/test.f.d.mts +0 -0
  380. /package/{types → out/types}/function/compare/test.f.d.mts +0 -0
  381. /package/{types → out/types}/function/test.f.d.mts +0 -0
  382. /package/{types → out/types}/list/test.f.d.mts +0 -0
  383. /package/{types → out/types}/map/test.f.d.mts +0 -0
  384. /package/{types → out/types}/nibble_set/test.f.d.mts +0 -0
  385. /package/{types → out/types}/nullable/test.f.d.mts +0 -0
  386. /package/{types → out/types}/number/test.f.d.mts +0 -0
  387. /package/{types → out/types}/object/test.f.d.mts +0 -0
  388. /package/{types → out/types}/range/test.f.d.mts +0 -0
  389. /package/{types → out/types}/range_map/test.f.d.mts +0 -0
  390. /package/{types → out/types}/sorted_list/test.f.d.mts +0 -0
  391. /package/{types → out/types}/sorted_set/test.f.d.mts +0 -0
  392. /package/{types → out/types}/string/test.f.d.mts +0 -0
  393. /package/{types → out/types}/string_set/test.f.d.mts +0 -0
@@ -1,8 +1,7 @@
1
- declare namespace _default {
2
- export { paramList };
3
- export { result };
4
- }
5
- export default _default;
1
+ /** @type {(fa: FieldArray) => list.List<Field> } */
2
+ export const paramList: (fa: FieldArray) => list.List<Field>;
3
+ /** @type {<T>(v: T) => (f: (type: Type) => T) => (fa: FieldArray) => T} */
4
+ export const result: <T>(v: T) => (f: (type: Type) => T) => (fa: FieldArray) => T;
6
5
  export type Library = { readonly [k in string]: Definition; };
7
6
  export type Definition = Struct | Interface;
8
7
  export type Struct = {
@@ -20,9 +19,5 @@ export type Type = BaseType | Id | Pointer;
20
19
  export type Id = readonly [string];
21
20
  export type BaseType = "u8" | "i8" | "u16" | "i16" | "u32" | "i32" | "u64" | "i64" | "usize" | "isize" | "f32" | "f64" | "bool";
22
21
  export type Pointer = readonly ["*", Type];
23
- /** @type {(fa: FieldArray) => List.List<Field> } */
24
- declare const paramList: (fa: FieldArray) => List.List<Field>;
25
- /** @type {<T>(v: T) => (f: (type: Type) => T) => (fa: FieldArray) => T} */
26
- declare const result: <T>(v: T) => (f: (type: Type) => T) => (fa: FieldArray) => T;
22
+ import * as list from '../../types/list/module.f.mjs';
27
23
  import * as O from '../../types/object/module.f.mjs';
28
- import * as List from '../../types/list/module.f.mjs';
@@ -0,0 +1,51 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ import * as O from '../../types/object/module.f.mjs';
3
+ import * as list from '../../types/list/module.f.mjs';
4
+ import * as f from '../../types/function/module.f.mjs';
5
+ const { compose } = f;
6
+ const { filter } = list;
7
+ const { entries } = Object;
8
+ /** @typedef {{readonly[k in string]: Definition}} Library */
9
+ /** @typedef {Struct|Interface} Definition */
10
+ /**
11
+ * @typedef {{
12
+ * readonly struct: FieldArray
13
+ * }} Struct
14
+ */
15
+ /** @typedef {{readonly[k in string]: Type}} FieldArray */
16
+ /** @typedef {O.Entry<Type>} Field */
17
+ /**
18
+ * @typedef {{
19
+ * readonly interface: MethodArray
20
+ * readonly guid: string
21
+ * }} Interface
22
+ */
23
+ /** @typedef {{readonly[k in string]: FieldArray}} MethodArray */
24
+ /** @typedef {O.Entry<FieldArray>} Method */
25
+ /** @typedef {BaseType|Id|Pointer} Type */
26
+ /** @typedef {readonly[string]} Id */
27
+ /**
28
+ * @typedef {|
29
+ * 'u8'|
30
+ * 'i8'|
31
+ * 'u16'|
32
+ * 'i16'|
33
+ * 'u32'|
34
+ * 'i32'|
35
+ * 'u64'|
36
+ * 'i64'|
37
+ * 'usize'|
38
+ * 'isize'|
39
+ * 'f32'|
40
+ * 'f64'|
41
+ * 'bool'
42
+ * } BaseType
43
+ */
44
+ /** @typedef {readonly['*', Type]} Pointer */
45
+ /** @type {(kv: O.Entry<Type>) => boolean} */
46
+ const isParam = ([name]) => name !== '_';
47
+ const filterParam = filter(isParam);
48
+ /** @type {(fa: FieldArray) => list.List<Field> } */
49
+ export const paramList = compose(entries)(filterParam);
50
+ /** @type {<T>(v: T) => (f: (type: Type) => T) => (fa: FieldArray) => T} */
51
+ export const result = v => f => fa => '_' in fa ? f(fa._) : v;
@@ -0,0 +1,30 @@
1
+ import * as _ from './module.f.mjs';
2
+ /** @type {_.Library} */
3
+ export default {
4
+ Slice: {
5
+ struct: {
6
+ Start: ['*', 'u8'],
7
+ Size: 'usize',
8
+ },
9
+ },
10
+ ManagedStruct: {
11
+ struct: {
12
+ M: ['IMy']
13
+ }
14
+ },
15
+ IMy: {
16
+ guid: 'C66FB270-2D80-49AD-BB6E-88C1F90B805D',
17
+ interface: {
18
+ GetSlice: { _: ['Slice'] },
19
+ SetSlice: { slice: ['Slice'] },
20
+ GetUnsafe: { _: ['*', 'bool'] },
21
+ SetUnsafe: {
22
+ p: ['*', ['Slice']],
23
+ size: 'u32'
24
+ },
25
+ Some: { p: ['IMy'], _: 'bool' },
26
+ GetIMy: { a: 'u16', b: 'i16', _: ['IMy'] },
27
+ SetManagedStruct: { a: ['ManagedStruct'] },
28
+ },
29
+ }
30
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @type {(compile: function_.Compile) =>
3
+ * (packageGet: package_.Get) =>
4
+ * <M>(moduleMapInterface: module.MapInterface<M>) =>
5
+ * (moduleId: module.Id) =>
6
+ * (moduleMap: M) =>
7
+ * Result<M>
8
+ * }
9
+ */
10
+ export const getOrBuild: (compile: function_.Compile) => (packageGet: package_.Get) => <M>(moduleMapInterface: module.MapInterface<M>) => (moduleId: module.Id) => (moduleMap: M) => Result<M>;
11
+ export type Config<M> = {
12
+ readonly packageGet: package_.Get;
13
+ readonly moduleMapInterface: module.MapInterface<M>;
14
+ readonly moduleId: module.Id;
15
+ readonly moduleMap: M;
16
+ };
17
+ export type Result<M> = readonly [module.State, M];
18
+ import * as function_ from '../module/function/module.f.mjs';
19
+ import * as package_ from '../package/module.f.mjs';
20
+ import * as module from '../module/module.f.mjs';
@@ -0,0 +1,107 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ import * as package_ from '../package/module.f.mjs';
3
+ import * as module from '../module/module.f.mjs';
4
+ const { idToString, dir } = module;
5
+ import * as function_ from '../module/function/module.f.mjs';
6
+ import * as map from '../../types/map/module.f.mjs';
7
+ const { empty: mapEmpty, setReplace } = map;
8
+ import * as object from '../../types/object/module.f.mjs';
9
+ const { fromMap } = object;
10
+ import * as path from '../path/module.f.mjs';
11
+ const { parseAndFind } = path;
12
+ import * as stringSet from '../../types/string_set/module.f.mjs';
13
+ const { set: setSet, contains: setContains, empty: stringSetEmpty } = stringSet;
14
+ /**
15
+ * @template M
16
+ * @typedef {{
17
+ * readonly packageGet: package_.Get
18
+ * readonly moduleMapInterface: module.MapInterface<M>
19
+ * readonly moduleId: module.Id
20
+ * readonly moduleMap: M
21
+ * }} Config
22
+ */
23
+ /**
24
+ * @template M
25
+ * @typedef {readonly[module.State, M]} Result
26
+ */
27
+ /** @type {<M>(moduleMap: M) => Result<M>} */
28
+ const notFound = moduleMap => [['error', ['file not found']], moduleMap];
29
+ /**
30
+ * @type {(compile: function_.Compile) =>
31
+ * (packageGet: package_.Get) =>
32
+ * <M>(moduleMapInterface: module.MapInterface<M>) =>
33
+ * (moduleId: module.Id) =>
34
+ * (moduleMap: M) =>
35
+ * Result<M>
36
+ * }
37
+ */
38
+ export const getOrBuild = compile => packageGet => moduleMapInterface => {
39
+ /** @typedef {typeof moduleMapInterface extends module.MapInterface<infer M> ? M : never} M */
40
+ /**
41
+ * @type {(buildSet: stringSet.StringSet) =>
42
+ * (moduleId: module.Id) =>
43
+ * (source: string) =>
44
+ * (moduleMap: M) =>
45
+ * Result<M>}
46
+ */
47
+ const build = buildSet => moduleId => {
48
+ const moduleIdStr = idToString(moduleId);
49
+ const buildSet1 = setSet(moduleIdStr)(buildSet);
50
+ const moduleDir = dir(moduleId);
51
+ /** @type {function_.Require<readonly[map.Map<string>, M]>} */
52
+ const require_ = p => ([requireMap, m]) => {
53
+ /** @type {(e: unknown) => function_.Result<readonly[map.Map<string>, M]>} */
54
+ const error = e => [['error', e], [requireMap, m]];
55
+ if (moduleDir === null) {
56
+ return error('file not found');
57
+ }
58
+ const r = parseAndFind(packageGet)(moduleDir)(p);
59
+ if (r === null) {
60
+ return error('file not found');
61
+ }
62
+ const rIdStr = idToString(r.id);
63
+ if (setContains(rIdStr)(buildSet1)) {
64
+ return error('circular reference');
65
+ }
66
+ const [state, m1] = build(buildSet1)(r.id)(r.source)(m);
67
+ return [state[0] === 'error' ? state : ['ok', state[1].exports], [setReplace(p)(rIdStr)(requireMap), m1]];
68
+ };
69
+ return source => moduleMap => {
70
+ /** @type {(s: module.State) => (m: M) => Result<M>} */
71
+ const set = s => m => [s, moduleMapInterface.setReplace(moduleIdStr)(s)(m)];
72
+ /** @type {(e: module.Error) => (m: M) => Result<M>} */
73
+ const error = e => set(['error', e]);
74
+ // check compilation
75
+ const [kind, result] = compile(source);
76
+ if (kind === 'error') {
77
+ return error(['compilation error', result])(moduleMap);
78
+ }
79
+ // build
80
+ const [[state, value], [requireMap, moduleMap2]] = result(require_)([mapEmpty, moduleMap]);
81
+ const x = state === 'error' ?
82
+ error(['runtime error', value]) :
83
+ set(['ok', { exports: value, requireMap: fromMap(requireMap) }]);
84
+ return x(moduleMap2);
85
+ };
86
+ };
87
+ /** @type {(moduleId: module.Id) => (moduleMap: M) => Result<M>} */
88
+ const f = moduleId => moduleMap => {
89
+ const moduleIdStr = idToString(moduleId);
90
+ // check moduleMap
91
+ {
92
+ const m = moduleMapInterface.at(moduleIdStr)(moduleMap);
93
+ if (m !== null) {
94
+ return [m, moduleMap];
95
+ }
96
+ }
97
+ // check package
98
+ const p = packageGet(moduleId.package);
99
+ if (p === null) {
100
+ return notFound(moduleMap);
101
+ }
102
+ // check file
103
+ const source = p.file(moduleId.path.join('/'));
104
+ return (source === null ? notFound : build(stringSetEmpty)(moduleId)(source))(moduleMap);
105
+ };
106
+ return f;
107
+ };
@@ -0,0 +1,102 @@
1
+ import * as _ from './module.f.mjs';
2
+ import * as map from '../../types/map/module.f.mjs';
3
+ import * as Module from '../module/module.f.mjs';
4
+ import * as ModuleFunction from '../module/function/module.f.mjs';
5
+ import * as Result from '../../types/result/module.f.mjs';
6
+ import * as Package from '../package/module.f.mjs';
7
+ import * as o from '../../types/object/module.f.mjs';
8
+ const { at } = o;
9
+ /** @type {{ readonly [k in string]?: Result.Result<ModuleFunction.Function_, unknown> }} */
10
+ const compileMap = {
11
+ ':index.js': [
12
+ 'ok',
13
+ require_ => m0 => {
14
+ let [r, m] = require_('./b')(m0);
15
+ if (r[0] === 'error') {
16
+ throw JSON.stringify(r);
17
+ }
18
+ [r, m] = require_('./a/')(m);
19
+ if (r[0] === 'error') {
20
+ throw JSON.stringify(r);
21
+ }
22
+ [r, m] = require_('x/r')(m);
23
+ if (r[0] === 'error') {
24
+ throw JSON.stringify(r);
25
+ }
26
+ return [['ok', ':index.js'], m];
27
+ }
28
+ ],
29
+ ':b.js': [
30
+ 'ok',
31
+ () => m0 => [['ok', ':b.js'], m0]
32
+ ],
33
+ ':a/index.js': [
34
+ 'ok',
35
+ () => m0 => [['ok', ':a/index.js'], m0]
36
+ ],
37
+ 'x:r.js': [
38
+ 'ok',
39
+ () => m0 => [['ok', 'x:r.js'], m0]
40
+ ],
41
+ };
42
+ /** @type {ModuleFunction.Compile} */
43
+ const compile = source => compileMap[source] ?? ['error', 'invalid source'];
44
+ /** @typedef {{ readonly [k in string]: string }} StringMap */
45
+ /** @type {{ readonly [k in string]: { readonly dependencies: StringMap, readonly files: StringMap }}} */
46
+ const packageMap = {
47
+ '': {
48
+ dependencies: {
49
+ 'x': '/node_modules/x'
50
+ },
51
+ files: {
52
+ 'index.js': ':index.js',
53
+ 'b.js': ':b.js',
54
+ 'a/index.js': ':a/index.js',
55
+ }
56
+ },
57
+ '/node_modules/x': {
58
+ dependencies: {},
59
+ files: {
60
+ 'r.js': 'x:r.js'
61
+ }
62
+ },
63
+ };
64
+ /** @type {Package.Get} */
65
+ const packageGet = packageId => {
66
+ const p = at(packageId)(packageMap);
67
+ return p === null ? null :
68
+ {
69
+ dependency: dependency => at(dependency)(p.dependencies),
70
+ file: file => at(file)(p.files),
71
+ };
72
+ };
73
+ const getOrBuild = _.getOrBuild(compile)(packageGet)(/** @type {Module.MapInterface<map.Map<Module.State>>} */ (map));
74
+ export default () => {
75
+ let [r, m] = getOrBuild({ package: '', path: ['index.js'] })(map.empty);
76
+ {
77
+ if (r === null) {
78
+ throw 'r === null';
79
+ }
80
+ const x = JSON.stringify(r);
81
+ if (x !==
82
+ '["ok",{"exports":":index.js","requireMap":{"./a/":"/a/index.js","./b":"/b.js","x/r":"/node_modules/x/r.js"}}]') {
83
+ throw `0:${x}`;
84
+ }
85
+ }
86
+ {
87
+ [r, m] = getOrBuild({ package: '', path: ['b.js'] })(m);
88
+ const x = JSON.stringify(r);
89
+ if (x !==
90
+ '["ok",{"exports":":b.js","requireMap":{}}]') {
91
+ throw x;
92
+ }
93
+ }
94
+ {
95
+ [r, m] = getOrBuild({ package: '', path: ['c.js'] })(m);
96
+ const x = JSON.stringify(r);
97
+ if (x !==
98
+ '["error",["file not found"]]') {
99
+ throw x;
100
+ }
101
+ }
102
+ };
@@ -1,5 +1,3 @@
1
- declare const _default: {};
2
- export default _default;
3
1
  export type Function_ = <M>(require: Require<M>) => (prior: M) => Result<M>;
4
2
  export type Result<M> = readonly [TypesResult.Result<unknown, unknown>, M];
5
3
  export type Require<M> = (path: string) => (prior: M) => Result<M>;
@@ -0,0 +1,15 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ /**
3
+ * An IO interface for creating and running module functions.
4
+ */
5
+ import * as TypesResult from '../../../types/result/module.f.mjs';
6
+ /** @typedef {<M>(require: Require<M>) => (prior: M) => Result<M>} Function_ */
7
+ /**
8
+ * @template M
9
+ * @typedef {readonly[TypesResult.Result<unknown, unknown>, M]} Result
10
+ */
11
+ /**
12
+ * @template M
13
+ * @typedef {(path: string) => (prior: M) => Result<M>} Require
14
+ */
15
+ /** @typedef {(source: string) => TypesResult.Result<Function_, unknown>} Compile */
@@ -1,22 +1,3 @@
1
- declare namespace _default {
2
- export { dir };
3
- export { idToString };
4
- }
5
- export default _default;
6
- export type MapInterface<M> = {
7
- readonly at: (moduleId: string) => (moduleMap: M) => State | null;
8
- readonly setReplace: (moduleId: string) => (moduleState: State) => (moduleMap: M) => M;
9
- };
10
- export type State = readonly ["ok", Module] | readonly ["error", Error];
11
- export type Module = {
12
- readonly exports: unknown;
13
- readonly requireMap: O.Map<string>;
14
- };
15
- export type Error = ["file not found"] | ["compilation error", unknown] | ["runtime error", unknown] | ["circular reference"];
16
- export type Id = {
17
- readonly package: string;
18
- readonly path: readonly string[];
19
- };
20
1
  /**
21
2
  * @template M
22
3
  * @typedef {{
@@ -51,7 +32,21 @@ export type Id = {
51
32
  * }} Id
52
33
  */
53
34
  /** @type {(id: Id) => Id | null} */
54
- declare const dir: (id: Id) => Id | null;
35
+ export const dir: (id: Id) => Id | null;
55
36
  /** @type {(id: Id) => string} */
56
- declare const idToString: (id: Id) => string;
37
+ export const idToString: (id: Id) => string;
38
+ export type MapInterface<M> = {
39
+ readonly at: (moduleId: string) => (moduleMap: M) => State | null;
40
+ readonly setReplace: (moduleId: string) => (moduleState: State) => (moduleMap: M) => M;
41
+ };
42
+ export type State = readonly ["ok", Module] | readonly ["error", Error];
43
+ export type Module = {
44
+ readonly exports: unknown;
45
+ readonly requireMap: O.Map<string>;
46
+ };
47
+ export type Error = ["file not found"] | ["compilation error", unknown] | ["runtime error", unknown] | ["circular reference"];
48
+ export type Id = {
49
+ readonly package: string;
50
+ readonly path: readonly string[];
51
+ };
57
52
  import * as O from '../../types/object/module.f.mjs';
@@ -0,0 +1,48 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ import * as O from '../../types/object/module.f.mjs';
3
+ /**
4
+ * @template M
5
+ * @typedef {{
6
+ * readonly at: (moduleId: string) => (moduleMap: M) => State | null
7
+ * readonly setReplace: (moduleId: string) => (moduleState: State) => (moduleMap: M) => M
8
+ * }} MapInterface
9
+ */
10
+ /**
11
+ * @typedef {|
12
+ * readonly['ok', Module] |
13
+ * readonly['error', Error]
14
+ * } State
15
+ */
16
+ /**
17
+ * @typedef {{
18
+ * readonly exports: unknown
19
+ * readonly requireMap: O.Map<string>
20
+ * }} Module
21
+ */
22
+ /**
23
+ * @typedef {|
24
+ * ['file not found'] |
25
+ * ['compilation error', unknown] |
26
+ * ['runtime error', unknown] |
27
+ * ['circular reference']
28
+ * } Error
29
+ */
30
+ /**
31
+ * @typedef {{
32
+ * readonly package: string
33
+ * readonly path: readonly string[]
34
+ * }} Id
35
+ */
36
+ /** @type {(id: Id) => Id | null} */
37
+ export const dir = id => {
38
+ const len = id.path.length;
39
+ if (len < 1) {
40
+ return null;
41
+ }
42
+ return {
43
+ package: id.package,
44
+ path: id.path.slice(0, len - 1)
45
+ };
46
+ };
47
+ /** @type {(id: Id) => string} */
48
+ export const idToString = id => `${id.package}/${id.path.join('/')}`;
@@ -0,0 +1,3 @@
1
+ /** @type {ModuleFunction.Compile} */
2
+ export const compile: ModuleFunction.Compile;
3
+ import * as ModuleFunction from './module/function/module.f.mjs';
@@ -1,4 +1,2 @@
1
- declare const _default: {};
2
- export default _default;
3
1
  export type PackageMap = (packageName: string) => PackageMap | Package | null;
4
2
  export type Package = readonly [string, PackageMap, (fileName: string) => string | null];
@@ -0,0 +1,10 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ export {};
3
+ /** @typedef {(packageName: string) => PackageMap|Package|null} PackageMap */
4
+ /**
5
+ * @typedef {readonly[
6
+ * string,
7
+ * PackageMap,
8
+ * (fileName: string) => string|null
9
+ * ]} Package
10
+ */
@@ -0,0 +1,26 @@
1
+ import unsafeResult from '../types/result/module.mjs';
2
+ const { tryCatch } = unsafeResult;
3
+ import * as result from '../types/result/module.f.mjs';
4
+ const { unwrap } = result;
5
+ import * as ModuleFunction from './module/function/module.f.mjs';
6
+ /** @type {(f: Function) => ModuleFunction.Function_} */
7
+ const build = f => immutableRequire => mutableData => {
8
+ /** @type {(path: string) => unknown} */
9
+ const mutableRequire = path => {
10
+ const [result, data] = immutableRequire(path)(mutableData);
11
+ // Side effect: setting a variable from a nested function (closure)
12
+ // is not allowed in FunctionalScript.
13
+ mutableData = data;
14
+ return unwrap(result);
15
+ };
16
+ const result = tryCatch(() => {
17
+ const mutableModule = { exports: {} };
18
+ f(mutableModule, mutableRequire);
19
+ return mutableModule.exports;
20
+ });
21
+ return [result, mutableData];
22
+ };
23
+ /** @type {ModuleFunction.Compile} */
24
+ export const compile = source =>
25
+ // Side effect: a `Function` constructor is not allowed in FunctionalScript.
26
+ tryCatch(() => build(Function('module', 'require', `"use strict";${source}`)));
@@ -0,0 +1,6 @@
1
+ /** @type {(j: json.Unknown) => j is DependenciesJson} */
2
+ export const isDependenciesJson: (j: json.Unknown) => j is DependenciesJson;
3
+ export type DependencyJson = readonly [string, string];
4
+ export type DependencyMapJson = { readonly [k in string]: string; };
5
+ export type DependenciesJson = DependencyMapJson | null;
6
+ import * as json from '../../../json/module.f.mjs';
@@ -0,0 +1,21 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ import * as json from '../../../json/module.f.mjs';
3
+ const { isObject } = json;
4
+ import * as list from '../../../types/list/module.f.mjs';
5
+ const { map, every } = list;
6
+ const { entries } = Object;
7
+ /** @typedef {readonly[string, string]} DependencyJson */
8
+ /** @typedef {{readonly[k in string]: string}} DependencyMapJson */
9
+ /** @typedef {DependencyMapJson|null} DependenciesJson */
10
+ /** @type {(entry: json.Entry) => boolean} */
11
+ const isDependencyJson = ([, v]) => typeof v === 'string';
12
+ /** @type {(j: json.Unknown) => j is DependenciesJson} */
13
+ export const isDependenciesJson = j => {
14
+ if (j === null) {
15
+ return true;
16
+ }
17
+ if (!isObject(j)) {
18
+ return false;
19
+ }
20
+ return every(map(isDependencyJson)(entries(j)));
21
+ };
@@ -0,0 +1,15 @@
1
+ import * as _ from './module.f.mjs';
2
+ export default () => {
3
+ if (!_.isDependenciesJson(null)) {
4
+ throw 'error';
5
+ }
6
+ if (!_.isDependenciesJson({})) {
7
+ throw 'error';
8
+ }
9
+ if (!_.isDependenciesJson({ 'a': 'b' })) {
10
+ throw 'error';
11
+ }
12
+ if (_.isDependenciesJson({ 'a': 12 })) {
13
+ throw 'error';
14
+ }
15
+ };
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @typedef {{
3
+ * readonly name: string
4
+ * readonly version: string
5
+ * readonly dependencies?: dependencies.DependenciesJson
6
+ * }} PackageJson
7
+ */
8
+ /** @type {(j: json.Unknown) => j is PackageJson} */
9
+ export const isPackageJson: (j: json.Unknown) => j is PackageJson;
10
+ export type PackageJson = {
11
+ readonly name: string;
12
+ readonly version: string;
13
+ readonly dependencies?: dependencies.DependenciesJson;
14
+ };
15
+ export type Package = {
16
+ readonly dependency: (localPackageId: string) => string | null;
17
+ readonly file: (localFileId: string) => string | null;
18
+ };
19
+ export type Get = (packageId: string) => Package | null;
20
+ import * as json from '../../json/module.f.mjs';
21
+ import * as dependencies from './dependencies/module.f.mjs';
@@ -0,0 +1,40 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ import * as json from '../../json/module.f.mjs';
3
+ const { isObject } = json;
4
+ import * as dependencies from './dependencies/module.f.mjs';
5
+ const { isDependenciesJson } = dependencies;
6
+ import * as o from '../../types/object/module.f.mjs';
7
+ const { at } = o;
8
+ /**
9
+ * @typedef {{
10
+ * readonly name: string
11
+ * readonly version: string
12
+ * readonly dependencies?: dependencies.DependenciesJson
13
+ * }} PackageJson
14
+ */
15
+ /** @type {(j: json.Unknown) => j is PackageJson} */
16
+ export const isPackageJson = j => {
17
+ if (!isObject(j)) {
18
+ return false;
19
+ }
20
+ if (typeof j.name !== 'string') {
21
+ return false;
22
+ }
23
+ if (typeof j.version !== 'string') {
24
+ return false;
25
+ }
26
+ if (!isDependenciesJson(at('dependencies')(j))) {
27
+ return false;
28
+ }
29
+ return true;
30
+ };
31
+ /**
32
+ * @typedef {{
33
+ * readonly dependency: (localPackageId: string) => string | null
34
+ * readonly file: (localFileId: string) => string | null
35
+ * }} Package
36
+ */
37
+ /**
38
+ * @note Current package has an empty string '' as a packageId.
39
+ * @typedef {(packageId: string) => Package | null} Get
40
+ */
@@ -0,0 +1,27 @@
1
+ import * as _ from './module.f.mjs';
2
+ export default () => {
3
+ if (_.isPackageJson(null)) {
4
+ throw 'error';
5
+ }
6
+ if (_.isPackageJson({})) {
7
+ throw 'error';
8
+ }
9
+ if (_.isPackageJson({ name: 'x', version: 12 })) {
10
+ throw 'error';
11
+ }
12
+ if (!_.isPackageJson({ name: 'x', version: "12" })) {
13
+ throw 'error';
14
+ }
15
+ if (_.isPackageJson({ version: "", dependencies: [] })) {
16
+ throw 'error';
17
+ }
18
+ if (!_.isPackageJson({ name: 'a', version: "", dependencies: {} })) {
19
+ throw 'error';
20
+ }
21
+ if (_.isPackageJson({ name: 'b', version: "", dependencies: { x: 12 } })) {
22
+ throw 'error';
23
+ }
24
+ if (!_.isPackageJson({ name: 'c', version: "", dependencies: { x: "12" } })) {
25
+ throw 'error';
26
+ }
27
+ };