@tellahq/rescript 10.1.0-alpha.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 (997) hide show
  1. package/CHANGELOG.md +1717 -0
  2. package/COPYING +674 -0
  3. package/COPYING.LESSER +165 -0
  4. package/CREDITS.md +59 -0
  5. package/LICENSE +24 -0
  6. package/README.md +114 -0
  7. package/bsc +22 -0
  8. package/bsrefmt +16 -0
  9. package/darwin/bsb_helper.exe +0 -0
  10. package/darwin/bsc.exe +0 -0
  11. package/darwin/ninja.COPYING +202 -0
  12. package/darwin/ninja.exe +0 -0
  13. package/darwin/refmt.exe +0 -0
  14. package/darwin/rescript.exe +0 -0
  15. package/darwinarm64/bsb_helper.exe +0 -0
  16. package/darwinarm64/bsc.exe +0 -0
  17. package/darwinarm64/ninja.COPYING +202 -0
  18. package/darwinarm64/ninja.exe +0 -0
  19. package/darwinarm64/refmt.exe +0 -0
  20. package/darwinarm64/rescript.exe +0 -0
  21. package/docs/docson/build-schema.json +557 -0
  22. package/freebsd/ninja.COPYING +202 -0
  23. package/jscomp/stubs/ext_basic_hash_stubs.c +216 -0
  24. package/lib/4.06.1/bsb_helper.ml +2436 -0
  25. package/lib/4.06.1/bsb_helper.mli +0 -0
  26. package/lib/4.06.1/refmt_main3.ml +115517 -0
  27. package/lib/4.06.1/refmt_main3.mli +1 -0
  28. package/lib/4.06.1/rescript.ml +15500 -0
  29. package/lib/4.06.1/rescript.mli +0 -0
  30. package/lib/4.06.1/whole_compiler.ml +306395 -0
  31. package/lib/4.06.1/whole_compiler.mli +0 -0
  32. package/lib/bstracing +270 -0
  33. package/lib/es6/arg.js +717 -0
  34. package/lib/es6/array.js +511 -0
  35. package/lib/es6/arrayLabels.js +511 -0
  36. package/lib/es6/belt.js +57 -0
  37. package/lib/es6/belt_Array.js +764 -0
  38. package/lib/es6/belt_Float.js +16 -0
  39. package/lib/es6/belt_HashMap.js +280 -0
  40. package/lib/es6/belt_HashMapInt.js +264 -0
  41. package/lib/es6/belt_HashMapString.js +264 -0
  42. package/lib/es6/belt_HashSet.js +222 -0
  43. package/lib/es6/belt_HashSetInt.js +207 -0
  44. package/lib/es6/belt_HashSetString.js +207 -0
  45. package/lib/es6/belt_Id.js +71 -0
  46. package/lib/es6/belt_Int.js +16 -0
  47. package/lib/es6/belt_List.js +1512 -0
  48. package/lib/es6/belt_Map.js +376 -0
  49. package/lib/es6/belt_MapDict.js +417 -0
  50. package/lib/es6/belt_MapInt.js +307 -0
  51. package/lib/es6/belt_MapString.js +307 -0
  52. package/lib/es6/belt_MutableMap.js +395 -0
  53. package/lib/es6/belt_MutableMapInt.js +362 -0
  54. package/lib/es6/belt_MutableMapString.js +362 -0
  55. package/lib/es6/belt_MutableQueue.js +299 -0
  56. package/lib/es6/belt_MutableSet.js +538 -0
  57. package/lib/es6/belt_MutableSetInt.js +501 -0
  58. package/lib/es6/belt_MutableSetString.js +501 -0
  59. package/lib/es6/belt_MutableStack.js +137 -0
  60. package/lib/es6/belt_Option.js +151 -0
  61. package/lib/es6/belt_Range.js +109 -0
  62. package/lib/es6/belt_Result.js +136 -0
  63. package/lib/es6/belt_Set.js +314 -0
  64. package/lib/es6/belt_SetDict.js +362 -0
  65. package/lib/es6/belt_SetInt.js +359 -0
  66. package/lib/es6/belt_SetString.js +359 -0
  67. package/lib/es6/belt_SortArray.js +427 -0
  68. package/lib/es6/belt_SortArrayInt.js +374 -0
  69. package/lib/es6/belt_SortArrayString.js +374 -0
  70. package/lib/es6/belt_internalAVLset.js +940 -0
  71. package/lib/es6/belt_internalAVLtree.js +1146 -0
  72. package/lib/es6/belt_internalBuckets.js +287 -0
  73. package/lib/es6/belt_internalBucketsType.js +49 -0
  74. package/lib/es6/belt_internalMapInt.js +365 -0
  75. package/lib/es6/belt_internalMapString.js +365 -0
  76. package/lib/es6/belt_internalSetBuckets.js +191 -0
  77. package/lib/es6/belt_internalSetInt.js +209 -0
  78. package/lib/es6/belt_internalSetString.js +209 -0
  79. package/lib/es6/buffer.js +477 -0
  80. package/lib/es6/bytes.js +704 -0
  81. package/lib/es6/bytesLabels.js +704 -0
  82. package/lib/es6/callback.js +16 -0
  83. package/lib/es6/caml.js +196 -0
  84. package/lib/es6/caml_array.js +122 -0
  85. package/lib/es6/caml_array_extern.js +1 -0
  86. package/lib/es6/caml_bytes.js +122 -0
  87. package/lib/es6/caml_exceptions.js +31 -0
  88. package/lib/es6/caml_external_polyfill.js +32 -0
  89. package/lib/es6/caml_float.js +129 -0
  90. package/lib/es6/caml_float_extern.js +1 -0
  91. package/lib/es6/caml_format.js +818 -0
  92. package/lib/es6/caml_hash.js +101 -0
  93. package/lib/es6/caml_hash_primitive.js +51 -0
  94. package/lib/es6/caml_int32.js +28 -0
  95. package/lib/es6/caml_int64.js +606 -0
  96. package/lib/es6/caml_int64_extern.js +1 -0
  97. package/lib/es6/caml_js_exceptions.js +31 -0
  98. package/lib/es6/caml_lexer.js +258 -0
  99. package/lib/es6/caml_md5.js +168 -0
  100. package/lib/es6/caml_module.js +117 -0
  101. package/lib/es6/caml_nativeint_extern.js +1 -0
  102. package/lib/es6/caml_obj.js +413 -0
  103. package/lib/es6/caml_option.js +86 -0
  104. package/lib/es6/caml_parser.js +303 -0
  105. package/lib/es6/caml_splice_call.js +52 -0
  106. package/lib/es6/caml_string.js +23 -0
  107. package/lib/es6/caml_string_extern.js +1 -0
  108. package/lib/es6/caml_sys.js +99 -0
  109. package/lib/es6/caml_undefined_extern.js +1 -0
  110. package/lib/es6/camlinternalLazy.js +59 -0
  111. package/lib/es6/camlinternalMod.js +1 -0
  112. package/lib/es6/char.js +126 -0
  113. package/lib/es6/complex.js +176 -0
  114. package/lib/es6/curry.js +526 -0
  115. package/lib/es6/digest.js +118 -0
  116. package/lib/es6/dom.js +12 -0
  117. package/lib/es6/dom_storage.js +27 -0
  118. package/lib/es6/dom_storage2.js +1 -0
  119. package/lib/es6/filename.js +496 -0
  120. package/lib/es6/genlex.js +666 -0
  121. package/lib/es6/hashtbl.js +1115 -0
  122. package/lib/es6/hashtblLabels.js +170 -0
  123. package/lib/es6/int32.js +75 -0
  124. package/lib/es6/int64.js +70 -0
  125. package/lib/es6/js.js +111 -0
  126. package/lib/es6/js_OO.js +15 -0
  127. package/lib/es6/js_array.js +223 -0
  128. package/lib/es6/js_array2.js +1 -0
  129. package/lib/es6/js_bigint.js +1 -0
  130. package/lib/es6/js_cast.js +1 -0
  131. package/lib/es6/js_console.js +1 -0
  132. package/lib/es6/js_date.js +1 -0
  133. package/lib/es6/js_dict.js +85 -0
  134. package/lib/es6/js_exn.js +44 -0
  135. package/lib/es6/js_float.js +1 -0
  136. package/lib/es6/js_global.js +1 -0
  137. package/lib/es6/js_int.js +17 -0
  138. package/lib/es6/js_json.js +172 -0
  139. package/lib/es6/js_list.js +333 -0
  140. package/lib/es6/js_map.js +1 -0
  141. package/lib/es6/js_mapperRt.js +54 -0
  142. package/lib/es6/js_math.js +50 -0
  143. package/lib/es6/js_null.js +49 -0
  144. package/lib/es6/js_null_undefined.js +35 -0
  145. package/lib/es6/js_obj.js +1 -0
  146. package/lib/es6/js_option.js +104 -0
  147. package/lib/es6/js_promise.js +17 -0
  148. package/lib/es6/js_re.js +1 -0
  149. package/lib/es6/js_result.js +1 -0
  150. package/lib/es6/js_set.js +1 -0
  151. package/lib/es6/js_string.js +199 -0
  152. package/lib/es6/js_string2.js +1 -0
  153. package/lib/es6/js_typed_array.js +1733 -0
  154. package/lib/es6/js_typed_array2.js +39 -0
  155. package/lib/es6/js_types.js +77 -0
  156. package/lib/es6/js_undefined.js +52 -0
  157. package/lib/es6/js_vector.js +134 -0
  158. package/lib/es6/js_weakmap.js +1 -0
  159. package/lib/es6/js_weakset.js +1 -0
  160. package/lib/es6/jsx.js +1 -0
  161. package/lib/es6/jsxDOM.js +1 -0
  162. package/lib/es6/jsxDOMStyle.js +1 -0
  163. package/lib/es6/jsxEvent.js +59 -0
  164. package/lib/es6/lazy.js +44 -0
  165. package/lib/es6/lexing.js +217 -0
  166. package/lib/es6/list.js +1713 -0
  167. package/lib/es6/listLabels.js +1713 -0
  168. package/lib/es6/map.js +936 -0
  169. package/lib/es6/mapLabels.js +951 -0
  170. package/lib/es6/moreLabels.js +1931 -0
  171. package/lib/es6/node.js +39 -0
  172. package/lib/es6/node_buffer.js +1 -0
  173. package/lib/es6/node_child_process.js +1 -0
  174. package/lib/es6/node_fs.js +9 -0
  175. package/lib/es6/node_module.js +1 -0
  176. package/lib/es6/node_path.js +1 -0
  177. package/lib/es6/node_process.js +18 -0
  178. package/lib/es6/obj.js +11 -0
  179. package/lib/es6/package.json +1 -0
  180. package/lib/es6/parsing.js +237 -0
  181. package/lib/es6/pervasives.js +250 -0
  182. package/lib/es6/printexc.js +102 -0
  183. package/lib/es6/queue.js +181 -0
  184. package/lib/es6/random.js +280 -0
  185. package/lib/es6/set.js +955 -0
  186. package/lib/es6/setLabels.js +988 -0
  187. package/lib/es6/sort.js +168 -0
  188. package/lib/es6/stack.js +88 -0
  189. package/lib/es6/stdLabels.js +18 -0
  190. package/lib/es6/stream.js +496 -0
  191. package/lib/es6/string.js +337 -0
  192. package/lib/es6/stringLabels.js +337 -0
  193. package/lib/es6/sys.js +182 -0
  194. package/lib/es6/uchar.js +133 -0
  195. package/lib/js/arg.js +715 -0
  196. package/lib/js/array.js +509 -0
  197. package/lib/js/arrayLabels.js +509 -0
  198. package/lib/js/belt.js +55 -0
  199. package/lib/js/belt_Array.js +762 -0
  200. package/lib/js/belt_Float.js +14 -0
  201. package/lib/js/belt_HashMap.js +278 -0
  202. package/lib/js/belt_HashMapInt.js +262 -0
  203. package/lib/js/belt_HashMapString.js +262 -0
  204. package/lib/js/belt_HashSet.js +220 -0
  205. package/lib/js/belt_HashSetInt.js +205 -0
  206. package/lib/js/belt_HashSetString.js +205 -0
  207. package/lib/js/belt_Id.js +69 -0
  208. package/lib/js/belt_Int.js +14 -0
  209. package/lib/js/belt_List.js +1510 -0
  210. package/lib/js/belt_Map.js +374 -0
  211. package/lib/js/belt_MapDict.js +415 -0
  212. package/lib/js/belt_MapInt.js +305 -0
  213. package/lib/js/belt_MapString.js +305 -0
  214. package/lib/js/belt_MutableMap.js +393 -0
  215. package/lib/js/belt_MutableMapInt.js +360 -0
  216. package/lib/js/belt_MutableMapString.js +360 -0
  217. package/lib/js/belt_MutableQueue.js +297 -0
  218. package/lib/js/belt_MutableSet.js +536 -0
  219. package/lib/js/belt_MutableSetInt.js +499 -0
  220. package/lib/js/belt_MutableSetString.js +499 -0
  221. package/lib/js/belt_MutableStack.js +135 -0
  222. package/lib/js/belt_Option.js +149 -0
  223. package/lib/js/belt_Range.js +107 -0
  224. package/lib/js/belt_Result.js +134 -0
  225. package/lib/js/belt_Set.js +312 -0
  226. package/lib/js/belt_SetDict.js +360 -0
  227. package/lib/js/belt_SetInt.js +357 -0
  228. package/lib/js/belt_SetString.js +357 -0
  229. package/lib/js/belt_SortArray.js +425 -0
  230. package/lib/js/belt_SortArrayInt.js +372 -0
  231. package/lib/js/belt_SortArrayString.js +372 -0
  232. package/lib/js/belt_internalAVLset.js +938 -0
  233. package/lib/js/belt_internalAVLtree.js +1144 -0
  234. package/lib/js/belt_internalBuckets.js +285 -0
  235. package/lib/js/belt_internalBucketsType.js +47 -0
  236. package/lib/js/belt_internalMapInt.js +363 -0
  237. package/lib/js/belt_internalMapString.js +363 -0
  238. package/lib/js/belt_internalSetBuckets.js +189 -0
  239. package/lib/js/belt_internalSetInt.js +207 -0
  240. package/lib/js/belt_internalSetString.js +207 -0
  241. package/lib/js/buffer.js +475 -0
  242. package/lib/js/bytes.js +702 -0
  243. package/lib/js/bytesLabels.js +702 -0
  244. package/lib/js/callback.js +14 -0
  245. package/lib/js/caml.js +194 -0
  246. package/lib/js/caml_array.js +120 -0
  247. package/lib/js/caml_array_extern.js +1 -0
  248. package/lib/js/caml_bytes.js +120 -0
  249. package/lib/js/caml_exceptions.js +29 -0
  250. package/lib/js/caml_external_polyfill.js +30 -0
  251. package/lib/js/caml_float.js +127 -0
  252. package/lib/js/caml_float_extern.js +1 -0
  253. package/lib/js/caml_format.js +816 -0
  254. package/lib/js/caml_hash.js +99 -0
  255. package/lib/js/caml_hash_primitive.js +49 -0
  256. package/lib/js/caml_int32.js +26 -0
  257. package/lib/js/caml_int64.js +604 -0
  258. package/lib/js/caml_int64_extern.js +1 -0
  259. package/lib/js/caml_js_exceptions.js +29 -0
  260. package/lib/js/caml_lexer.js +256 -0
  261. package/lib/js/caml_md5.js +166 -0
  262. package/lib/js/caml_module.js +115 -0
  263. package/lib/js/caml_nativeint_extern.js +1 -0
  264. package/lib/js/caml_obj.js +411 -0
  265. package/lib/js/caml_option.js +84 -0
  266. package/lib/js/caml_parser.js +301 -0
  267. package/lib/js/caml_splice_call.js +50 -0
  268. package/lib/js/caml_string.js +21 -0
  269. package/lib/js/caml_string_extern.js +1 -0
  270. package/lib/js/caml_sys.js +97 -0
  271. package/lib/js/caml_undefined_extern.js +1 -0
  272. package/lib/js/camlinternalLazy.js +57 -0
  273. package/lib/js/camlinternalMod.js +1 -0
  274. package/lib/js/char.js +124 -0
  275. package/lib/js/complex.js +174 -0
  276. package/lib/js/curry.js +524 -0
  277. package/lib/js/digest.js +116 -0
  278. package/lib/js/dom.js +10 -0
  279. package/lib/js/dom_storage.js +25 -0
  280. package/lib/js/dom_storage2.js +1 -0
  281. package/lib/js/filename.js +494 -0
  282. package/lib/js/genlex.js +664 -0
  283. package/lib/js/hashtbl.js +1113 -0
  284. package/lib/js/hashtblLabels.js +168 -0
  285. package/lib/js/int32.js +73 -0
  286. package/lib/js/int64.js +68 -0
  287. package/lib/js/js.js +109 -0
  288. package/lib/js/js_OO.js +13 -0
  289. package/lib/js/js_array.js +221 -0
  290. package/lib/js/js_array2.js +1 -0
  291. package/lib/js/js_bigint.js +1 -0
  292. package/lib/js/js_cast.js +1 -0
  293. package/lib/js/js_console.js +1 -0
  294. package/lib/js/js_date.js +1 -0
  295. package/lib/js/js_dict.js +83 -0
  296. package/lib/js/js_exn.js +42 -0
  297. package/lib/js/js_float.js +1 -0
  298. package/lib/js/js_global.js +1 -0
  299. package/lib/js/js_int.js +15 -0
  300. package/lib/js/js_json.js +170 -0
  301. package/lib/js/js_list.js +331 -0
  302. package/lib/js/js_map.js +1 -0
  303. package/lib/js/js_mapperRt.js +52 -0
  304. package/lib/js/js_math.js +48 -0
  305. package/lib/js/js_null.js +47 -0
  306. package/lib/js/js_null_undefined.js +33 -0
  307. package/lib/js/js_obj.js +1 -0
  308. package/lib/js/js_option.js +103 -0
  309. package/lib/js/js_promise.js +15 -0
  310. package/lib/js/js_re.js +1 -0
  311. package/lib/js/js_result.js +1 -0
  312. package/lib/js/js_set.js +1 -0
  313. package/lib/js/js_string.js +197 -0
  314. package/lib/js/js_string2.js +1 -0
  315. package/lib/js/js_typed_array.js +1731 -0
  316. package/lib/js/js_typed_array2.js +37 -0
  317. package/lib/js/js_types.js +75 -0
  318. package/lib/js/js_undefined.js +50 -0
  319. package/lib/js/js_vector.js +132 -0
  320. package/lib/js/js_weakmap.js +1 -0
  321. package/lib/js/js_weakset.js +1 -0
  322. package/lib/js/jsx.js +1 -0
  323. package/lib/js/jsxDOM.js +1 -0
  324. package/lib/js/jsxDOMStyle.js +1 -0
  325. package/lib/js/jsxEvent.js +57 -0
  326. package/lib/js/lazy.js +42 -0
  327. package/lib/js/lexing.js +215 -0
  328. package/lib/js/list.js +1711 -0
  329. package/lib/js/listLabels.js +1711 -0
  330. package/lib/js/map.js +934 -0
  331. package/lib/js/mapLabels.js +949 -0
  332. package/lib/js/moreLabels.js +1929 -0
  333. package/lib/js/node.js +37 -0
  334. package/lib/js/node_buffer.js +1 -0
  335. package/lib/js/node_child_process.js +1 -0
  336. package/lib/js/node_fs.js +7 -0
  337. package/lib/js/node_module.js +1 -0
  338. package/lib/js/node_path.js +1 -0
  339. package/lib/js/node_process.js +16 -0
  340. package/lib/js/obj.js +9 -0
  341. package/lib/js/parsing.js +235 -0
  342. package/lib/js/pervasives.js +248 -0
  343. package/lib/js/printexc.js +100 -0
  344. package/lib/js/queue.js +179 -0
  345. package/lib/js/random.js +278 -0
  346. package/lib/js/set.js +953 -0
  347. package/lib/js/setLabels.js +986 -0
  348. package/lib/js/sort.js +166 -0
  349. package/lib/js/stack.js +86 -0
  350. package/lib/js/stdLabels.js +16 -0
  351. package/lib/js/stream.js +494 -0
  352. package/lib/js/string.js +335 -0
  353. package/lib/js/stringLabels.js +335 -0
  354. package/lib/js/sys.js +180 -0
  355. package/lib/js/uchar.js +131 -0
  356. package/lib/minisocket.js +93 -0
  357. package/lib/ocaml/arg.cmi +0 -0
  358. package/lib/ocaml/arg.cmt +0 -0
  359. package/lib/ocaml/arg.cmti +0 -0
  360. package/lib/ocaml/arg.ml +359 -0
  361. package/lib/ocaml/arg.mli +185 -0
  362. package/lib/ocaml/array.cmi +0 -0
  363. package/lib/ocaml/array.cmt +0 -0
  364. package/lib/ocaml/array.cmti +0 -0
  365. package/lib/ocaml/array.ml +307 -0
  366. package/lib/ocaml/array.mli +275 -0
  367. package/lib/ocaml/arrayLabels.cmi +0 -0
  368. package/lib/ocaml/arrayLabels.cmt +0 -0
  369. package/lib/ocaml/arrayLabels.cmti +0 -0
  370. package/lib/ocaml/arrayLabels.ml +307 -0
  371. package/lib/ocaml/arrayLabels.mli +276 -0
  372. package/lib/ocaml/belt.cmi +0 -0
  373. package/lib/ocaml/belt.cmt +0 -0
  374. package/lib/ocaml/belt.ml +352 -0
  375. package/lib/ocaml/belt_Array.cmi +0 -0
  376. package/lib/ocaml/belt_Array.cmt +0 -0
  377. package/lib/ocaml/belt_Array.cmti +0 -0
  378. package/lib/ocaml/belt_Array.ml +525 -0
  379. package/lib/ocaml/belt_Array.mli +707 -0
  380. package/lib/ocaml/belt_Float.cmi +0 -0
  381. package/lib/ocaml/belt_Float.cmt +0 -0
  382. package/lib/ocaml/belt_Float.cmti +0 -0
  383. package/lib/ocaml/belt_Float.ml +50 -0
  384. package/lib/ocaml/belt_Float.mli +106 -0
  385. package/lib/ocaml/belt_HashMap.cmi +0 -0
  386. package/lib/ocaml/belt_HashMap.cmt +0 -0
  387. package/lib/ocaml/belt_HashMap.cmti +0 -0
  388. package/lib/ocaml/belt_HashMap.ml +226 -0
  389. package/lib/ocaml/belt_HashMap.mli +436 -0
  390. package/lib/ocaml/belt_HashMapInt.cmi +0 -0
  391. package/lib/ocaml/belt_HashMapInt.cmt +0 -0
  392. package/lib/ocaml/belt_HashMapInt.cmti +0 -0
  393. package/lib/ocaml/belt_HashMapInt.ml +206 -0
  394. package/lib/ocaml/belt_HashMapInt.mli +50 -0
  395. package/lib/ocaml/belt_HashMapString.cmi +0 -0
  396. package/lib/ocaml/belt_HashMapString.cmt +0 -0
  397. package/lib/ocaml/belt_HashMapString.cmti +0 -0
  398. package/lib/ocaml/belt_HashMapString.ml +206 -0
  399. package/lib/ocaml/belt_HashMapString.mli +50 -0
  400. package/lib/ocaml/belt_HashSet.cmi +0 -0
  401. package/lib/ocaml/belt_HashSet.cmt +0 -0
  402. package/lib/ocaml/belt_HashSet.cmti +0 -0
  403. package/lib/ocaml/belt_HashSet.ml +196 -0
  404. package/lib/ocaml/belt_HashSet.mli +125 -0
  405. package/lib/ocaml/belt_HashSetInt.cmi +0 -0
  406. package/lib/ocaml/belt_HashSetInt.cmt +0 -0
  407. package/lib/ocaml/belt_HashSetInt.cmti +0 -0
  408. package/lib/ocaml/belt_HashSetInt.ml +155 -0
  409. package/lib/ocaml/belt_HashSetInt.mli +74 -0
  410. package/lib/ocaml/belt_HashSetString.cmi +0 -0
  411. package/lib/ocaml/belt_HashSetString.cmt +0 -0
  412. package/lib/ocaml/belt_HashSetString.cmti +0 -0
  413. package/lib/ocaml/belt_HashSetString.ml +156 -0
  414. package/lib/ocaml/belt_HashSetString.mli +74 -0
  415. package/lib/ocaml/belt_Id.cmi +0 -0
  416. package/lib/ocaml/belt_Id.cmt +0 -0
  417. package/lib/ocaml/belt_Id.cmti +0 -0
  418. package/lib/ocaml/belt_Id.ml +133 -0
  419. package/lib/ocaml/belt_Id.mli +171 -0
  420. package/lib/ocaml/belt_Int.cmi +0 -0
  421. package/lib/ocaml/belt_Int.cmt +0 -0
  422. package/lib/ocaml/belt_Int.cmti +0 -0
  423. package/lib/ocaml/belt_Int.ml +50 -0
  424. package/lib/ocaml/belt_Int.mli +103 -0
  425. package/lib/ocaml/belt_List.cmi +0 -0
  426. package/lib/ocaml/belt_List.cmt +0 -0
  427. package/lib/ocaml/belt_List.cmti +0 -0
  428. package/lib/ocaml/belt_List.ml +803 -0
  429. package/lib/ocaml/belt_List.mli +844 -0
  430. package/lib/ocaml/belt_Map.cmi +0 -0
  431. package/lib/ocaml/belt_Map.cmt +0 -0
  432. package/lib/ocaml/belt_Map.cmti +0 -0
  433. package/lib/ocaml/belt_Map.ml +170 -0
  434. package/lib/ocaml/belt_Map.mli +496 -0
  435. package/lib/ocaml/belt_MapDict.cmi +0 -0
  436. package/lib/ocaml/belt_MapDict.cmt +0 -0
  437. package/lib/ocaml/belt_MapDict.cmti +0 -0
  438. package/lib/ocaml/belt_MapDict.ml +278 -0
  439. package/lib/ocaml/belt_MapDict.mli +268 -0
  440. package/lib/ocaml/belt_MapInt.cmi +0 -0
  441. package/lib/ocaml/belt_MapInt.cmt +0 -0
  442. package/lib/ocaml/belt_MapInt.cmti +0 -0
  443. package/lib/ocaml/belt_MapInt.ml +169 -0
  444. package/lib/ocaml/belt_MapInt.mli +187 -0
  445. package/lib/ocaml/belt_MapString.cmi +0 -0
  446. package/lib/ocaml/belt_MapString.cmt +0 -0
  447. package/lib/ocaml/belt_MapString.cmti +0 -0
  448. package/lib/ocaml/belt_MapString.ml +169 -0
  449. package/lib/ocaml/belt_MapString.mli +187 -0
  450. package/lib/ocaml/belt_MutableMap.cmi +0 -0
  451. package/lib/ocaml/belt_MutableMap.cmt +0 -0
  452. package/lib/ocaml/belt_MutableMap.cmti +0 -0
  453. package/lib/ocaml/belt_MutableMap.ml +241 -0
  454. package/lib/ocaml/belt_MutableMap.mli +145 -0
  455. package/lib/ocaml/belt_MutableMapInt.cmi +0 -0
  456. package/lib/ocaml/belt_MutableMapInt.cmt +0 -0
  457. package/lib/ocaml/belt_MutableMapInt.cmti +0 -0
  458. package/lib/ocaml/belt_MutableMapInt.ml +172 -0
  459. package/lib/ocaml/belt_MutableMapInt.mli +135 -0
  460. package/lib/ocaml/belt_MutableMapString.cmi +0 -0
  461. package/lib/ocaml/belt_MutableMapString.cmt +0 -0
  462. package/lib/ocaml/belt_MutableMapString.cmti +0 -0
  463. package/lib/ocaml/belt_MutableMapString.ml +172 -0
  464. package/lib/ocaml/belt_MutableMapString.mli +135 -0
  465. package/lib/ocaml/belt_MutableQueue.cmi +0 -0
  466. package/lib/ocaml/belt_MutableQueue.cmt +0 -0
  467. package/lib/ocaml/belt_MutableQueue.cmti +0 -0
  468. package/lib/ocaml/belt_MutableQueue.ml +222 -0
  469. package/lib/ocaml/belt_MutableQueue.mli +116 -0
  470. package/lib/ocaml/belt_MutableSet.cmi +0 -0
  471. package/lib/ocaml/belt_MutableSet.cmt +0 -0
  472. package/lib/ocaml/belt_MutableSet.cmti +0 -0
  473. package/lib/ocaml/belt_MutableSet.ml +371 -0
  474. package/lib/ocaml/belt_MutableSet.mli +617 -0
  475. package/lib/ocaml/belt_MutableSetInt.cmi +0 -0
  476. package/lib/ocaml/belt_MutableSetInt.cmt +0 -0
  477. package/lib/ocaml/belt_MutableSetInt.cmti +0 -0
  478. package/lib/ocaml/belt_MutableSetInt.ml +342 -0
  479. package/lib/ocaml/belt_MutableSetInt.mli +124 -0
  480. package/lib/ocaml/belt_MutableSetString.cmi +0 -0
  481. package/lib/ocaml/belt_MutableSetString.cmt +0 -0
  482. package/lib/ocaml/belt_MutableSetString.cmti +0 -0
  483. package/lib/ocaml/belt_MutableSetString.ml +342 -0
  484. package/lib/ocaml/belt_MutableSetString.mli +124 -0
  485. package/lib/ocaml/belt_MutableStack.cmi +0 -0
  486. package/lib/ocaml/belt_MutableStack.cmt +0 -0
  487. package/lib/ocaml/belt_MutableStack.cmti +0 -0
  488. package/lib/ocaml/belt_MutableStack.ml +106 -0
  489. package/lib/ocaml/belt_MutableStack.mli +63 -0
  490. package/lib/ocaml/belt_Option.cmi +0 -0
  491. package/lib/ocaml/belt_Option.cmt +0 -0
  492. package/lib/ocaml/belt_Option.cmti +0 -0
  493. package/lib/ocaml/belt_Option.ml +93 -0
  494. package/lib/ocaml/belt_Option.mli +270 -0
  495. package/lib/ocaml/belt_Range.cmi +0 -0
  496. package/lib/ocaml/belt_Range.cmt +0 -0
  497. package/lib/ocaml/belt_Range.cmti +0 -0
  498. package/lib/ocaml/belt_Range.ml +76 -0
  499. package/lib/ocaml/belt_Range.mli +114 -0
  500. package/lib/ocaml/belt_Result.cmi +0 -0
  501. package/lib/ocaml/belt_Result.cmt +0 -0
  502. package/lib/ocaml/belt_Result.cmti +0 -0
  503. package/lib/ocaml/belt_Result.ml +75 -0
  504. package/lib/ocaml/belt_Result.mli +205 -0
  505. package/lib/ocaml/belt_Set.cmi +0 -0
  506. package/lib/ocaml/belt_Set.cmt +0 -0
  507. package/lib/ocaml/belt_Set.cmti +0 -0
  508. package/lib/ocaml/belt_Set.cppo.ml +205 -0
  509. package/lib/ocaml/belt_Set.cppo.mli +153 -0
  510. package/lib/ocaml/belt_Set.ml +164 -0
  511. package/lib/ocaml/belt_Set.mli +523 -0
  512. package/lib/ocaml/belt_SetDict.cmi +0 -0
  513. package/lib/ocaml/belt_SetDict.cmt +0 -0
  514. package/lib/ocaml/belt_SetDict.cmti +0 -0
  515. package/lib/ocaml/belt_SetDict.ml +237 -0
  516. package/lib/ocaml/belt_SetDict.mli +567 -0
  517. package/lib/ocaml/belt_SetInt.cmi +0 -0
  518. package/lib/ocaml/belt_SetInt.cmt +0 -0
  519. package/lib/ocaml/belt_SetInt.cmti +0 -0
  520. package/lib/ocaml/belt_SetInt.ml +201 -0
  521. package/lib/ocaml/belt_SetInt.mli +151 -0
  522. package/lib/ocaml/belt_SetString.cmi +0 -0
  523. package/lib/ocaml/belt_SetString.cmt +0 -0
  524. package/lib/ocaml/belt_SetString.cmti +0 -0
  525. package/lib/ocaml/belt_SetString.ml +201 -0
  526. package/lib/ocaml/belt_SetString.mli +151 -0
  527. package/lib/ocaml/belt_SortArray.cmi +0 -0
  528. package/lib/ocaml/belt_SortArray.cmt +0 -0
  529. package/lib/ocaml/belt_SortArray.cmti +0 -0
  530. package/lib/ocaml/belt_SortArray.ml +322 -0
  531. package/lib/ocaml/belt_SortArray.mli +146 -0
  532. package/lib/ocaml/belt_SortArrayInt.cmi +0 -0
  533. package/lib/ocaml/belt_SortArrayInt.cmt +0 -0
  534. package/lib/ocaml/belt_SortArrayInt.cmti +0 -0
  535. package/lib/ocaml/belt_SortArrayInt.ml +263 -0
  536. package/lib/ocaml/belt_SortArrayInt.mli +93 -0
  537. package/lib/ocaml/belt_SortArrayString.cmi +0 -0
  538. package/lib/ocaml/belt_SortArrayString.cmt +0 -0
  539. package/lib/ocaml/belt_SortArrayString.cmti +0 -0
  540. package/lib/ocaml/belt_SortArrayString.ml +263 -0
  541. package/lib/ocaml/belt_SortArrayString.mli +93 -0
  542. package/lib/ocaml/belt_internalAVLset.cmt +0 -0
  543. package/lib/ocaml/belt_internalAVLset.cmti +0 -0
  544. package/lib/ocaml/belt_internalAVLset.ml +665 -0
  545. package/lib/ocaml/belt_internalAVLset.mli +124 -0
  546. package/lib/ocaml/belt_internalAVLtree.cmt +0 -0
  547. package/lib/ocaml/belt_internalAVLtree.cmti +0 -0
  548. package/lib/ocaml/belt_internalAVLtree.ml +762 -0
  549. package/lib/ocaml/belt_internalAVLtree.mli +215 -0
  550. package/lib/ocaml/belt_internalBuckets.cmt +0 -0
  551. package/lib/ocaml/belt_internalBuckets.cmti +0 -0
  552. package/lib/ocaml/belt_internalBuckets.ml +218 -0
  553. package/lib/ocaml/belt_internalBuckets.mli +57 -0
  554. package/lib/ocaml/belt_internalBucketsType.cmt +0 -0
  555. package/lib/ocaml/belt_internalBucketsType.cmti +0 -0
  556. package/lib/ocaml/belt_internalBucketsType.ml +59 -0
  557. package/lib/ocaml/belt_internalBucketsType.mli +46 -0
  558. package/lib/ocaml/belt_internalMapInt.cmt +0 -0
  559. package/lib/ocaml/belt_internalMapInt.ml +227 -0
  560. package/lib/ocaml/belt_internalMapString.cmt +0 -0
  561. package/lib/ocaml/belt_internalMapString.ml +227 -0
  562. package/lib/ocaml/belt_internalSetBuckets.cmt +0 -0
  563. package/lib/ocaml/belt_internalSetBuckets.cmti +0 -0
  564. package/lib/ocaml/belt_internalSetBuckets.ml +157 -0
  565. package/lib/ocaml/belt_internalSetBuckets.mli +47 -0
  566. package/lib/ocaml/belt_internalSetInt.cmt +0 -0
  567. package/lib/ocaml/belt_internalSetInt.ml +129 -0
  568. package/lib/ocaml/belt_internalSetString.cmt +0 -0
  569. package/lib/ocaml/belt_internalSetString.ml +129 -0
  570. package/lib/ocaml/belt_internals.cmti +0 -0
  571. package/lib/ocaml/belt_internals.mli +79 -0
  572. package/lib/ocaml/buffer.cmi +0 -0
  573. package/lib/ocaml/buffer.cmt +0 -0
  574. package/lib/ocaml/buffer.cmti +0 -0
  575. package/lib/ocaml/buffer.ml +250 -0
  576. package/lib/ocaml/buffer.mli +149 -0
  577. package/lib/ocaml/bytes.cmi +0 -0
  578. package/lib/ocaml/bytes.cmt +0 -0
  579. package/lib/ocaml/bytes.cmti +0 -0
  580. package/lib/ocaml/bytes.ml +431 -0
  581. package/lib/ocaml/bytes.mli +430 -0
  582. package/lib/ocaml/bytesLabels.cmi +0 -0
  583. package/lib/ocaml/bytesLabels.cmt +0 -0
  584. package/lib/ocaml/bytesLabels.cmti +0 -0
  585. package/lib/ocaml/bytesLabels.ml +428 -0
  586. package/lib/ocaml/bytesLabels.mli +276 -0
  587. package/lib/ocaml/callback.cmi +0 -0
  588. package/lib/ocaml/callback.cmt +0 -0
  589. package/lib/ocaml/callback.cmti +0 -0
  590. package/lib/ocaml/callback.ml +20 -0
  591. package/lib/ocaml/callback.mli +34 -0
  592. package/lib/ocaml/camlinternalLazy.cmi +0 -0
  593. package/lib/ocaml/camlinternalLazy.cmt +0 -0
  594. package/lib/ocaml/camlinternalLazy.cmti +0 -0
  595. package/lib/ocaml/camlinternalLazy.ml +89 -0
  596. package/lib/ocaml/camlinternalLazy.mli +27 -0
  597. package/lib/ocaml/camlinternalMod.cmi +0 -0
  598. package/lib/ocaml/camlinternalMod.cmt +0 -0
  599. package/lib/ocaml/camlinternalMod.cmti +0 -0
  600. package/lib/ocaml/camlinternalMod.ml +21 -0
  601. package/lib/ocaml/camlinternalMod.mli +25 -0
  602. package/lib/ocaml/char.cmi +0 -0
  603. package/lib/ocaml/char.cmt +0 -0
  604. package/lib/ocaml/char.cmti +0 -0
  605. package/lib/ocaml/char.ml +76 -0
  606. package/lib/ocaml/char.mli +72 -0
  607. package/lib/ocaml/complex.cmi +0 -0
  608. package/lib/ocaml/complex.cmt +0 -0
  609. package/lib/ocaml/complex.cmti +0 -0
  610. package/lib/ocaml/complex.ml +87 -0
  611. package/lib/ocaml/complex.mli +86 -0
  612. package/lib/ocaml/digest.cmi +0 -0
  613. package/lib/ocaml/digest.cmt +0 -0
  614. package/lib/ocaml/digest.cmti +0 -0
  615. package/lib/ocaml/digest.ml +66 -0
  616. package/lib/ocaml/digest.mli +68 -0
  617. package/lib/ocaml/dom.cmi +0 -0
  618. package/lib/ocaml/dom.cmt +0 -0
  619. package/lib/ocaml/dom.ml +296 -0
  620. package/lib/ocaml/dom_storage.cmi +0 -0
  621. package/lib/ocaml/dom_storage.cmt +0 -0
  622. package/lib/ocaml/dom_storage.ml +22 -0
  623. package/lib/ocaml/dom_storage2.cmi +0 -0
  624. package/lib/ocaml/dom_storage2.cmt +0 -0
  625. package/lib/ocaml/dom_storage2.ml +11 -0
  626. package/lib/ocaml/filename.cmi +0 -0
  627. package/lib/ocaml/filename.cmt +0 -0
  628. package/lib/ocaml/filename.cmti +0 -0
  629. package/lib/ocaml/filename.ml +233 -0
  630. package/lib/ocaml/filename.mli +134 -0
  631. package/lib/ocaml/genlex.cmi +0 -0
  632. package/lib/ocaml/genlex.cmt +0 -0
  633. package/lib/ocaml/genlex.cmti +0 -0
  634. package/lib/ocaml/genlex.ml +201 -0
  635. package/lib/ocaml/genlex.mli +73 -0
  636. package/lib/ocaml/hashmap.cppo.ml +214 -0
  637. package/lib/ocaml/hashmap.cppo.mli +54 -0
  638. package/lib/ocaml/hashset.cppo.ml +165 -0
  639. package/lib/ocaml/hashset.cppo.mli +77 -0
  640. package/lib/ocaml/hashtbl.cmi +0 -0
  641. package/lib/ocaml/hashtbl.cmt +0 -0
  642. package/lib/ocaml/hashtbl.cmti +0 -0
  643. package/lib/ocaml/hashtbl.ml +541 -0
  644. package/lib/ocaml/hashtbl.mli +411 -0
  645. package/lib/ocaml/hashtblLabels.cmi +0 -0
  646. package/lib/ocaml/hashtblLabels.cmt +0 -0
  647. package/lib/ocaml/hashtblLabels.ml +130 -0
  648. package/lib/ocaml/int32.cmi +0 -0
  649. package/lib/ocaml/int32.cmt +0 -0
  650. package/lib/ocaml/int32.cmti +0 -0
  651. package/lib/ocaml/int32.ml +64 -0
  652. package/lib/ocaml/int32.mli +186 -0
  653. package/lib/ocaml/int64.cmi +0 -0
  654. package/lib/ocaml/int64.cmt +0 -0
  655. package/lib/ocaml/int64.cmti +0 -0
  656. package/lib/ocaml/int64.ml +72 -0
  657. package/lib/ocaml/int64.mli +197 -0
  658. package/lib/ocaml/internal_map.cppo.ml +230 -0
  659. package/lib/ocaml/internal_set.cppo.ml +134 -0
  660. package/lib/ocaml/js.cmi +0 -0
  661. package/lib/ocaml/js.cmt +0 -0
  662. package/lib/ocaml/js.ml +313 -0
  663. package/lib/ocaml/js_OO.cmi +0 -0
  664. package/lib/ocaml/js_OO.cmt +0 -0
  665. package/lib/ocaml/js_OO.ml +180 -0
  666. package/lib/ocaml/js_array.cmi +0 -0
  667. package/lib/ocaml/js_array.cmt +0 -0
  668. package/lib/ocaml/js_array.ml +970 -0
  669. package/lib/ocaml/js_array2.cmi +0 -0
  670. package/lib/ocaml/js_array2.cmt +0 -0
  671. package/lib/ocaml/js_array2.ml +1065 -0
  672. package/lib/ocaml/js_bigint.cmi +0 -0
  673. package/lib/ocaml/js_bigint.cmt +0 -0
  674. package/lib/ocaml/js_bigint.ml +3 -0
  675. package/lib/ocaml/js_cast.cmi +0 -0
  676. package/lib/ocaml/js_cast.cmt +0 -0
  677. package/lib/ocaml/js_cast.cmti +0 -0
  678. package/lib/ocaml/js_cast.ml +29 -0
  679. package/lib/ocaml/js_cast.mli +45 -0
  680. package/lib/ocaml/js_console.cmi +0 -0
  681. package/lib/ocaml/js_console.cmt +0 -0
  682. package/lib/ocaml/js_console.ml +51 -0
  683. package/lib/ocaml/js_date.cmi +0 -0
  684. package/lib/ocaml/js_date.cmt +0 -0
  685. package/lib/ocaml/js_date.ml +1263 -0
  686. package/lib/ocaml/js_dict.cmi +0 -0
  687. package/lib/ocaml/js_dict.cmt +0 -0
  688. package/lib/ocaml/js_dict.cmti +0 -0
  689. package/lib/ocaml/js_dict.ml +114 -0
  690. package/lib/ocaml/js_dict.mli +152 -0
  691. package/lib/ocaml/js_exn.cmi +0 -0
  692. package/lib/ocaml/js_exn.cmt +0 -0
  693. package/lib/ocaml/js_exn.cmti +0 -0
  694. package/lib/ocaml/js_exn.ml +102 -0
  695. package/lib/ocaml/js_exn.mli +79 -0
  696. package/lib/ocaml/js_float.cmi +0 -0
  697. package/lib/ocaml/js_float.cmt +0 -0
  698. package/lib/ocaml/js_float.ml +294 -0
  699. package/lib/ocaml/js_global.cmi +0 -0
  700. package/lib/ocaml/js_global.cmt +0 -0
  701. package/lib/ocaml/js_global.ml +185 -0
  702. package/lib/ocaml/js_int.cmi +0 -0
  703. package/lib/ocaml/js_int.cmt +0 -0
  704. package/lib/ocaml/js_int.ml +158 -0
  705. package/lib/ocaml/js_json.cmi +0 -0
  706. package/lib/ocaml/js_json.cmt +0 -0
  707. package/lib/ocaml/js_json.cmti +0 -0
  708. package/lib/ocaml/js_json.ml +195 -0
  709. package/lib/ocaml/js_json.mli +244 -0
  710. package/lib/ocaml/js_list.cmi +0 -0
  711. package/lib/ocaml/js_list.cmt +0 -0
  712. package/lib/ocaml/js_list.cmti +0 -0
  713. package/lib/ocaml/js_list.ml +174 -0
  714. package/lib/ocaml/js_list.mli +72 -0
  715. package/lib/ocaml/js_map.cmi +0 -0
  716. package/lib/ocaml/js_map.cmt +0 -0
  717. package/lib/ocaml/js_map.ml +3 -0
  718. package/lib/ocaml/js_mapperRt.cmi +0 -0
  719. package/lib/ocaml/js_mapperRt.cmt +0 -0
  720. package/lib/ocaml/js_mapperRt.cmti +0 -0
  721. package/lib/ocaml/js_mapperRt.ml +50 -0
  722. package/lib/ocaml/js_mapperRt.mli +44 -0
  723. package/lib/ocaml/js_math.cmi +0 -0
  724. package/lib/ocaml/js_math.cmt +0 -0
  725. package/lib/ocaml/js_math.ml +626 -0
  726. package/lib/ocaml/js_null.cmi +0 -0
  727. package/lib/ocaml/js_null.cmt +0 -0
  728. package/lib/ocaml/js_null.cmti +0 -0
  729. package/lib/ocaml/js_null.ml +57 -0
  730. package/lib/ocaml/js_null.mli +87 -0
  731. package/lib/ocaml/js_null_undefined.cmi +0 -0
  732. package/lib/ocaml/js_null_undefined.cmt +0 -0
  733. package/lib/ocaml/js_null_undefined.cmti +0 -0
  734. package/lib/ocaml/js_null_undefined.ml +50 -0
  735. package/lib/ocaml/js_null_undefined.mli +85 -0
  736. package/lib/ocaml/js_obj.cmi +0 -0
  737. package/lib/ocaml/js_obj.cmt +0 -0
  738. package/lib/ocaml/js_obj.ml +100 -0
  739. package/lib/ocaml/js_option.cmi +0 -0
  740. package/lib/ocaml/js_option.cmt +0 -0
  741. package/lib/ocaml/js_option.cmti +0 -0
  742. package/lib/ocaml/js_option.ml +203 -0
  743. package/lib/ocaml/js_option.mli +52 -0
  744. package/lib/ocaml/js_promise.cmi +0 -0
  745. package/lib/ocaml/js_promise.cmt +0 -0
  746. package/lib/ocaml/js_promise.ml +100 -0
  747. package/lib/ocaml/js_re.cmi +0 -0
  748. package/lib/ocaml/js_re.cmt +0 -0
  749. package/lib/ocaml/js_re.ml +184 -0
  750. package/lib/ocaml/js_result.cmi +0 -0
  751. package/lib/ocaml/js_result.cmt +0 -0
  752. package/lib/ocaml/js_result.cmti +0 -0
  753. package/lib/ocaml/js_result.ml +28 -0
  754. package/lib/ocaml/js_result.mli +28 -0
  755. package/lib/ocaml/js_set.cmi +0 -0
  756. package/lib/ocaml/js_set.cmt +0 -0
  757. package/lib/ocaml/js_set.ml +3 -0
  758. package/lib/ocaml/js_string.cmi +0 -0
  759. package/lib/ocaml/js_string.cmt +0 -0
  760. package/lib/ocaml/js_string.ml +914 -0
  761. package/lib/ocaml/js_string2.cmi +0 -0
  762. package/lib/ocaml/js_string2.cmt +0 -0
  763. package/lib/ocaml/js_string2.ml +912 -0
  764. package/lib/ocaml/js_typed_array.cmi +0 -0
  765. package/lib/ocaml/js_typed_array.cmt +0 -0
  766. package/lib/ocaml/js_typed_array.cppo.ml +429 -0
  767. package/lib/ocaml/js_typed_array.ml +1405 -0
  768. package/lib/ocaml/js_typed_array2.cmi +0 -0
  769. package/lib/ocaml/js_typed_array2.cmt +0 -0
  770. package/lib/ocaml/js_typed_array2.cppo.ml +296 -0
  771. package/lib/ocaml/js_typed_array2.ml +1269 -0
  772. package/lib/ocaml/js_types.cmi +0 -0
  773. package/lib/ocaml/js_types.cmt +0 -0
  774. package/lib/ocaml/js_types.cmti +0 -0
  775. package/lib/ocaml/js_types.ml +118 -0
  776. package/lib/ocaml/js_types.mli +78 -0
  777. package/lib/ocaml/js_undefined.cmi +0 -0
  778. package/lib/ocaml/js_undefined.cmt +0 -0
  779. package/lib/ocaml/js_undefined.cmti +0 -0
  780. package/lib/ocaml/js_undefined.ml +59 -0
  781. package/lib/ocaml/js_undefined.mli +92 -0
  782. package/lib/ocaml/js_vector.cmi +0 -0
  783. package/lib/ocaml/js_vector.cmt +0 -0
  784. package/lib/ocaml/js_vector.cmti +0 -0
  785. package/lib/ocaml/js_vector.ml +143 -0
  786. package/lib/ocaml/js_vector.mli +92 -0
  787. package/lib/ocaml/js_weakmap.cmi +0 -0
  788. package/lib/ocaml/js_weakmap.cmt +0 -0
  789. package/lib/ocaml/js_weakmap.ml +3 -0
  790. package/lib/ocaml/js_weakset.cmi +0 -0
  791. package/lib/ocaml/js_weakset.cmt +0 -0
  792. package/lib/ocaml/js_weakset.ml +3 -0
  793. package/lib/ocaml/jsx.cmi +0 -0
  794. package/lib/ocaml/jsx.cmt +0 -0
  795. package/lib/ocaml/jsx.ml +39 -0
  796. package/lib/ocaml/jsxDOM.cmi +0 -0
  797. package/lib/ocaml/jsxDOM.cmt +0 -0
  798. package/lib/ocaml/jsxDOM.ml +2087 -0
  799. package/lib/ocaml/jsxDOMStyle.cmi +0 -0
  800. package/lib/ocaml/jsxDOMStyle.cmt +0 -0
  801. package/lib/ocaml/jsxDOMStyle.ml +777 -0
  802. package/lib/ocaml/jsxEvent.cmi +0 -0
  803. package/lib/ocaml/jsxEvent.cmt +0 -0
  804. package/lib/ocaml/jsxEvent.ml +358 -0
  805. package/lib/ocaml/lazy.cmi +0 -0
  806. package/lib/ocaml/lazy.cmt +0 -0
  807. package/lib/ocaml/lazy.cmti +0 -0
  808. package/lib/ocaml/lazy.ml +70 -0
  809. package/lib/ocaml/lazy.mli +95 -0
  810. package/lib/ocaml/lexing.cmi +0 -0
  811. package/lib/ocaml/lexing.cmt +0 -0
  812. package/lib/ocaml/lexing.cmti +0 -0
  813. package/lib/ocaml/lexing.ml +230 -0
  814. package/lib/ocaml/lexing.mli +172 -0
  815. package/lib/ocaml/list.cmi +0 -0
  816. package/lib/ocaml/list.cmt +0 -0
  817. package/lib/ocaml/list.cmti +0 -0
  818. package/lib/ocaml/list.ml +485 -0
  819. package/lib/ocaml/list.mli +347 -0
  820. package/lib/ocaml/listLabels.cmi +0 -0
  821. package/lib/ocaml/listLabels.cmt +0 -0
  822. package/lib/ocaml/listLabels.cmti +0 -0
  823. package/lib/ocaml/listLabels.ml +485 -0
  824. package/lib/ocaml/listLabels.mli +353 -0
  825. package/lib/ocaml/map.cmi +0 -0
  826. package/lib/ocaml/map.cmt +0 -0
  827. package/lib/ocaml/map.cmti +0 -0
  828. package/lib/ocaml/map.cppo.ml +174 -0
  829. package/lib/ocaml/map.cppo.mli +191 -0
  830. package/lib/ocaml/map.ml +480 -0
  831. package/lib/ocaml/map.mli +315 -0
  832. package/lib/ocaml/mapLabels.cmi +0 -0
  833. package/lib/ocaml/mapLabels.cmt +0 -0
  834. package/lib/ocaml/mapLabels.ml +480 -0
  835. package/lib/ocaml/mapm.cppo.ml +177 -0
  836. package/lib/ocaml/mapm.cppo.mli +138 -0
  837. package/lib/ocaml/moreLabels.cmi +0 -0
  838. package/lib/ocaml/moreLabels.cmt +0 -0
  839. package/lib/ocaml/moreLabels.cmti +0 -0
  840. package/lib/ocaml/moreLabels.ml +22 -0
  841. package/lib/ocaml/moreLabels.mli +198 -0
  842. package/lib/ocaml/node.cmi +0 -0
  843. package/lib/ocaml/node.cmt +0 -0
  844. package/lib/ocaml/node.ml +84 -0
  845. package/lib/ocaml/node_buffer.cmi +0 -0
  846. package/lib/ocaml/node_buffer.cmt +0 -0
  847. package/lib/ocaml/node_buffer.ml +47 -0
  848. package/lib/ocaml/node_child_process.cmi +0 -0
  849. package/lib/ocaml/node_child_process.cmt +0 -0
  850. package/lib/ocaml/node_child_process.ml +50 -0
  851. package/lib/ocaml/node_fs.cmi +0 -0
  852. package/lib/ocaml/node_fs.cmt +0 -0
  853. package/lib/ocaml/node_fs.ml +153 -0
  854. package/lib/ocaml/node_module.cmi +0 -0
  855. package/lib/ocaml/node_module.cmt +0 -0
  856. package/lib/ocaml/node_module.ml +29 -0
  857. package/lib/ocaml/node_path.cmi +0 -0
  858. package/lib/ocaml/node_path.cmt +0 -0
  859. package/lib/ocaml/node_path.ml +71 -0
  860. package/lib/ocaml/node_process.cmi +0 -0
  861. package/lib/ocaml/node_process.cmt +0 -0
  862. package/lib/ocaml/node_process.cmti +0 -0
  863. package/lib/ocaml/node_process.ml +59 -0
  864. package/lib/ocaml/node_process.mli +48 -0
  865. package/lib/ocaml/obj.cmi +0 -0
  866. package/lib/ocaml/obj.cmt +0 -0
  867. package/lib/ocaml/obj.cmti +0 -0
  868. package/lib/ocaml/obj.ml +29 -0
  869. package/lib/ocaml/obj.mli +62 -0
  870. package/lib/ocaml/parsing.cmi +0 -0
  871. package/lib/ocaml/parsing.cmt +0 -0
  872. package/lib/ocaml/parsing.cmti +0 -0
  873. package/lib/ocaml/parsing.ml +212 -0
  874. package/lib/ocaml/parsing.mli +105 -0
  875. package/lib/ocaml/pervasives.cmi +0 -0
  876. package/lib/ocaml/pervasives.cmt +0 -0
  877. package/lib/ocaml/pervasives.cmti +0 -0
  878. package/lib/ocaml/pervasives.ml +297 -0
  879. package/lib/ocaml/pervasives.mli +771 -0
  880. package/lib/ocaml/printexc.cmi +0 -0
  881. package/lib/ocaml/printexc.cmt +0 -0
  882. package/lib/ocaml/printexc.cmti +0 -0
  883. package/lib/ocaml/printexc.ml +79 -0
  884. package/lib/ocaml/printexc.mli +57 -0
  885. package/lib/ocaml/queue.cmi +0 -0
  886. package/lib/ocaml/queue.cmt +0 -0
  887. package/lib/ocaml/queue.cmti +0 -0
  888. package/lib/ocaml/queue.ml +132 -0
  889. package/lib/ocaml/queue.mli +82 -0
  890. package/lib/ocaml/random.cmi +0 -0
  891. package/lib/ocaml/random.cmt +0 -0
  892. package/lib/ocaml/random.cmti +0 -0
  893. package/lib/ocaml/random.ml +273 -0
  894. package/lib/ocaml/random.mli +102 -0
  895. package/lib/ocaml/set.cmi +0 -0
  896. package/lib/ocaml/set.cmt +0 -0
  897. package/lib/ocaml/set.cmti +0 -0
  898. package/lib/ocaml/set.ml +526 -0
  899. package/lib/ocaml/set.mli +266 -0
  900. package/lib/ocaml/setLabels.cmi +0 -0
  901. package/lib/ocaml/setLabels.cmt +0 -0
  902. package/lib/ocaml/setLabels.ml +526 -0
  903. package/lib/ocaml/setm.cppo.ml +346 -0
  904. package/lib/ocaml/setm.cppo.mli +126 -0
  905. package/lib/ocaml/sort.cmi +0 -0
  906. package/lib/ocaml/sort.cmt +0 -0
  907. package/lib/ocaml/sort.cmti +0 -0
  908. package/lib/ocaml/sort.cppo.ml +267 -0
  909. package/lib/ocaml/sort.cppo.mli +96 -0
  910. package/lib/ocaml/sort.ml +99 -0
  911. package/lib/ocaml/sort.mli +44 -0
  912. package/lib/ocaml/stack.cmi +0 -0
  913. package/lib/ocaml/stack.cmt +0 -0
  914. package/lib/ocaml/stack.cmti +0 -0
  915. package/lib/ocaml/stack.ml +44 -0
  916. package/lib/ocaml/stack.mli +63 -0
  917. package/lib/ocaml/stdLabels.cmi +0 -0
  918. package/lib/ocaml/stdLabels.cmt +0 -0
  919. package/lib/ocaml/stdLabels.cmti +0 -0
  920. package/lib/ocaml/stdLabels.ml +24 -0
  921. package/lib/ocaml/stdLabels.mli +29 -0
  922. package/lib/ocaml/stream.cmi +0 -0
  923. package/lib/ocaml/stream.cmt +0 -0
  924. package/lib/ocaml/stream.cmti +0 -0
  925. package/lib/ocaml/stream.ml +213 -0
  926. package/lib/ocaml/stream.mli +108 -0
  927. package/lib/ocaml/string.cmi +0 -0
  928. package/lib/ocaml/string.cmt +0 -0
  929. package/lib/ocaml/string.cmti +0 -0
  930. package/lib/ocaml/string.ml +190 -0
  931. package/lib/ocaml/string.mli +286 -0
  932. package/lib/ocaml/stringLabels.cmi +0 -0
  933. package/lib/ocaml/stringLabels.cmt +0 -0
  934. package/lib/ocaml/stringLabels.cmti +0 -0
  935. package/lib/ocaml/stringLabels.ml +190 -0
  936. package/lib/ocaml/stringLabels.mli +241 -0
  937. package/lib/ocaml/sys.cmi +0 -0
  938. package/lib/ocaml/sys.cmt +0 -0
  939. package/lib/ocaml/sys.cmti +0 -0
  940. package/lib/ocaml/sys.ml +135 -0
  941. package/lib/ocaml/sys.mli +333 -0
  942. package/lib/ocaml/uchar.cmi +0 -0
  943. package/lib/ocaml/uchar.cmt +0 -0
  944. package/lib/ocaml/uchar.cmti +0 -0
  945. package/lib/ocaml/uchar.ml +58 -0
  946. package/lib/ocaml/uchar.mli +98 -0
  947. package/linux/bsb_helper.exe +0 -0
  948. package/linux/bsc.exe +0 -0
  949. package/linux/ninja.COPYING +202 -0
  950. package/linux/ninja.exe +0 -0
  951. package/linux/refmt.exe +0 -0
  952. package/linux/rescript.exe +0 -0
  953. package/openbsd/.keep +0 -0
  954. package/package.json +71 -0
  955. package/rescript +591 -0
  956. package/scripts/LICENSE.ml +27 -0
  957. package/scripts/bin_path.js +38 -0
  958. package/scripts/buckle_lto.js +55 -0
  959. package/scripts/build_sorted.ml +233 -0
  960. package/scripts/buildocaml.js +102 -0
  961. package/scripts/caml_oo_curry_gen.ml +71 -0
  962. package/scripts/checkUnused.js +63 -0
  963. package/scripts/ciTest.js +172 -0
  964. package/scripts/config.js +24 -0
  965. package/scripts/cover.sh +3 -0
  966. package/scripts/curry_gen.ml +167 -0
  967. package/scripts/dbg +13 -0
  968. package/scripts/dedupe.js +44 -0
  969. package/scripts/doc_gen.js +117 -0
  970. package/scripts/install.js +237 -0
  971. package/scripts/installUtils.js +61 -0
  972. package/scripts/js_internal_gen.js +135 -0
  973. package/scripts/jsconfig.json +12 -0
  974. package/scripts/littlecase.js +21 -0
  975. package/scripts/ninja.js +1980 -0
  976. package/scripts/ninjaFactory.js +36 -0
  977. package/scripts/pack.js +107 -0
  978. package/scripts/prebuilt.js +99 -0
  979. package/scripts/release.js +41 -0
  980. package/scripts/repl.js +151 -0
  981. package/scripts/rescript_arg.js +168 -0
  982. package/scripts/rescript_convert.js +128 -0
  983. package/scripts/rescript_dump.js +48 -0
  984. package/scripts/rescript_format.js +194 -0
  985. package/scripts/shake.js +138 -0
  986. package/scripts/tasks.js +149 -0
  987. package/scripts/test.sh +3 -0
  988. package/scripts/tmp.js +98 -0
  989. package/scripts/validate.js +41 -0
  990. package/vendor/ninja.tar.gz +0 -0
  991. package/vendor/ocaml.tar.gz +0 -0
  992. package/win32/bsb_helper.exe +0 -0
  993. package/win32/bsc.exe +0 -0
  994. package/win32/ninja.COPYING +202 -0
  995. package/win32/ninja.exe +0 -0
  996. package/win32/refmt.exe +0 -0
  997. package/win32/rescript.exe +0 -0
@@ -0,0 +1,1980 @@
1
+ #!/usr/bin/env node
2
+ //@ts-check
3
+
4
+ var fs = require("fs");
5
+ var path = require("path");
6
+ var cp = require("child_process");
7
+ var semver = require("semver");
8
+
9
+ var jscompDir = path.join(__dirname, "..", "jscomp");
10
+ var runtimeDir = path.join(jscompDir, "runtime");
11
+ var othersDir = path.join(jscompDir, "others");
12
+ var testDir = path.join(jscompDir, "test");
13
+
14
+ var jsDir = path.join(__dirname, "..", "lib", "js");
15
+
16
+ var runtimeFiles = fs.readdirSync(runtimeDir, "ascii");
17
+ var runtimeMlFiles = runtimeFiles.filter(
18
+ x => !x.startsWith("bs_stdlib_mini") && x.endsWith(".ml") && x !== "js.ml"
19
+ );
20
+ var runtimeMliFiles = runtimeFiles.filter(
21
+ x => !x.startsWith("bs_stdlib_mini") && x.endsWith(".mli") && x !== "js.mli"
22
+ );
23
+ var runtimeSourceFiles = runtimeMlFiles.concat(runtimeMliFiles);
24
+ var runtimeJsFiles = [...new Set(runtimeSourceFiles.map(baseName))];
25
+
26
+ var commonBsFlags = `-no-keep-locs -no-alias-deps -bs-no-version-header -bs-no-check-div-by-zero -nostdlib `;
27
+ var js_package = pseudoTarget("js_pkg");
28
+ var runtimeTarget = pseudoTarget("runtime");
29
+ var othersTarget = pseudoTarget("others");
30
+ var stdlibTarget = pseudoTarget("$stdlib");
31
+ var my_target = require("./bin_path").absolutePath;
32
+ var bsc_exe = require("./bin_path").bsc_exe;
33
+
34
+ var vendorNinjaPath = require("./bin_path").ninja_exe;
35
+
36
+ // Let's enforce a Node version >= 16 to make sure M1 users don't trip up on
37
+ // cryptic issues caused by mismatching assembly architectures Node 16 ships
38
+ // with a native arm64 binary, and will set process.arch to "arm64" (instead of
39
+ // Rosetta emulated "x86")
40
+ if (semver.lt(process.version, "16.0.0")) {
41
+ console.error("Requires node version 16 or above... Abort.");
42
+ process.exit(1);
43
+ }
44
+
45
+ exports.vendorNinjaPath = vendorNinjaPath;
46
+ /**
47
+ * By default we use vendored,
48
+ * we produce two ninja files which won't overlap
49
+ * one is build.ninja which use vendored config
50
+ * the other is env.ninja which use binaries from environment
51
+ *
52
+ * In dev mode, files generated for vendor config
53
+ *
54
+ * build.ninja
55
+ * compiler.ninja
56
+ * snapshot.ninja
57
+ * runtime/build.ninja
58
+ * others/build.ninja
59
+ * $stdlib/build.ninja
60
+ * test/build.ninja
61
+ *
62
+ * files generated for env config
63
+ *
64
+ * env.ninja
65
+ * compilerEnv.ninja (no snapshot since env can not provide snapshot)
66
+ * runtime/env.ninja
67
+ * others/env.ninja
68
+ * $stdlib/env.ninja
69
+ * test/env.ninja
70
+ *
71
+ * In release mode:
72
+ *
73
+ * release.ninja
74
+ * runtime/release.ninja
75
+ * others/release.ninja
76
+ * $stdlib/release.ninja
77
+ *
78
+ * Like that our snapshot is so robust that
79
+ * we don't do snapshot in CI, we don't
80
+ * need do test build in CI either
81
+ *
82
+ */
83
+
84
+ /**
85
+ * @type {string}
86
+ */
87
+ var versionString = undefined;
88
+
89
+ /**
90
+ *
91
+ * @returns {string}
92
+ */
93
+ var getVersionString = () => {
94
+ if (versionString === undefined) {
95
+ var searcher = "version";
96
+ try {
97
+ var output = cp.execSync(`ocamldep.opt -version`, {
98
+ encoding: "ascii",
99
+ });
100
+ versionString = output
101
+ .substring(output.indexOf(searcher) + searcher.length)
102
+ .trim();
103
+ } catch (err) {
104
+ //
105
+ console.error(`This error probably came from that you don't have our vendored ocaml installed
106
+ If this is the first time you clone the repo
107
+ try this
108
+ git submodule init && git submodule update
109
+ node ./scripts/buildocaml.js
110
+ `);
111
+ console.error(err.message);
112
+ process.exit(err.status);
113
+ }
114
+ }
115
+ return versionString;
116
+ };
117
+
118
+ /**
119
+ *
120
+ * @param {string} ninjaCwd
121
+ */
122
+ function ruleCC(ninjaCwd) {
123
+ return `
124
+ rule cc
125
+ command = $bsc -bs-cmi -bs-cmj $bsc_flags -I ${ninjaCwd} $in
126
+ description = $in -> $out
127
+ rule cc_cmi
128
+ command = $bsc -bs-read-cmi -bs-cmi -bs-cmj $bsc_flags -I ${ninjaCwd} $in
129
+ description = $in -> $out
130
+ `;
131
+ }
132
+ /**
133
+ * Fixed since it is already vendored
134
+ */
135
+ var cppoMonoFile = `../vendor/cppo/cppo_bin.ml`;
136
+ /**
137
+ *
138
+ * @param {string} name
139
+ * @param {string} content
140
+ */
141
+ function writeFileAscii(name, content) {
142
+ fs.writeFile(name, content, "ascii", throwIfError);
143
+ }
144
+
145
+ /**
146
+ *
147
+ * @param {string} name
148
+ * @param {string} content
149
+ */
150
+ function writeFileSync(name, content) {
151
+ return fs.writeFileSync(name, content, "ascii");
152
+ }
153
+ /**
154
+ *
155
+ * @param {NodeJS.ErrnoException} err
156
+ */
157
+ function throwIfError(err) {
158
+ if (err !== null) {
159
+ throw err;
160
+ }
161
+ }
162
+ /**
163
+ *
164
+ * @typedef { {kind : "file" , name : string} | {kind : "pseudo" , name : string}} Target
165
+ * @typedef {{key : string, value : string}} Override
166
+ * @typedef { Target[]} Targets
167
+ * @typedef {Map<string,TargetSet>} DepsMap
168
+ */
169
+
170
+ class TargetSet {
171
+ /**
172
+ *
173
+ * @param {Targets} xs
174
+ */
175
+ constructor(xs = []) {
176
+ this.data = xs;
177
+ }
178
+ /**
179
+ *
180
+ * @param {Target} x
181
+ */
182
+ add(x) {
183
+ var data = this.data;
184
+ var found = false;
185
+ for (var i = 0; i < data.length; ++i) {
186
+ var cur = data[i];
187
+ if (cur.kind === x.kind && cur.name === x.name) {
188
+ found = true;
189
+ break;
190
+ }
191
+ }
192
+ if (!found) {
193
+ this.data.push(x);
194
+ }
195
+ return this;
196
+ }
197
+ /**
198
+ * @returns {Targets} a copy
199
+ *
200
+ */
201
+ toSortedArray() {
202
+ var newData = this.data.concat();
203
+ newData.sort((x, y) => {
204
+ var kindx = x.kind;
205
+ var kindy = y.kind;
206
+ if (kindx > kindy) {
207
+ return 1;
208
+ } else if (kindx < kindy) {
209
+ return -1;
210
+ } else {
211
+ if (x.name > y.name) {
212
+ return 1;
213
+ } else if (x.name < y.name) {
214
+ return -1;
215
+ } else {
216
+ return 0;
217
+ }
218
+ }
219
+ });
220
+ return newData;
221
+ }
222
+ /**
223
+ *
224
+ * @param {(item:Target)=>void} callback
225
+ */
226
+ forEach(callback) {
227
+ this.data.forEach(callback);
228
+ }
229
+ }
230
+
231
+ /**
232
+ *
233
+ * @param {string} target
234
+ * @param {string} dependency
235
+ * @param {DepsMap} depsMap
236
+ */
237
+ function updateDepsKVByFile(target, dependency, depsMap) {
238
+ var singleTon = fileTarget(dependency);
239
+ if (depsMap.has(target)) {
240
+ depsMap.get(target).add(singleTon);
241
+ } else {
242
+ depsMap.set(target, new TargetSet([singleTon]));
243
+ }
244
+ }
245
+
246
+ /**
247
+ *
248
+ * @param {string} s
249
+ */
250
+ function uncapitalize(s) {
251
+ if (s.length === 0) {
252
+ return s;
253
+ }
254
+ return s[0].toLowerCase() + s.slice(1);
255
+ }
256
+ /**
257
+ *
258
+ * @param {string} target
259
+ * @param {string[]} dependencies
260
+ * @param {DepsMap} depsMap
261
+ */
262
+ function updateDepsKVsByFile(target, dependencies, depsMap) {
263
+ var targets = fileTargets(dependencies);
264
+ if (depsMap.has(target)) {
265
+ var s = depsMap.get(target);
266
+ for (var i = 0; i < targets.length; ++i) {
267
+ s.add(targets[i]);
268
+ }
269
+ } else {
270
+ depsMap.set(target, new TargetSet(targets));
271
+ }
272
+ }
273
+
274
+ /**
275
+ *
276
+ * @param {string} target
277
+ * @param {string[]} modules
278
+ * @param {DepsMap} depsMap
279
+ */
280
+ function updateDepsKVsByModule(target, modules, depsMap) {
281
+ if (depsMap.has(target)) {
282
+ let s = depsMap.get(target);
283
+ for (let module of modules) {
284
+ let filename = uncapitalize(module);
285
+ let filenameAsCmi = filename + ".cmi";
286
+ let filenameAsCmj = filename + ".cmj";
287
+ if (target.endsWith(".cmi")) {
288
+ if (depsMap.has(filenameAsCmi) || depsMap.has(filenameAsCmj)) {
289
+ s.add(fileTarget(filenameAsCmi));
290
+ }
291
+ } else if (target.endsWith(".cmj")) {
292
+ if (depsMap.has(filenameAsCmj)) {
293
+ s.add(fileTarget(filenameAsCmj));
294
+ } else if (depsMap.has(filenameAsCmi)) {
295
+ s.add(fileTarget(filenameAsCmi));
296
+ }
297
+ }
298
+ }
299
+ }
300
+ }
301
+ /**
302
+ *
303
+ * @param {string[]}sources
304
+ * @return {DepsMap}
305
+ */
306
+ function createDepsMapWithTargets(sources) {
307
+ /**
308
+ * @type {DepsMap}
309
+ */
310
+ let depsMap = new Map();
311
+ for (let source of sources) {
312
+ let target = sourceToTarget(source);
313
+ depsMap.set(target, new TargetSet([]));
314
+ }
315
+ depsMap.forEach((set, name) => {
316
+ let cmiFile;
317
+ if (
318
+ name.endsWith(".cmj") &&
319
+ depsMap.has((cmiFile = replaceExt(name, ".cmi")))
320
+ ) {
321
+ set.add(fileTarget(cmiFile));
322
+ }
323
+ });
324
+ return depsMap;
325
+ }
326
+
327
+ /**
328
+ *
329
+ * @param {Target} file
330
+ * @param {string} cwd
331
+ */
332
+ function targetToString(file, cwd) {
333
+ switch (file.kind) {
334
+ case "file":
335
+ return path.join(cwd, file.name);
336
+ case "pseudo":
337
+ return file.name;
338
+ default:
339
+ throw Error;
340
+ }
341
+ }
342
+ /**
343
+ *
344
+ * @param {Targets} files
345
+ * @param {string} cwd
346
+ *
347
+ * @returns {string} return a string separated with whitespace
348
+ */
349
+ function targetsToString(files, cwd) {
350
+ return files.map(x => targetToString(x, cwd)).join(" ");
351
+ }
352
+ /**
353
+ *
354
+ * @param {Targets} outputs
355
+ * @param {Targets} inputs
356
+ * @param {Targets} deps
357
+ * @param {Override[]} overrides
358
+ * @param {string} rule
359
+ * @param {string} cwd
360
+ * @return {string}
361
+ */
362
+ function ninjaBuild(outputs, inputs, rule, deps, cwd, overrides) {
363
+ var fileOutputs = targetsToString(outputs, cwd);
364
+ var fileInputs = targetsToString(inputs, cwd);
365
+ var stmt = `o ${fileOutputs} : ${rule} ${fileInputs}`;
366
+ // deps.push(pseudoTarget('../lib/bsc'))
367
+ if (deps.length > 0) {
368
+ var fileDeps = targetsToString(deps, cwd);
369
+ stmt += ` | ${fileDeps}`;
370
+ }
371
+ if (overrides.length > 0) {
372
+ stmt +=
373
+ `\n` +
374
+ overrides
375
+ .map(x => {
376
+ return ` ${x.key} = ${x.value}`;
377
+ })
378
+ .join("\n");
379
+ }
380
+ return stmt;
381
+ }
382
+
383
+ /**
384
+ *
385
+ * @param {Target} outputs
386
+ * @param {Targets} inputs
387
+ * @param {string} cwd
388
+ */
389
+ function phony(outputs, inputs, cwd) {
390
+ return ninjaBuild([outputs], inputs, "phony", [], cwd, []);
391
+ }
392
+
393
+ /**
394
+ *
395
+ * @param {string | string[]} outputs
396
+ * @param {string | string[]} inputs
397
+ * @param {string | string[]} fileDeps
398
+ * @param {string} rule
399
+ * @param {string} cwd
400
+ * @param {[string,string][]} overrides
401
+ * @param {Target | Targets} extraDeps
402
+ */
403
+ function ninjaQuickBuild(
404
+ outputs,
405
+ inputs,
406
+ rule,
407
+ cwd,
408
+ overrides,
409
+ fileDeps,
410
+ extraDeps
411
+ ) {
412
+ var os = Array.isArray(outputs)
413
+ ? fileTargets(outputs)
414
+ : [fileTarget(outputs)];
415
+ var is = Array.isArray(inputs) ? fileTargets(inputs) : [fileTarget(inputs)];
416
+ var ds = Array.isArray(fileDeps)
417
+ ? fileTargets(fileDeps)
418
+ : [fileTarget(fileDeps)];
419
+ var dds = Array.isArray(extraDeps) ? extraDeps : [extraDeps];
420
+
421
+ return ninjaBuild(
422
+ os,
423
+ is,
424
+ rule,
425
+ ds.concat(dds),
426
+ cwd,
427
+ overrides.map(x => {
428
+ return { key: x[0], value: x[1] };
429
+ })
430
+ );
431
+ }
432
+
433
+ /**
434
+ * @typedef { (string | string []) } Strings
435
+ * @typedef { [string,string]} KV
436
+ * @typedef { [Strings, Strings, string, string, KV[], Strings, (Target|Targets)] } BuildList
437
+ * @param {BuildList[]} xs
438
+ * @returns {string}
439
+ */
440
+ function ninjaQuickBuidList(xs) {
441
+ return xs
442
+ .map(x => ninjaQuickBuild(x[0], x[1], x[2], x[3], x[4], x[5], x[6]))
443
+ .join("\n");
444
+ }
445
+
446
+ /**
447
+ * @typedef { [string,string,string?]} CppoInput
448
+ * @param {CppoInput[]} xs
449
+ * @param {string} cwd
450
+ * @returns {string}
451
+ */
452
+ function cppoList(cwd, xs) {
453
+ return xs
454
+ .map(x => {
455
+ /**
456
+ * @type {KV[]}
457
+ */
458
+ var variables;
459
+ if (x[2]) {
460
+ variables = [["type", `-D ${x[2]}`]];
461
+ } else {
462
+ variables = [];
463
+ }
464
+ var extraDeps = pseudoTarget(cppoFile);
465
+ return ninjaQuickBuild(
466
+ x[0],
467
+ x[1],
468
+ cppoRuleName,
469
+ cwd,
470
+ variables,
471
+ [],
472
+ extraDeps
473
+ );
474
+ })
475
+ .join("\n");
476
+ }
477
+ /**
478
+ *
479
+ * @param {string} cwd
480
+ * @param {string[]} xs
481
+ * @returns {string}
482
+ */
483
+ function mllList(cwd, xs) {
484
+ return xs
485
+ .map(x => {
486
+ var output = baseName(x) + ".ml";
487
+ return ninjaQuickBuild(output, x, mllRuleName, cwd, [], [], []);
488
+ })
489
+ .join("\n");
490
+ }
491
+
492
+ /**
493
+ *
494
+ * @param {string} cwd
495
+ * @param {string[]} xs
496
+ * @returns {string}
497
+ */
498
+ function mlyList(cwd, xs) {
499
+ return xs
500
+ .map(x => {
501
+ var output = baseName(x) + ".ml";
502
+ return ninjaQuickBuild(output, x, mlyRuleName, cwd, [], [], []);
503
+ })
504
+ .join("\n");
505
+ }
506
+ /**
507
+ *
508
+ * @param {string} name
509
+ * @returns {Target}
510
+ */
511
+ function fileTarget(name) {
512
+ return { kind: "file", name };
513
+ }
514
+
515
+ /**
516
+ *
517
+ * @param {string} name
518
+ * @returns {Target}
519
+ */
520
+ function pseudoTarget(name) {
521
+ return { kind: "pseudo", name };
522
+ }
523
+
524
+ /**
525
+ *
526
+ * @param {string[]} args
527
+ * @returns {Targets}
528
+ */
529
+ function fileTargets(args) {
530
+ return args.map(name => fileTarget(name));
531
+ }
532
+
533
+ /**
534
+ *
535
+ * @param {string[]} outputs
536
+ * @param {string[]} inputs
537
+ * @param {DepsMap} depsMap
538
+ * @param {Override[]} overrides
539
+ * @param {Targets} extraDeps
540
+ * @param {string} rule
541
+ * @param {string} cwd
542
+ */
543
+ function buildStmt(outputs, inputs, rule, depsMap, cwd, overrides, extraDeps) {
544
+ var os = outputs.map(fileTarget);
545
+ var is = inputs.map(fileTarget);
546
+ var deps = new TargetSet();
547
+ for (var i = 0; i < outputs.length; ++i) {
548
+ var curDeps = depsMap.get(outputs[i]);
549
+ if (curDeps !== undefined) {
550
+ curDeps.forEach(x => deps.add(x));
551
+ }
552
+ }
553
+ extraDeps.forEach(x => deps.add(x));
554
+ return ninjaBuild(os, is, rule, deps.toSortedArray(), cwd, overrides);
555
+ }
556
+
557
+ /**
558
+ *
559
+ * @param {string} x
560
+ */
561
+ function replaceCmj(x) {
562
+ return x.trim().replace("cmx", "cmj");
563
+ }
564
+
565
+ /**
566
+ *
567
+ * @param {string} y
568
+ */
569
+ function sourceToTarget(y) {
570
+ if (y.endsWith(".ml") || y.endsWith(".re") || y.endsWith(".res")) {
571
+ return replaceExt(y, ".cmj");
572
+ } else if (y.endsWith(".mli") || y.endsWith(".rei") || y.endsWith(".resi")) {
573
+ return replaceExt(y, ".cmi");
574
+ }
575
+ return y;
576
+ }
577
+ /**
578
+ *
579
+ * @param {string[]} files
580
+ * @param {string} dir
581
+ * @param {DepsMap} depsMap
582
+ * @return {Promise<void>}
583
+ * Note `bsdep.exe` does not need post processing and -one-line flag
584
+ * By default `ocamldep.opt` only list dependencies in its args
585
+ */
586
+ function ocamlDepForBscAsync(files, dir, depsMap) {
587
+ return new Promise((resolve, reject) => {
588
+ cp.exec(
589
+ `ocamldep.opt -allow-approx -one-line -native ${files.join(" ")}`,
590
+ {
591
+ cwd: dir,
592
+ encoding: "ascii",
593
+ },
594
+ function (error, stdout, stderr) {
595
+ if (error !== null) {
596
+ return reject(error);
597
+ } else {
598
+ var pairs = stdout.split("\n").map(x => x.split(":"));
599
+ pairs.forEach(x => {
600
+ var deps;
601
+ let source = replaceCmj(x[0]);
602
+ if (x[1] !== undefined && (deps = x[1].trim())) {
603
+ deps = deps.split(" ");
604
+ updateDepsKVsByFile(
605
+ source,
606
+ deps.map(x => replaceCmj(x)),
607
+ depsMap
608
+ );
609
+ }
610
+ });
611
+ return resolve();
612
+ }
613
+ }
614
+ );
615
+ });
616
+ }
617
+
618
+ /**
619
+ *
620
+ * @param {string[]} files
621
+ * @param {string} dir
622
+ * @param {DepsMap} depsMap
623
+ * @return { Promise<void> []}
624
+ * Note `bsdep.exe` does not need post processing and -one-line flag
625
+ * By default `ocamldep.opt` only list dependencies in its args
626
+ */
627
+ function depModulesForBscAsync(files, dir, depsMap) {
628
+ let ocamlFiles = files.filter(x => x.endsWith(".ml") || x.endsWith(".mli"));
629
+ let reFiles = files.filter(x => x.endsWith(".re") || x.endsWith(".rei"));
630
+ let resFiles = files.filter(x => x.endsWith(".res") || x.endsWith(".resi"));
631
+ /**
632
+ *
633
+ * @param {(value:void) =>void} resolve
634
+ * @param {(value:any)=>void} reject
635
+ */
636
+ let cb = (resolve, reject) => {
637
+ /**
638
+ * @param {any} error
639
+ * @param {string} stdout
640
+ * @param {string} stderr
641
+ */
642
+ let fn = function (error, stdout, stderr) {
643
+ if (error !== null) {
644
+ return reject(error);
645
+ } else {
646
+ var pairs = stdout.split("\n").map(x => x.split(":"));
647
+ pairs.forEach(x => {
648
+ var modules;
649
+ let source = sourceToTarget(x[0].trim());
650
+ if (x[1] !== undefined && (modules = x[1].trim())) {
651
+ modules = modules.split(" ");
652
+ updateDepsKVsByModule(source, modules, depsMap);
653
+ }
654
+ });
655
+ return resolve();
656
+ }
657
+ };
658
+ return fn;
659
+ };
660
+ let config = {
661
+ cwd: dir,
662
+ encoding: "ascii",
663
+ };
664
+ return [
665
+ new Promise((resolve, reject) => {
666
+ cp.exec(
667
+ `${bsc_exe} -modules -bs-syntax-only ${resFiles.join(
668
+ " "
669
+ )} ${reFiles.join(" ")} ${ocamlFiles.join(" ")}`,
670
+ config,
671
+ cb(resolve, reject)
672
+ );
673
+ }),
674
+ ];
675
+ }
676
+
677
+ /**
678
+ * @typedef {('HAS_ML' | 'HAS_MLI' | 'HAS_BOTH' | 'HAS_RE' | 'HAS_RES' | 'HAS_REI' | 'HAS_RESI' | 'HAS_BOTH_RE' | 'HAS_BOTH_RES')} FileInfo
679
+ * @param {string[]} sourceFiles
680
+ * @returns {Map<string, FileInfo>}
681
+ * We make a set to ensure that `sourceFiles` are not duplicated
682
+ */
683
+ function collectTarget(sourceFiles) {
684
+ /**
685
+ * @type {Map<string,FileInfo>}
686
+ */
687
+ var allTargets = new Map();
688
+ sourceFiles.forEach(x => {
689
+ var { ext, name } = path.parse(x);
690
+ var existExt = allTargets.get(name);
691
+ if (existExt === undefined) {
692
+ if (ext === ".ml") {
693
+ allTargets.set(name, "HAS_ML");
694
+ } else if (ext === ".mli") {
695
+ allTargets.set(name, "HAS_MLI");
696
+ } else if (ext === ".re") {
697
+ allTargets.set(name, "HAS_RE");
698
+ } else if (ext === ".res") {
699
+ allTargets.set(name, "HAS_RES");
700
+ } else if (ext === ".rei") {
701
+ allTargets.set(name, "HAS_REI");
702
+ } else if (ext === ".resi") {
703
+ allTargets.set(name, "HAS_RESI");
704
+ }
705
+ } else {
706
+ switch (existExt) {
707
+ case "HAS_ML":
708
+ if (ext === ".mli") {
709
+ allTargets.set(name, "HAS_BOTH");
710
+ }
711
+ break;
712
+ case "HAS_RE":
713
+ if (ext === ".rei") {
714
+ allTargets.set(name, "HAS_BOTH_RE");
715
+ }
716
+ break;
717
+ case "HAS_RES":
718
+ if (ext === ".resi") {
719
+ allTargets.set(name, "HAS_BOTH_RES");
720
+ }
721
+ break;
722
+ case "HAS_MLI":
723
+ if (ext === ".ml") {
724
+ allTargets.set(name, "HAS_BOTH");
725
+ }
726
+ break;
727
+ case "HAS_REI":
728
+ if (ext === ".re") {
729
+ allTargets.set(name, "HAS_BOTH_RE");
730
+ }
731
+ break;
732
+ case "HAS_RESI":
733
+ if (ext === ".res") {
734
+ allTargets.set(name, "HAS_BOTH_RES");
735
+ }
736
+ break;
737
+ case "HAS_BOTH_RE":
738
+ case "HAS_BOTH":
739
+ case "HAS_BOTH_RES":
740
+ break;
741
+ }
742
+ }
743
+ });
744
+ return allTargets;
745
+ }
746
+
747
+ /**
748
+ *
749
+ * @param {Map<string, FileInfo>} allTargets
750
+ * @param {string[]} collIn
751
+ * @returns {string[]} A new copy which is
752
+ *
753
+ */
754
+ function scanFileTargets(allTargets, collIn) {
755
+ var coll = collIn.concat();
756
+ allTargets.forEach((ext, mod) => {
757
+ switch (ext) {
758
+ case "HAS_MLI":
759
+ case "HAS_REI":
760
+ case "HAS_RESI":
761
+ coll.push(`${mod}.cmi`);
762
+ break;
763
+ case "HAS_BOTH_RES":
764
+ case "HAS_BOTH_RE":
765
+ case "HAS_BOTH":
766
+ coll.push(`${mod}.cmi`, `${mod}.cmj`);
767
+ break;
768
+ case "HAS_RE":
769
+ case "HAS_RES":
770
+ case "HAS_ML":
771
+ coll.push(`${mod}.cmi`, `${mod}.cmj`);
772
+ break;
773
+ }
774
+ });
775
+ return coll;
776
+ }
777
+
778
+ /**
779
+ *
780
+ * @param {DepsMap} depsMap
781
+ * @param {Map<string,string>} allTargets
782
+ * @param {string} cwd
783
+ * @param {Targets} extraDeps
784
+ * @return {string[]}
785
+ */
786
+ function generateNinja(depsMap, allTargets, cwd, extraDeps = []) {
787
+ /**
788
+ * @type {string[]}
789
+ */
790
+ var build_stmts = [];
791
+ allTargets.forEach((x, mod) => {
792
+ let ouptput_cmj = mod + ".cmj";
793
+ let output_cmi = mod + ".cmi";
794
+ let input_ml = mod + ".ml";
795
+ let input_mli = mod + ".mli";
796
+ let input_re = mod + ".re";
797
+ let input_res = mod + ".res";
798
+ let input_rei = mod + ".rei";
799
+ let input_resi = mod + ".resi";
800
+ /**
801
+ * @type {Override[]}
802
+ */
803
+ var overrides = [];
804
+ // if (mod.endsWith("Labels")) {
805
+ // overrides.push({ key: "bsc_flags", value: "$bsc_flags -nolabels" });
806
+ // }
807
+
808
+ /**
809
+ *
810
+ * @param {string[]} outputs
811
+ * @param {string[]} inputs
812
+ *
813
+ */
814
+ let mk = (outputs, inputs, rule = "cc") => {
815
+ return build_stmts.push(
816
+ buildStmt(outputs, inputs, rule, depsMap, cwd, overrides, extraDeps)
817
+ );
818
+ };
819
+ switch (x) {
820
+ case "HAS_BOTH":
821
+ mk([ouptput_cmj], [input_ml], "cc_cmi");
822
+ mk([output_cmi], [input_mli]);
823
+ break;
824
+ case "HAS_BOTH_RE":
825
+ mk([ouptput_cmj], [input_re], "cc_cmi");
826
+ mk([output_cmi], [input_rei], "cc");
827
+ break;
828
+ case "HAS_BOTH_RES":
829
+ mk([ouptput_cmj], [input_res], "cc_cmi");
830
+ mk([output_cmi], [input_resi], "cc");
831
+ break;
832
+ case "HAS_RE":
833
+ mk([output_cmi, ouptput_cmj], [input_re], "cc");
834
+ break;
835
+ case "HAS_RES":
836
+ mk([output_cmi, ouptput_cmj], [input_res], "cc");
837
+ break;
838
+ case "HAS_ML":
839
+ mk([output_cmi, ouptput_cmj], [input_ml]);
840
+ break;
841
+ case "HAS_REI":
842
+ mk([output_cmi], [input_rei], "cc");
843
+ break;
844
+ case "HAS_RESI":
845
+ mk([output_cmi], [input_resi], "cc");
846
+ break;
847
+ case "HAS_MLI":
848
+ mk([output_cmi], [input_mli]);
849
+ break;
850
+ }
851
+ });
852
+ return build_stmts;
853
+ }
854
+
855
+ var COMPILIER = bsc_exe;
856
+ var BSC_COMPILER = `bsc = ${COMPILIER}`;
857
+
858
+ async function runtimeNinja(devmode = true) {
859
+ var ninjaCwd = "runtime";
860
+ var compilerTarget = pseudoTarget("$bsc");
861
+ var externalDeps = devmode ? [compilerTarget] : [];
862
+ var ninjaOutput = devmode ? "build.ninja" : "release.ninja";
863
+ var templateRuntimeRules = `
864
+ bsc_no_open_flags = ${commonBsFlags} -bs-cross-module-opt -make-runtime -nopervasives -unsafe -w +50 -warn-error A
865
+ bsc_flags = $bsc_no_open_flags -open Bs_stdlib_mini
866
+ ${ruleCC(ninjaCwd)}
867
+ ${ninjaQuickBuidList([
868
+ [
869
+ "bs_stdlib_mini.cmi",
870
+ "bs_stdlib_mini.mli",
871
+ "cc",
872
+ ninjaCwd,
873
+ [["bsc_flags", "-nostdlib -nopervasives"]],
874
+ [],
875
+ externalDeps,
876
+ ],
877
+ [
878
+ ["js.cmj", "js.cmi"],
879
+ "js.ml",
880
+ "cc",
881
+ ninjaCwd,
882
+ [["bsc_flags", "$bsc_no_open_flags"]],
883
+ [],
884
+ externalDeps,
885
+ ],
886
+ ])}
887
+ `;
888
+ /**
889
+ * @type {DepsMap}
890
+ */
891
+ var depsMap = new Map();
892
+ var allTargets = collectTarget([...runtimeMliFiles, ...runtimeMlFiles]);
893
+ var manualDeps = ["bs_stdlib_mini.cmi", "js.cmj", "js.cmi"];
894
+ var allFileTargetsInRuntime = scanFileTargets(allTargets, manualDeps);
895
+ allTargets.forEach((ext, mod) => {
896
+ switch (ext) {
897
+ case "HAS_MLI":
898
+ case "HAS_BOTH":
899
+ updateDepsKVsByFile(mod + ".cmi", manualDeps, depsMap);
900
+ break;
901
+ case "HAS_ML":
902
+ updateDepsKVsByFile(mod + ".cmj", manualDeps, depsMap);
903
+ break;
904
+ }
905
+ });
906
+ // FIXME: in dev mode, it should not rely on reading js file
907
+ // since it may cause a bootstrapping issues
908
+ try {
909
+ await Promise.all([
910
+ runJSCheckAsync(depsMap),
911
+ ocamlDepForBscAsync(runtimeSourceFiles, runtimeDir, depsMap),
912
+ ]);
913
+ var stmts = generateNinja(depsMap, allTargets, ninjaCwd, externalDeps);
914
+ stmts.push(
915
+ phony(runtimeTarget, fileTargets(allFileTargetsInRuntime), ninjaCwd)
916
+ );
917
+ writeFileAscii(
918
+ path.join(runtimeDir, ninjaOutput),
919
+ templateRuntimeRules + stmts.join("\n") + "\n"
920
+ );
921
+ } catch (e) {
922
+ console.log(e);
923
+ }
924
+ }
925
+
926
+ var dTypeString = "TYPE_STRING";
927
+
928
+ var dTypeInt = "TYPE_INT";
929
+
930
+ var dTypeFunctor = "TYPE_FUNCTOR";
931
+
932
+ var dTypeLocalIdent = "TYPE_LOCAL_IDENT";
933
+
934
+ var dTypeIdent = "TYPE_IDENT";
935
+
936
+ var dTypePoly = "TYPE_POLY";
937
+
938
+ var cppoRuleName = `cppo`;
939
+ var cppoFile = `./bin/cppo.exe`;
940
+
941
+ var cppoRule = (flags = "") => `
942
+ rule ${cppoRuleName}
943
+ command = ${cppoFile} -V OCAML:${getVersionString()} ${flags} $type $in -o $out
944
+ generator = true
945
+ `;
946
+
947
+ var mllRuleName = `mll`;
948
+ var mllRule = `
949
+ rule ${mllRuleName}
950
+ command = $ocamllex $in
951
+ generator = true
952
+ `;
953
+
954
+ var mlyRuleName = `mly`;
955
+ var mlyRule = `
956
+ rule ${mlyRuleName}
957
+ command = $ocamlyacc -v --strict $in
958
+ generator = true
959
+ `;
960
+ async function othersNinja(devmode = true) {
961
+ var compilerTarget = pseudoTarget("$bsc");
962
+ var externalDeps = [
963
+ compilerTarget,
964
+ fileTarget("belt_internals.cmi"),
965
+ fileTarget("js.cmi"),
966
+ ];
967
+ var ninjaOutput = devmode ? "build.ninja" : "release.ninja";
968
+ var ninjaCwd = "others";
969
+
970
+ var templateOthersRules = `
971
+ bsc_primitive_flags = ${commonBsFlags} -bs-cross-module-opt -make-runtime -nopervasives -unsafe -w +50 -warn-error A
972
+ bsc_flags = $bsc_primitive_flags -open Belt_internals
973
+ ${ruleCC(ninjaCwd)}
974
+ ${ninjaQuickBuidList([
975
+ [
976
+ ["belt.cmj", "belt.cmi"],
977
+ "belt.ml",
978
+ "cc",
979
+ ninjaCwd,
980
+ [["bsc_flags", "$bsc_primitive_flags"]],
981
+ [],
982
+ [compilerTarget],
983
+ ],
984
+ [
985
+ ["js.cmj", "js.cmi"],
986
+ "js.ml",
987
+ "cc",
988
+ ninjaCwd,
989
+ [["bsc_flags", "$bsc_primitive_flags"]],
990
+ [],
991
+ [compilerTarget],
992
+ ],
993
+ [
994
+ ["belt_internals.cmi"],
995
+ "belt_internals.mli",
996
+ "cc",
997
+ ninjaCwd,
998
+ [["bsc_flags", "$bsc_primitive_flags"]],
999
+ [],
1000
+ [compilerTarget],
1001
+ ],
1002
+ [
1003
+ ["node.cmj", "node.cmi"],
1004
+ "node.ml",
1005
+ "cc",
1006
+ ninjaCwd,
1007
+ [], // depends on belt_internals
1008
+ [],
1009
+ [compilerTarget, fileTarget("js.cmi"), fileTarget("belt_internals.cmi")], // need js.cm*
1010
+ ],
1011
+ ])}
1012
+ `;
1013
+ var othersDirFiles = fs.readdirSync(othersDir, "ascii");
1014
+ var jsPrefixSourceFiles = othersDirFiles.filter(
1015
+ x =>
1016
+ x.startsWith("js") &&
1017
+ (x.endsWith(".ml") || x.endsWith(".mli")) &&
1018
+ !x.includes(".cppo") &&
1019
+ !x.includes(".pp") &&
1020
+ !x.includes("#") &&
1021
+ x !== "js.ml"
1022
+ );
1023
+ var othersFiles = othersDirFiles.filter(
1024
+ x =>
1025
+ !x.startsWith("js") &&
1026
+ x !== "belt.ml" &&
1027
+ x !== "belt_internals.mli" &&
1028
+ x !== "node.ml" &&
1029
+ (x.endsWith(".ml") || x.endsWith(".mli")) &&
1030
+ !x.includes("#") &&
1031
+ !x.includes(".cppo") // we have node ..
1032
+ );
1033
+ var jsTargets = collectTarget(jsPrefixSourceFiles);
1034
+ var allJsTargets = scanFileTargets(jsTargets, []);
1035
+ let jsDepsMap = new Map();
1036
+ let depsMap = new Map();
1037
+ await Promise.all([
1038
+ ocamlDepForBscAsync(jsPrefixSourceFiles, othersDir, jsDepsMap),
1039
+ ocamlDepForBscAsync(othersFiles, othersDir, depsMap),
1040
+ ]);
1041
+ var jsOutput = generateNinja(jsDepsMap, jsTargets, ninjaCwd, externalDeps);
1042
+ jsOutput.push(phony(js_package, fileTargets(allJsTargets), ninjaCwd));
1043
+
1044
+ // Note compiling belt.ml still try to read
1045
+ // belt_xx.cmi we need enforce the order to
1046
+ // avoid data race issues
1047
+ var beltPackage = fileTarget("belt.cmi");
1048
+ var nodePackage = fileTarget("node.cmi");
1049
+ var beltTargets = collectTarget(othersFiles);
1050
+ depsMap.forEach((s, k) => {
1051
+ if (k.startsWith("belt")) {
1052
+ s.add(beltPackage);
1053
+ } else if (k.startsWith("node")) {
1054
+ s.add(nodePackage);
1055
+ }
1056
+ s.add(js_package);
1057
+ });
1058
+ var allOthersTarget = scanFileTargets(beltTargets, []);
1059
+ var beltOutput = generateNinja(depsMap, beltTargets, ninjaCwd, externalDeps);
1060
+ beltOutput.push(phony(othersTarget, fileTargets(allOthersTarget), ninjaCwd));
1061
+ // ninjaBuild([`belt_HashSetString.ml`,])
1062
+ writeFileAscii(
1063
+ path.join(othersDir, ninjaOutput),
1064
+ templateOthersRules +
1065
+ jsOutput.join("\n") +
1066
+ "\n" +
1067
+ beltOutput.join("\n") +
1068
+ "\n"
1069
+ );
1070
+ }
1071
+ /**
1072
+ *
1073
+ * @param {boolean} devmode
1074
+ * generate build.ninja/release.ninja for stdlib-402
1075
+ */
1076
+ async function stdlibNinja(devmode = true) {
1077
+ var stdlibVersion = "stdlib-406";
1078
+ var ninjaCwd = stdlibVersion;
1079
+ var stdlibDir = path.join(jscompDir, stdlibVersion);
1080
+ var compilerTarget = pseudoTarget("$bsc");
1081
+ var externalDeps = [compilerTarget, othersTarget];
1082
+ var ninjaOutput = devmode ? "build.ninja" : "release.ninja";
1083
+ var bsc_flags = "bsc_flags";
1084
+ /**
1085
+ * @type [string,string][]
1086
+ */
1087
+ var bsc_builtin_overrides = [[bsc_flags, `$${bsc_flags} -nopervasives`]];
1088
+ // It is interesting `-w -a` would generate not great code sometimes
1089
+ // deprecations diabled due to string_of_float
1090
+ var warnings = "-w -9-3-106 -warn-error A";
1091
+ var templateStdlibRules = `
1092
+ ${bsc_flags} = ${commonBsFlags} -bs-cross-module-opt -make-runtime ${warnings} -I others
1093
+ ${ruleCC(ninjaCwd)}
1094
+ ${ninjaQuickBuidList([
1095
+ // we make it still depends on external
1096
+ // to enjoy free ride on dev config for compiler-deps
1097
+
1098
+ [
1099
+ "pervasives.cmj",
1100
+ "pervasives.ml",
1101
+ "cc_cmi",
1102
+ ninjaCwd,
1103
+ bsc_builtin_overrides,
1104
+ "pervasives.cmi",
1105
+ externalDeps,
1106
+ ],
1107
+ [
1108
+ "pervasives.cmi",
1109
+ "pervasives.mli",
1110
+ "cc",
1111
+ ninjaCwd,
1112
+ bsc_builtin_overrides,
1113
+ [],
1114
+ externalDeps,
1115
+ ],
1116
+ ])}
1117
+ `;
1118
+ var stdlibDirFiles = fs.readdirSync(stdlibDir, "ascii");
1119
+ var sources = stdlibDirFiles.filter(x => {
1120
+ return (
1121
+ !x.startsWith("pervasives") && (x.endsWith(".ml") || x.endsWith(".mli"))
1122
+ );
1123
+ });
1124
+ let depsMap = new Map();
1125
+ await ocamlDepForBscAsync(sources, stdlibDir, depsMap);
1126
+ var targets = collectTarget(sources);
1127
+ var allTargets = scanFileTargets(targets, [
1128
+ "pervasives.cmi",
1129
+ "pervasives.cmj",
1130
+ ]);
1131
+ targets.forEach((ext, mod) => {
1132
+ switch (ext) {
1133
+ case "HAS_MLI":
1134
+ case "HAS_BOTH":
1135
+ updateDepsKVByFile(mod + ".cmi", "pervasives.cmj", depsMap);
1136
+ break;
1137
+ case "HAS_ML":
1138
+ updateDepsKVByFile(mod + ".cmj", "pervasives.cmj", depsMap);
1139
+ break;
1140
+ }
1141
+ });
1142
+ var output = generateNinja(depsMap, targets, ninjaCwd, externalDeps);
1143
+ output.push(phony(stdlibTarget, fileTargets(allTargets), ninjaCwd));
1144
+
1145
+ writeFileAscii(
1146
+ path.join(stdlibDir, ninjaOutput),
1147
+ templateStdlibRules + output.join("\n") + "\n"
1148
+ );
1149
+ }
1150
+
1151
+ /**
1152
+ *
1153
+ * @param {string} text
1154
+ */
1155
+ function getDeps(text) {
1156
+ /**
1157
+ * @type {string[]}
1158
+ */
1159
+ var deps = [];
1160
+ text.replace(
1161
+ /(\/\*[\w\W]*?\*\/|\/\/[^\n]*|[.$]r)|\brequire\s*\(\s*["']([^"']*)["']\s*\)/g,
1162
+ function (_, ignore, id) {
1163
+ if (!ignore) deps.push(id);
1164
+ return ""; // TODO: examine the regex
1165
+ }
1166
+ );
1167
+ return deps;
1168
+ }
1169
+
1170
+ /**
1171
+ *
1172
+ * @param {string} x
1173
+ * @param {string} newExt
1174
+ * @example
1175
+ *
1176
+ * ```js
1177
+ * replaceExt('xx.cmj', '.a') // return 'xx.a'
1178
+ * ```
1179
+ *
1180
+ */
1181
+ function replaceExt(x, newExt) {
1182
+ let index = x.lastIndexOf(".");
1183
+ if (index < 0) {
1184
+ return x;
1185
+ }
1186
+ return x.slice(0, index) + newExt;
1187
+ }
1188
+ /**
1189
+ *
1190
+ * @param {string} x
1191
+ */
1192
+ function baseName(x) {
1193
+ return x.substr(0, x.indexOf("."));
1194
+ }
1195
+
1196
+ /**
1197
+ *
1198
+ * @returns {Promise<void>}
1199
+ */
1200
+ async function testNinja() {
1201
+ var ninjaOutput = "build.ninja";
1202
+ var ninjaCwd = `test`;
1203
+ var templateTestRules = `
1204
+ bsc_flags = -bs-no-version-header -bs-cross-module-opt -make-runtime-test -bs-package-output commonjs:jscomp/test -w -3-6-26-27-29-30-32..40-44-45-52-60-9-106+104 -warn-error A -I runtime -I $stdlib -I others
1205
+ ${ruleCC(ninjaCwd)}
1206
+
1207
+
1208
+ ${mllRule}
1209
+ ${mllList(ninjaCwd, [
1210
+ "arith_lexer.mll",
1211
+ "number_lexer.mll",
1212
+ "simple_lexer_test.mll",
1213
+ ])}
1214
+ `;
1215
+ var testDirFiles = fs.readdirSync(testDir, "ascii");
1216
+ var sources = testDirFiles.filter(x => {
1217
+ return (
1218
+ x.endsWith(".re") ||
1219
+ x.endsWith(".rei") ||
1220
+ x.endsWith(".resi") ||
1221
+ x.endsWith(".res") ||
1222
+ ((x.endsWith(".ml") || x.endsWith(".mli")) && !x.endsWith("bspack.ml"))
1223
+ );
1224
+ });
1225
+
1226
+ let depsMap = createDepsMapWithTargets(sources);
1227
+ await Promise.all(depModulesForBscAsync(sources, testDir, depsMap));
1228
+ var targets = collectTarget(sources);
1229
+ var output = generateNinja(depsMap, targets, ninjaCwd, [
1230
+ runtimeTarget,
1231
+ stdlibTarget,
1232
+ pseudoTarget("$bsc"),
1233
+ ]);
1234
+ output.push(
1235
+ phony(
1236
+ pseudoTarget("test"),
1237
+ fileTargets(scanFileTargets(targets, [])),
1238
+ ninjaCwd
1239
+ )
1240
+ );
1241
+ writeFileAscii(
1242
+ path.join(testDir, ninjaOutput),
1243
+ templateTestRules + output.join("\n") + "\n"
1244
+ );
1245
+ }
1246
+
1247
+ /**
1248
+ *
1249
+ * @param {DepsMap} depsMap
1250
+ */
1251
+ function runJSCheckAsync(depsMap) {
1252
+ return new Promise(resolve => {
1253
+ var count = 0;
1254
+ var tasks = runtimeJsFiles.length;
1255
+ var updateTick = () => {
1256
+ count++;
1257
+ if (count === tasks) {
1258
+ resolve(count);
1259
+ }
1260
+ };
1261
+ runtimeJsFiles.forEach(name => {
1262
+ var jsFile = path.join(jsDir, name + ".js");
1263
+ fs.readFile(jsFile, "utf8", function (err, fileContent) {
1264
+ if (err === null) {
1265
+ var deps = getDeps(fileContent).map(x => path.parse(x).name + ".cmj");
1266
+ fs.exists(path.join(runtimeDir, name + ".mli"), exist => {
1267
+ if (exist) {
1268
+ deps.push(name + ".cmi");
1269
+ }
1270
+ updateDepsKVsByFile(`${name}.cmj`, deps, depsMap);
1271
+ updateTick();
1272
+ });
1273
+ } else {
1274
+ // file non exist or reading error ignore
1275
+ updateTick();
1276
+ }
1277
+ });
1278
+ });
1279
+ });
1280
+ }
1281
+
1282
+ function checkEffect() {
1283
+ var jsPaths = runtimeJsFiles.map(x => path.join(jsDir, x + ".js"));
1284
+ var effect = jsPaths
1285
+ .map(x => {
1286
+ return {
1287
+ file: x,
1288
+ content: fs.readFileSync(x, "utf8"),
1289
+ };
1290
+ })
1291
+ .map(({ file, content: x }) => {
1292
+ if (/No side effect|This output is empty/.test(x)) {
1293
+ return {
1294
+ file,
1295
+ effect: "pure",
1296
+ };
1297
+ } else if (/Not a pure module/.test(x)) {
1298
+ return {
1299
+ file,
1300
+ effect: "false",
1301
+ };
1302
+ } else {
1303
+ return {
1304
+ file,
1305
+ effect: "unknown",
1306
+ };
1307
+ }
1308
+ })
1309
+ .filter(({ effect }) => effect !== "pure")
1310
+ .map(({ file, effect }) => {
1311
+ return { file: path.basename(file), effect };
1312
+ });
1313
+
1314
+ var black_list = new Set([
1315
+ "caml_int32.js",
1316
+ "caml_int64.js",
1317
+ "caml_lexer.js",
1318
+ "caml_parser.js",
1319
+ ]);
1320
+
1321
+ var assert = require("assert");
1322
+ // @ts-ignore
1323
+ assert(
1324
+ effect.length === black_list.size &&
1325
+ effect.every(x => black_list.has(x.file))
1326
+ );
1327
+
1328
+ console.log(effect);
1329
+ }
1330
+
1331
+ /**
1332
+ *
1333
+ * @param {string[]} domain
1334
+ * @param {Map<string,Set<string>>} dependency_graph
1335
+ * @returns {string[]}
1336
+ */
1337
+ function sortFilesByDeps(domain, dependency_graph) {
1338
+ /**
1339
+ * @type{string[]}
1340
+ */
1341
+ var result = [];
1342
+ var workList = new Set(domain);
1343
+ /**
1344
+ *
1345
+ * @param {Set<string>} visiting
1346
+ * @param {string[]} path
1347
+ * @param {string} current
1348
+ */
1349
+ var visit = function (visiting, path, current) {
1350
+ if (visiting.has(current)) {
1351
+ throw new Error(`cycle: ${path.concat(current).join(" ")}`);
1352
+ }
1353
+ if (workList.has(current)) {
1354
+ visiting.add(current);
1355
+ var next = dependency_graph.get(current);
1356
+ if (next !== undefined && next.size > 0) {
1357
+ next.forEach(x => {
1358
+ visit(visiting, path.concat(current), x);
1359
+ });
1360
+ }
1361
+ visiting.delete(current);
1362
+ workList.delete(current);
1363
+ result.push(current);
1364
+ }
1365
+ };
1366
+ while (workList.size > 0) {
1367
+ visit(new Set(), [], workList.values().next().value);
1368
+ }
1369
+ return result;
1370
+ }
1371
+
1372
+ function updateRelease() {
1373
+ runtimeNinja(false);
1374
+ stdlibNinja(false);
1375
+ othersNinja(false);
1376
+ }
1377
+
1378
+ function updateDev() {
1379
+ writeFileAscii(
1380
+ path.join(jscompDir, "build.ninja"),
1381
+ `
1382
+ subninja compiler.ninja
1383
+ stdlib = stdlib-406
1384
+ ${BSC_COMPILER}
1385
+ ocamllex = ocamllex.opt
1386
+ subninja runtime/build.ninja
1387
+ subninja others/build.ninja
1388
+ subninja $stdlib/build.ninja
1389
+ subninja test/build.ninja
1390
+ o all: phony runtime others $stdlib test
1391
+ `
1392
+ );
1393
+ writeFileAscii(
1394
+ path.join(jscompDir, "..", "lib", "build.ninja"),
1395
+ `
1396
+ ocamlopt = ocamlopt.opt
1397
+ ext = exe
1398
+ INCL= "4.06.1+BS"
1399
+ include body.ninja
1400
+ `
1401
+ );
1402
+
1403
+ preprocessorNinjaSync(); // This is needed so that ocamldep makes sense
1404
+ nativeNinja();
1405
+ runtimeNinja();
1406
+ stdlibNinja(true);
1407
+ if (fs.existsSync(bsc_exe)) {
1408
+ testNinja();
1409
+ }
1410
+ othersNinja();
1411
+ }
1412
+ exports.updateDev = updateDev;
1413
+ exports.updateRelease = updateRelease;
1414
+
1415
+ /**
1416
+ *
1417
+ * @param {string} dir
1418
+ */
1419
+ function readdirSync(dir) {
1420
+ return fs.readdirSync(dir, "ascii");
1421
+ }
1422
+ /**
1423
+ * @type {string[]}
1424
+ */
1425
+ var black_list = [];
1426
+ /**
1427
+ *
1428
+ * @param {string} dir
1429
+ */
1430
+ function test(dir) {
1431
+ return readdirSync(path.join(jscompDir, dir))
1432
+ .filter(x => {
1433
+ return (
1434
+ (x.endsWith(".ml") || x.endsWith(".mli")) &&
1435
+ !(x.endsWith(".cppo.ml") || x.endsWith(".cppo.mli")) &&
1436
+ !(x.endsWith(".pp.ml") || x.endsWith(".pp.mli")) &&
1437
+ !black_list.some(name => x.includes(name))
1438
+ );
1439
+ })
1440
+ .map(x => path.join(dir, x));
1441
+ }
1442
+
1443
+ /**
1444
+ *
1445
+ * @param {Set<string>} xs
1446
+ * @returns {string}
1447
+ */
1448
+ function setSortedToStringAsNativeDeps(xs) {
1449
+ var arr = Array.from(xs).sort();
1450
+ // it relies on we have -opaque, so that .cmx is dummy file
1451
+ return arr.join(" ").replace(/\.cmx/g, ".cmi");
1452
+ }
1453
+
1454
+ /**
1455
+ * Built cppo.exe refmt.exe etc for dev purpose
1456
+ */
1457
+ function preprocessorNinjaSync() {
1458
+ var napkinFiles = fs
1459
+ .readdirSync(path.join(jscompDir, "..", "syntax", "src"), "ascii")
1460
+ .filter(x => x.endsWith(".ml") || x.endsWith(".mli"));
1461
+ var napkinCliFiles = fs
1462
+ .readdirSync(path.join(jscompDir, "..", "syntax", "cli"), "ascii")
1463
+ .filter(x => x.endsWith(".ml") || x.endsWith(".mli"));
1464
+ var buildNapkinFiles = napkinFiles
1465
+ .map(file => `o napkin/${file} : copy ../syntax/src/${file}`)
1466
+ .join("\n");
1467
+ var buildNapkinCliFiles = napkinCliFiles
1468
+ .map(file => `o napkin/${file} : copy ../syntax/cli/${file}`)
1469
+ .join("\n");
1470
+ var cppoNative = `
1471
+ ocamlopt = ocamlopt.opt
1472
+ ocamllex = ocamllex.opt
1473
+ ocamlc = ocamlc.opt
1474
+ ocamlmklib = ocamlmklib
1475
+ ocaml = ocaml
1476
+ ocamlyacc = ocamlyacc
1477
+ rule link
1478
+ command = $ocamlopt -g $flags $libs $in -o $out
1479
+ rule bytelink
1480
+ command = $ocamlc -g $flags $libs $in -o $out
1481
+ o ${cppoFile}: link ${cppoMonoFile}
1482
+ libs = unix.cmxa str.cmxa
1483
+ generator = true
1484
+ ${cppoRule()}
1485
+ ${cppoList("ext", [
1486
+ ["hash_set_string.ml", "hash_set.cppo.ml", dTypeString],
1487
+ ["hash_set_int.ml", "hash_set.cppo.ml", dTypeInt],
1488
+ ["hash_set_ident.ml", "hash_set.cppo.ml", dTypeIdent],
1489
+ ["hash_set.ml", "hash_set.cppo.ml", dTypeFunctor],
1490
+ ["hash_set_poly.ml", "hash_set.cppo.ml", dTypePoly],
1491
+ ["vec_int.ml", "vec.cppo.ml", dTypeInt],
1492
+ ["vec.ml", "vec.cppo.ml", dTypeFunctor],
1493
+ ["set_string.ml", "set.cppo.ml", dTypeString],
1494
+ ["set_int.ml", "set.cppo.ml", dTypeInt],
1495
+ ["set_ident.ml", "set.cppo.ml", dTypeIdent],
1496
+ ["map_string.ml", "map.cppo.ml", dTypeString],
1497
+ ["map_int.ml", "map.cppo.ml", dTypeInt],
1498
+ ["map_ident.ml", "map.cppo.ml", dTypeIdent],
1499
+ [
1500
+ "ordered_hash_map_local_ident.ml",
1501
+ "ordered_hash_map.cppo.ml",
1502
+ dTypeLocalIdent,
1503
+ ],
1504
+ ["hash_string.ml", "hash.cppo.ml", dTypeString],
1505
+ ["hash_int.ml", "hash.cppo.ml", dTypeInt],
1506
+ ["hash_ident.ml", "hash.cppo.ml", dTypeIdent],
1507
+ ["hash.ml", "hash.cppo.ml", dTypeFunctor],
1508
+ ["ext_string.ml", "ext_string.pp.ml"],
1509
+ ["ext_string.mli", "ext_string.pp.mli"],
1510
+ ["ext_sys.ml", "ext_sys.pp.ml"],
1511
+ ])}
1512
+ ${cppoList("stubs", [["bs_hash_stubs.ml", "bs_hash_stubs.pp.ml"]])}
1513
+ ${cppoList("ml", [
1514
+ ["cmt_format.ml", "cmt_format.pp.ml"],
1515
+ ["pprintast.ml", "pprintast.pp.ml"],
1516
+ ])}
1517
+ ${cppoList("common", [["js_config.ml", "js_config.pp.ml"]])}
1518
+ ${cppoList("frontend", [["external_ffi_types.ml", "external_ffi_types.pp.ml"]])}
1519
+ ${cppoList("core", [
1520
+ ["lam_compile_main.ml", "lam_compile_main.pp.ml"],
1521
+ ["bs_cmi_load.ml", "bs_cmi_load.pp.ml"],
1522
+ ["bs_conditional_initial.ml", "bs_conditional_initial.pp.ml"],
1523
+ ["js_cmj_load.ml", "js_cmj_load.pp.ml"],
1524
+ ["js_name_of_module_id.ml", "js_name_of_module_id.pp.ml"],
1525
+ ["js_pass_debug.ml", "js_pass_debug.pp.ml"],
1526
+ ["lam_pass_lets_dce.ml", "lam_pass_lets_dce.pp.ml"],
1527
+ ["lam_util.ml", "lam_util.pp.ml"],
1528
+ ])}
1529
+ ${cppoList("others", [
1530
+ ["belt_HashSetString.ml", "hashset.cppo.ml", dTypeString],
1531
+ ["belt_HashSetString.mli", "hashset.cppo.mli", dTypeString],
1532
+ ["belt_HashSetInt.ml", "hashset.cppo.ml", dTypeInt],
1533
+ ["belt_HashSetInt.mli", "hashset.cppo.mli", dTypeInt],
1534
+ ["belt_HashMapString.ml", "hashmap.cppo.ml", dTypeString],
1535
+ ["belt_HashMapString.mli", "hashmap.cppo.mli", dTypeString],
1536
+ ["belt_HashMapInt.ml", "hashmap.cppo.ml", dTypeInt],
1537
+ ["belt_HashMapInt.mli", "hashmap.cppo.mli", dTypeInt],
1538
+ ["belt_MapString.ml", "map.cppo.ml", dTypeString],
1539
+ ["belt_MapString.mli", "map.cppo.mli", dTypeString],
1540
+ ["belt_MapInt.ml", "map.cppo.ml", dTypeInt],
1541
+ ["belt_MapInt.mli", "map.cppo.mli", dTypeInt],
1542
+ ["belt_SetString.ml", "belt_Set.cppo.ml", dTypeString],
1543
+ ["belt_SetString.mli", "belt_Set.cppo.mli", dTypeString],
1544
+ ["belt_SetInt.ml", "belt_Set.cppo.ml", dTypeInt],
1545
+ ["belt_SetInt.mli", "belt_Set.cppo.mli", dTypeInt],
1546
+ ["belt_MutableMapString.ml", "mapm.cppo.ml", dTypeString],
1547
+ ["belt_MutableMapString.mli", "mapm.cppo.mli", dTypeString],
1548
+ ["belt_MutableMapInt.ml", "mapm.cppo.ml", dTypeInt],
1549
+ ["belt_MutableMapInt.mli", "mapm.cppo.mli", dTypeInt],
1550
+ ["belt_MutableSetString.ml", "setm.cppo.ml", dTypeString],
1551
+ ["belt_MutableSetString.mli", "setm.cppo.mli", dTypeString],
1552
+ ["belt_MutableSetInt.ml", "setm.cppo.ml", dTypeInt],
1553
+ ["belt_MutableSetInt.mli", "setm.cppo.mli", dTypeInt],
1554
+ ["belt_SortArrayString.ml", "sort.cppo.ml", dTypeString],
1555
+ ["belt_SortArrayString.mli", "sort.cppo.mli", dTypeString],
1556
+ ["belt_SortArrayInt.ml", "sort.cppo.ml", dTypeInt],
1557
+ ["belt_SortArrayInt.mli", "sort.cppo.mli", dTypeInt],
1558
+ ["belt_internalMapString.ml", "internal_map.cppo.ml", dTypeString],
1559
+ ["belt_internalMapInt.ml", "internal_map.cppo.ml", dTypeInt],
1560
+ ["belt_internalSetString.ml", "internal_set.cppo.ml", dTypeString],
1561
+ ["belt_internalSetInt.ml", "internal_set.cppo.ml", dTypeInt],
1562
+ ["js_typed_array.ml", "js_typed_array.cppo.ml", ""],
1563
+ ["js_typed_array2.ml", "js_typed_array2.cppo.ml", ""],
1564
+ ])}
1565
+
1566
+ ${mllRule}
1567
+ ${mllList("ext", ["ext_json_parse.mll"])}
1568
+ ${mllList("ml", ["lexer.mll"])}
1569
+ rule copy
1570
+ command = cp $in $out
1571
+ description = $in -> $out
1572
+ ${buildNapkinFiles}
1573
+ ${buildNapkinCliFiles}
1574
+ `;
1575
+ var cppoNinjaFile = "cppoVendor.ninja";
1576
+ writeFileSync(path.join(jscompDir, cppoNinjaFile), cppoNative);
1577
+ cp.execFileSync(vendorNinjaPath, ["-f", cppoNinjaFile, "--verbose", "-v"], {
1578
+ cwd: jscompDir,
1579
+ stdio: [0, 1, 2],
1580
+ encoding: "utf8",
1581
+ });
1582
+ }
1583
+
1584
+ var sourceDirs = [
1585
+ "bsb",
1586
+ "bsb_helper",
1587
+ "common",
1588
+ "core",
1589
+ "depends",
1590
+ "frontend",
1591
+ "gentype",
1592
+ "js_parser",
1593
+ "ext",
1594
+ "main",
1595
+ "ml",
1596
+ "ounit",
1597
+ "ounit_tests",
1598
+ "outcome_printer",
1599
+ "napkin",
1600
+ "stubs",
1601
+ "super_errors",
1602
+ ];
1603
+ /**
1604
+ *
1605
+ * @param {string[]} dirs
1606
+ */
1607
+ function makeLibs(dirs) {
1608
+ return dirs.map(x => `${x}/${x}.cmxa`).join(" ");
1609
+ }
1610
+ var compiler_libs = ["ml"];
1611
+ var bsc_libs = [
1612
+ "stubs",
1613
+ "ext",
1614
+ ...compiler_libs,
1615
+ "js_parser",
1616
+ "napkin",
1617
+ "common",
1618
+ "frontend",
1619
+ "depends",
1620
+ "gentype",
1621
+ "super_errors",
1622
+ "outcome_printer",
1623
+ "core",
1624
+ ];
1625
+
1626
+ var bsb_helper_libs = ["stubs", "ext", "common", "bsb_helper"];
1627
+
1628
+ var rescript_libs = ["stubs", "ext", "common", "bsb"];
1629
+
1630
+ var cmjdumps_libs = [
1631
+ "stubs",
1632
+ ...compiler_libs,
1633
+ "ext",
1634
+ "common",
1635
+ "frontend",
1636
+ "depends",
1637
+ "core",
1638
+ ];
1639
+
1640
+ var cmij_libs = [
1641
+ "stubs",
1642
+ "ext",
1643
+ ...compiler_libs,
1644
+ "common",
1645
+ "frontend",
1646
+ "depends",
1647
+ "core",
1648
+ ];
1649
+
1650
+ var tests_libs = [
1651
+ "stubs",
1652
+ "ext",
1653
+ ...compiler_libs,
1654
+ "ounit",
1655
+ "common",
1656
+ "frontend",
1657
+ "depends",
1658
+ "bsb",
1659
+ "bsb_helper",
1660
+ "core",
1661
+ "ounit_tests",
1662
+ ];
1663
+ /**
1664
+ * Note don't run `ninja -t clean -g`
1665
+ * Since it will remove generated ml file which has
1666
+ * an effect on depfile
1667
+ */
1668
+ function nativeNinja() {
1669
+ var ninjaOutput = "compiler.ninja";
1670
+
1671
+ var includes = sourceDirs.map(x => `-I ${x}`).join(" ");
1672
+
1673
+ var flags = "-w A-4-9-40..42-30-48-50-44-45";
1674
+ var minor_version = +getVersionString().split(".")[1];
1675
+ if (minor_version > 12) {
1676
+ flags += "-69-70"; // we should turn -69 on except for vendored files
1677
+ }
1678
+ if (minor_version > 7) {
1679
+ flags += "-3-67 -error-style short";
1680
+ }
1681
+ var templateNative = `
1682
+ ocamlopt = ocamlopt.opt
1683
+ ocamllex = ocamllex.opt
1684
+ ocamlc = ocamlc.opt
1685
+ ocamlmklib = ocamlmklib
1686
+ ocaml = ocaml
1687
+ ocamlyacc = ocamlyacc
1688
+ subninja cppoVendor.ninja
1689
+
1690
+ rule optc
1691
+ command = $ocamlopt -bin-annot -strict-sequence -safe-string -opaque ${includes} -g -linscan ${flags} -warn-error A -absname -c $in
1692
+ description = $out : $in
1693
+ rule archive
1694
+ command = $ocamlopt -a $in -o $out
1695
+ description = arcive -> $out
1696
+ rule link
1697
+ command = $ocamlopt -g $flags $libs $in -o $out
1698
+ description = linking -> $out
1699
+ rule mk_bsversion
1700
+ command = node $in
1701
+ generator = true
1702
+ rule gcc
1703
+ command = $ocamlopt -ccopt -fPIC -ccopt -O2 -ccopt -o -ccopt $out -c $in
1704
+ o stubs/ext_basic_hash_stubs.o : gcc stubs/ext_basic_hash_stubs.c
1705
+ rule ocamlmklib
1706
+ command = $ocamlmklib -v $in -o $name && touch $out
1707
+
1708
+ rule mk_keywords
1709
+ command = $ocaml $in
1710
+ generator = true
1711
+ o ext/js_reserved_map.ml: mk_keywords ../scripts/build_sorted.ml keywords.list
1712
+
1713
+ o stubs/libbs_hash.a stubs/dllbs_hash.so: ocamlmklib stubs/ext_basic_hash_stubs.o
1714
+ name = stubs/bs_hash
1715
+ rule stubslib
1716
+ command = $ocamlopt -a $ml -o $out -cclib $clib
1717
+ o stubs/stubs.cmxa : stubslib stubs/bs_hash_stubs.cmx stubs/libbs_hash.a
1718
+ ml = stubs/bs_hash_stubs.cmx
1719
+ clib = stubs/libbs_hash.a
1720
+
1721
+ rule p4of
1722
+ command = node ../ocaml-tree/wasm.js $flags -i $i -o $out
1723
+ generator = true
1724
+ o core/js_fold.ml: p4of core/j.ml
1725
+ flags = -fold
1726
+ o core/js_record_iter.ml: p4of core/j.ml
1727
+ flags = -record-iter
1728
+ o core/js_record_map.ml: p4of core/j.ml
1729
+ flags = -record-map
1730
+ o core/js_record_fold.ml: p4of core/j.ml
1731
+ flags = -record-fold
1732
+
1733
+ o ${my_target}/bsc.exe: link ${makeLibs(
1734
+ bsc_libs
1735
+ )} main/rescript_compiler_main.cmx
1736
+ libs = unix.cmxa str.cmxa
1737
+ o ${my_target}/rescript.exe: link ${makeLibs(
1738
+ rescript_libs
1739
+ )} main/rescript_main.cmx
1740
+ libs = unix.cmxa str.cmxa
1741
+ o ${my_target}/bsb_helper.exe: link ${makeLibs(
1742
+ bsb_helper_libs
1743
+ )} main/bsb_helper_main.cmx
1744
+ libs = unix.cmxa str.cmxa
1745
+ o ./bin/bspack.exe: link ./main/bspack_main.cmx
1746
+ libs = unix.cmxa
1747
+ flags = -I ./bin -w -40-30-50
1748
+ o ./bin/cmjdump.exe: link ${makeLibs(cmjdumps_libs)} main/cmjdump_main.cmx
1749
+
1750
+ o ./bin/cmij.exe: link ${makeLibs(cmij_libs)} main/cmij_main.cmx
1751
+
1752
+ o ./bin/tests.exe: link ${makeLibs(tests_libs)} main/ounit_tests_main.cmx
1753
+ libs = str.cmxa unix.cmxa
1754
+ build native: phony ${my_target}/bsc.exe ${my_target}/rescript.exe ${my_target}/bsb_helper.exe ./bin/bspack.exe ./bin/cmjdump.exe ./bin/cmij.exe ./bin/tests.exe
1755
+
1756
+
1757
+ ${mllRule}
1758
+ ${mlyRule}
1759
+
1760
+
1761
+ ${mlyList("ml", ["parser.mly"])}
1762
+ rule mk_shared
1763
+ command = $ocamlopt -I +compiler-libs -shared $flags -o $out $in
1764
+ o ../odoc_gen/generator.cmxs : mk_shared ../odoc_gen/generator.mli ../odoc_gen/generator.ml
1765
+ flags = -I +ocamldoc -I ../odoc_gen -absname
1766
+ `;
1767
+ /**
1768
+ * @type { {name : string, libs: string[]}[]}
1769
+ */
1770
+ var libs = [];
1771
+ sourceDirs.forEach(name => {
1772
+ if (name !== "main" && name !== "stubs") {
1773
+ libs.push({ name, libs: [] });
1774
+ }
1775
+ });
1776
+
1777
+ /**
1778
+ * @type{string[]}
1779
+ */
1780
+ var files = [];
1781
+ for (let dir of sourceDirs) {
1782
+ files = files.concat(test(dir));
1783
+ }
1784
+
1785
+ cp.exec(
1786
+ `ocamldep.opt -allow-approx -one-line -native ${includes} ${files.join(
1787
+ " "
1788
+ )}`,
1789
+ { cwd: jscompDir, encoding: "ascii" },
1790
+ function (error, out) {
1791
+ if (error !== null) {
1792
+ throw error;
1793
+ }
1794
+ /**
1795
+ * @type {Map<string,Set<string>>}
1796
+ */
1797
+ var map = new Map();
1798
+
1799
+ var pairs = out.split("\n").map(x => x.split(":").map(x => x.trim()));
1800
+ pairs.forEach(pair => {
1801
+ /**
1802
+ * @type {string[]|string}
1803
+ */
1804
+
1805
+ var deps;
1806
+ var key = pair[0];
1807
+ if (pair[1] !== undefined && (deps = pair[1].trim())) {
1808
+ // deps = deps.replace(/.cmx/g, ".cmi");
1809
+ deps = deps.split(" ");
1810
+ map.set(key, new Set(deps));
1811
+ }
1812
+ if (key.endsWith("cmx")) {
1813
+ libs.forEach(x => {
1814
+ if (path.dirname(key) === x.name) {
1815
+ x.libs.push(key);
1816
+ }
1817
+ });
1818
+ }
1819
+ });
1820
+
1821
+ // not ocamldep output
1822
+ // when no mli exists no deps for cmi otherwise add cmi
1823
+ var stmts = pairs.map(pair => {
1824
+ if (pair[0]) {
1825
+ var target = pair[0];
1826
+ var y = path.parse(target);
1827
+ /**
1828
+ * @type {Set<string>}
1829
+ */
1830
+ var deps = map.get(target) || new Set();
1831
+ if (y.ext === ".cmx") {
1832
+ var intf = path.join(y.dir, y.name + ".cmi");
1833
+ var ml = path.join(y.dir, y.name + ".ml");
1834
+ return `o ${
1835
+ deps.has(intf) ? target : [target, intf].join(" ")
1836
+ } : optc ${ml} | ${setSortedToStringAsNativeDeps(deps)}`;
1837
+ } else {
1838
+ // === 'cmi'
1839
+ var mli = path.join(y.dir, y.name + ".mli");
1840
+ return `o ${target} : optc ${mli} | ${setSortedToStringAsNativeDeps(
1841
+ deps
1842
+ )}`;
1843
+ }
1844
+ }
1845
+ });
1846
+ libs.forEach(x => {
1847
+ var output = sortFilesByDeps(x.libs, map);
1848
+ var name = x.name;
1849
+ stmts.push(`o ${name}/${name}.cmxa : archive ${output.join(" ")}`);
1850
+ });
1851
+
1852
+ writeFileAscii(
1853
+ path.join(jscompDir, ninjaOutput),
1854
+ templateNative + stmts.join("\n") + "\n"
1855
+ );
1856
+ }
1857
+ );
1858
+ }
1859
+
1860
+ function main() {
1861
+ var emptyCount = 2;
1862
+ var isPlayground = false;
1863
+ if (require.main === module) {
1864
+ if (process.argv.includes("-check")) {
1865
+ checkEffect();
1866
+ }
1867
+ if (process.argv.includes("-playground")) {
1868
+ isPlayground = true;
1869
+ emptyCount++;
1870
+ }
1871
+
1872
+ var subcommand = process.argv[2];
1873
+ switch (subcommand) {
1874
+ case "build":
1875
+ try {
1876
+ cp.execFileSync(vendorNinjaPath, ["native", "all"], {
1877
+ encoding: "utf8",
1878
+ cwd: jscompDir,
1879
+ stdio: [0, 1, 2],
1880
+ });
1881
+ if (!isPlayground) {
1882
+ cp.execFileSync(
1883
+ path.join(__dirname, "..", "jscomp", "bin", "cmij.exe"),
1884
+ {
1885
+ encoding: "utf8",
1886
+ cwd: jscompDir,
1887
+ stdio: [0, 1, 2],
1888
+ }
1889
+ );
1890
+ }
1891
+ cp.execFileSync(vendorNinjaPath, ["-f", "snapshot.ninja"], {
1892
+ encoding: "utf8",
1893
+ cwd: jscompDir,
1894
+ stdio: [0, 1, 2],
1895
+ });
1896
+ } catch (e) {
1897
+ console.log(e.message);
1898
+ console.log(`please run "./scripts/ninja.js config" first`);
1899
+ process.exit(2);
1900
+ }
1901
+ cp.execSync(`node ${__filename} config`, {
1902
+ cwd: __dirname,
1903
+ stdio: [0, 1, 2],
1904
+ });
1905
+ break;
1906
+ case "clean":
1907
+ try {
1908
+ cp.execFileSync(vendorNinjaPath, ["-t", "clean"], {
1909
+ encoding: "utf8",
1910
+ cwd: jscompDir,
1911
+ stdio: [0, 1],
1912
+ });
1913
+ } catch (e) {}
1914
+ cp.execSync(
1915
+ `git clean -dfx jscomp ${my_target} lib && rm -rf lib/js/*.js && rm -rf lib/es6/*.js`,
1916
+ {
1917
+ encoding: "utf8",
1918
+ cwd: path.join(__dirname, ".."),
1919
+ stdio: [0, 1, 2],
1920
+ }
1921
+ );
1922
+ break;
1923
+ case "config":
1924
+ console.log(`config for the first time may take a while`);
1925
+ updateDev();
1926
+ updateRelease();
1927
+
1928
+ break;
1929
+ case "cleanbuild":
1930
+ console.log(`run cleaning first`);
1931
+ cp.execSync(`node ${__filename} clean`, {
1932
+ cwd: __dirname,
1933
+ stdio: [0, 1, 2],
1934
+ });
1935
+ cp.execSync(`node ${__filename} config`, {
1936
+ cwd: __dirname,
1937
+ stdio: [0, 1, 2],
1938
+ });
1939
+ cp.execSync(`node ${__filename} build`, {
1940
+ cwd: __dirname,
1941
+ stdio: [0, 1, 2],
1942
+ });
1943
+ break;
1944
+ case "docs":
1945
+ console.log(`building docs`);
1946
+ require("./doc_gen").main();
1947
+ break;
1948
+ case "help":
1949
+ console.log(`supported subcommands:
1950
+ [exe] config
1951
+ [exe] build
1952
+ [exe] cleanbuild
1953
+ [exe] docs
1954
+ [exe] help
1955
+ [exe] clean
1956
+ `);
1957
+ break;
1958
+ default:
1959
+ if (process.argv.length === emptyCount) {
1960
+ updateDev();
1961
+ updateRelease();
1962
+ } else {
1963
+ var dev = process.argv.includes("-dev");
1964
+ var release = process.argv.includes("-release");
1965
+ var all = process.argv.includes("-all");
1966
+ if (all) {
1967
+ updateDev();
1968
+ updateRelease();
1969
+ } else if (dev) {
1970
+ updateDev();
1971
+ } else if (release) {
1972
+ updateRelease();
1973
+ }
1974
+ }
1975
+ break;
1976
+ }
1977
+ }
1978
+ }
1979
+
1980
+ main();