@scriptc/runtime 0.0.0 → 0.0.2

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 (416) hide show
  1. package/LICENSE +202 -0
  2. package/package.json +16 -6
  3. package/src/scr_array.c +488 -0
  4. package/src/scr_assert.c +1393 -0
  5. package/src/scr_async.c +2593 -0
  6. package/src/scr_async_dyn.c +607 -0
  7. package/src/scr_bytes.c +1425 -0
  8. package/src/scr_bytes_io.c +161 -0
  9. package/src/scr_child.c +3587 -0
  10. package/src/scr_closure.c +214 -0
  11. package/src/scr_console.c +143 -0
  12. package/src/scr_cycle.c +218 -0
  13. package/src/scr_dc.c +805 -0
  14. package/src/scr_dgram.c +1007 -0
  15. package/src/scr_dyn_handle.c +154 -0
  16. package/src/scr_dyn_invoke.c +644 -0
  17. package/src/scr_error.c +332 -0
  18. package/src/scr_events.c +714 -0
  19. package/src/scr_events_emitter.c +699 -0
  20. package/src/scr_exception.c +242 -0
  21. package/src/scr_fetch.c +1130 -0
  22. package/src/scr_fetch_curl.c +654 -0
  23. package/src/scr_http.c +3482 -0
  24. package/src/scr_http2.c +3030 -0
  25. package/src/scr_inspect.c +803 -0
  26. package/src/scr_inspect_island.c +51 -0
  27. package/src/scr_island.c +9363 -0
  28. package/src/scr_json.c +2151 -0
  29. package/src/scr_lib.c +3612 -0
  30. package/src/scr_loop_epoll.c +241 -0
  31. package/src/scr_loop_kqueue.c +121 -0
  32. package/src/scr_loop_wsapoll.c +208 -0
  33. package/src/scr_map.c +591 -0
  34. package/src/scr_net.c +3017 -0
  35. package/src/scr_net_island.c +458 -0
  36. package/src/scr_number.c +115 -0
  37. package/src/scr_object.c +25 -0
  38. package/src/scr_path.c +1266 -0
  39. package/src/scr_platform.h +119 -0
  40. package/src/scr_readline.c +287 -0
  41. package/src/scr_regex.c +1080 -0
  42. package/src/scr_runtime.h +5046 -0
  43. package/src/scr_stream.c +2877 -0
  44. package/src/scr_string.c +1264 -0
  45. package/src/scr_symbol.c +132 -0
  46. package/src/scr_test.c +662 -0
  47. package/src/scr_tls.c +1520 -0
  48. package/src/scr_union.c +105 -0
  49. package/src/scr_url.c +911 -0
  50. package/src/scr_url_internal.h +29 -0
  51. package/src/scr_url_params.c +561 -0
  52. package/src/scr_watch.c +568 -0
  53. package/src/scr_web.c +1778 -0
  54. package/src/scr_win.c +76 -0
  55. package/src/scr_zlib.c +197 -0
  56. package/src/scr_zlib_island.c +15 -0
  57. package/vendor/README.md +52 -0
  58. package/vendor/curl/COPYRIGHT +534 -0
  59. package/vendor/curl/include/curl/curl.h +3214 -0
  60. package/vendor/curl/include/curl/curlver.h +79 -0
  61. package/vendor/curl/include/curl/easy.h +125 -0
  62. package/vendor/curl/include/curl/header.h +74 -0
  63. package/vendor/curl/include/curl/mprintf.h +52 -0
  64. package/vendor/curl/include/curl/multi.h +460 -0
  65. package/vendor/curl/include/curl/options.h +70 -0
  66. package/vendor/curl/include/curl/stdcheaders.h +35 -0
  67. package/vendor/curl/include/curl/system.h +508 -0
  68. package/vendor/curl/include/curl/typecheck-gcc.h +716 -0
  69. package/vendor/curl/include/curl/urlapi.h +149 -0
  70. package/vendor/curl/include/curl/websockets.h +84 -0
  71. package/vendor/mbedtls/LICENSE +553 -0
  72. package/vendor/mbedtls/include/CMakeLists.txt +22 -0
  73. package/vendor/mbedtls/include/mbedtls/aes.h +631 -0
  74. package/vendor/mbedtls/include/mbedtls/aria.h +343 -0
  75. package/vendor/mbedtls/include/mbedtls/asn1.h +642 -0
  76. package/vendor/mbedtls/include/mbedtls/asn1write.h +390 -0
  77. package/vendor/mbedtls/include/mbedtls/base64.h +82 -0
  78. package/vendor/mbedtls/include/mbedtls/bignum.h +1088 -0
  79. package/vendor/mbedtls/include/mbedtls/block_cipher.h +76 -0
  80. package/vendor/mbedtls/include/mbedtls/build_info.h +194 -0
  81. package/vendor/mbedtls/include/mbedtls/camellia.h +305 -0
  82. package/vendor/mbedtls/include/mbedtls/ccm.h +526 -0
  83. package/vendor/mbedtls/include/mbedtls/chacha20.h +209 -0
  84. package/vendor/mbedtls/include/mbedtls/chachapoly.h +351 -0
  85. package/vendor/mbedtls/include/mbedtls/check_config.h +1149 -0
  86. package/vendor/mbedtls/include/mbedtls/cipher.h +1250 -0
  87. package/vendor/mbedtls/include/mbedtls/cmac.h +246 -0
  88. package/vendor/mbedtls/include/mbedtls/compat-2.x.h +46 -0
  89. package/vendor/mbedtls/include/mbedtls/config_adjust_legacy_crypto.h +578 -0
  90. package/vendor/mbedtls/include/mbedtls/config_adjust_legacy_from_psa.h +873 -0
  91. package/vendor/mbedtls/include/mbedtls/config_adjust_psa_from_legacy.h +359 -0
  92. package/vendor/mbedtls/include/mbedtls/config_adjust_psa_superset_legacy.h +145 -0
  93. package/vendor/mbedtls/include/mbedtls/config_adjust_ssl.h +91 -0
  94. package/vendor/mbedtls/include/mbedtls/config_adjust_x509.h +35 -0
  95. package/vendor/mbedtls/include/mbedtls/config_psa.h +61 -0
  96. package/vendor/mbedtls/include/mbedtls/constant_time.h +36 -0
  97. package/vendor/mbedtls/include/mbedtls/ctr_drbg.h +596 -0
  98. package/vendor/mbedtls/include/mbedtls/debug.h +156 -0
  99. package/vendor/mbedtls/include/mbedtls/des.h +385 -0
  100. package/vendor/mbedtls/include/mbedtls/dhm.h +972 -0
  101. package/vendor/mbedtls/include/mbedtls/ecdh.h +455 -0
  102. package/vendor/mbedtls/include/mbedtls/ecdsa.h +674 -0
  103. package/vendor/mbedtls/include/mbedtls/ecjpake.h +298 -0
  104. package/vendor/mbedtls/include/mbedtls/ecp.h +1517 -0
  105. package/vendor/mbedtls/include/mbedtls/entropy.h +274 -0
  106. package/vendor/mbedtls/include/mbedtls/error.h +201 -0
  107. package/vendor/mbedtls/include/mbedtls/gcm.h +387 -0
  108. package/vendor/mbedtls/include/mbedtls/hkdf.h +124 -0
  109. package/vendor/mbedtls/include/mbedtls/hmac_drbg.h +434 -0
  110. package/vendor/mbedtls/include/mbedtls/lms.h +440 -0
  111. package/vendor/mbedtls/include/mbedtls/mbedtls_config.h +4446 -0
  112. package/vendor/mbedtls/include/mbedtls/md.h +526 -0
  113. package/vendor/mbedtls/include/mbedtls/md5.h +190 -0
  114. package/vendor/mbedtls/include/mbedtls/memory_buffer_alloc.h +142 -0
  115. package/vendor/mbedtls/include/mbedtls/net_sockets.h +299 -0
  116. package/vendor/mbedtls/include/mbedtls/nist_kw.h +166 -0
  117. package/vendor/mbedtls/include/mbedtls/oid.h +727 -0
  118. package/vendor/mbedtls/include/mbedtls/pem.h +160 -0
  119. package/vendor/mbedtls/include/mbedtls/pk.h +1303 -0
  120. package/vendor/mbedtls/include/mbedtls/pkcs12.h +186 -0
  121. package/vendor/mbedtls/include/mbedtls/pkcs5.h +198 -0
  122. package/vendor/mbedtls/include/mbedtls/pkcs7.h +252 -0
  123. package/vendor/mbedtls/include/mbedtls/platform.h +516 -0
  124. package/vendor/mbedtls/include/mbedtls/platform_time.h +79 -0
  125. package/vendor/mbedtls/include/mbedtls/platform_util.h +247 -0
  126. package/vendor/mbedtls/include/mbedtls/poly1305.h +168 -0
  127. package/vendor/mbedtls/include/mbedtls/private_access.h +20 -0
  128. package/vendor/mbedtls/include/mbedtls/psa_util.h +207 -0
  129. package/vendor/mbedtls/include/mbedtls/ripemd160.h +136 -0
  130. package/vendor/mbedtls/include/mbedtls/rsa.h +1170 -0
  131. package/vendor/mbedtls/include/mbedtls/sha1.h +219 -0
  132. package/vendor/mbedtls/include/mbedtls/sha256.h +200 -0
  133. package/vendor/mbedtls/include/mbedtls/sha3.h +172 -0
  134. package/vendor/mbedtls/include/mbedtls/sha512.h +208 -0
  135. package/vendor/mbedtls/include/mbedtls/ssl.h +5887 -0
  136. package/vendor/mbedtls/include/mbedtls/ssl_cache.h +187 -0
  137. package/vendor/mbedtls/include/mbedtls/ssl_ciphersuites.h +482 -0
  138. package/vendor/mbedtls/include/mbedtls/ssl_cookie.h +106 -0
  139. package/vendor/mbedtls/include/mbedtls/ssl_ticket.h +199 -0
  140. package/vendor/mbedtls/include/mbedtls/threading.h +167 -0
  141. package/vendor/mbedtls/include/mbedtls/timing.h +94 -0
  142. package/vendor/mbedtls/include/mbedtls/version.h +78 -0
  143. package/vendor/mbedtls/include/mbedtls/x509.h +500 -0
  144. package/vendor/mbedtls/include/mbedtls/x509_crl.h +184 -0
  145. package/vendor/mbedtls/include/mbedtls/x509_crt.h +1208 -0
  146. package/vendor/mbedtls/include/mbedtls/x509_csr.h +382 -0
  147. package/vendor/mbedtls/include/psa/build_info.h +20 -0
  148. package/vendor/mbedtls/include/psa/crypto.h +4998 -0
  149. package/vendor/mbedtls/include/psa/crypto_adjust_auto_enabled.h +31 -0
  150. package/vendor/mbedtls/include/psa/crypto_adjust_config_dependencies.h +51 -0
  151. package/vendor/mbedtls/include/psa/crypto_adjust_config_key_pair_types.h +101 -0
  152. package/vendor/mbedtls/include/psa/crypto_adjust_config_synonyms.h +49 -0
  153. package/vendor/mbedtls/include/psa/crypto_builtin_composites.h +214 -0
  154. package/vendor/mbedtls/include/psa/crypto_builtin_key_derivation.h +118 -0
  155. package/vendor/mbedtls/include/psa/crypto_builtin_primitives.h +114 -0
  156. package/vendor/mbedtls/include/psa/crypto_compat.h +230 -0
  157. package/vendor/mbedtls/include/psa/crypto_config.h +145 -0
  158. package/vendor/mbedtls/include/psa/crypto_driver_common.h +44 -0
  159. package/vendor/mbedtls/include/psa/crypto_driver_contexts_composites.h +151 -0
  160. package/vendor/mbedtls/include/psa/crypto_driver_contexts_key_derivation.h +52 -0
  161. package/vendor/mbedtls/include/psa/crypto_driver_contexts_primitives.h +105 -0
  162. package/vendor/mbedtls/include/psa/crypto_extra.h +2145 -0
  163. package/vendor/mbedtls/include/psa/crypto_legacy.h +88 -0
  164. package/vendor/mbedtls/include/psa/crypto_platform.h +102 -0
  165. package/vendor/mbedtls/include/psa/crypto_se_driver.h +1383 -0
  166. package/vendor/mbedtls/include/psa/crypto_sizes.h +1319 -0
  167. package/vendor/mbedtls/include/psa/crypto_struct.h +527 -0
  168. package/vendor/mbedtls/include/psa/crypto_types.h +508 -0
  169. package/vendor/mbedtls/include/psa/crypto_values.h +2782 -0
  170. package/vendor/mbedtls/library/aes.c +2294 -0
  171. package/vendor/mbedtls/library/aesce.c +624 -0
  172. package/vendor/mbedtls/library/aesce.h +136 -0
  173. package/vendor/mbedtls/library/aesni.c +846 -0
  174. package/vendor/mbedtls/library/aesni.h +162 -0
  175. package/vendor/mbedtls/library/alignment.h +704 -0
  176. package/vendor/mbedtls/library/aria.c +969 -0
  177. package/vendor/mbedtls/library/asn1parse.c +468 -0
  178. package/vendor/mbedtls/library/asn1write.c +440 -0
  179. package/vendor/mbedtls/library/base64.c +322 -0
  180. package/vendor/mbedtls/library/base64_internal.h +45 -0
  181. package/vendor/mbedtls/library/bignum.c +2583 -0
  182. package/vendor/mbedtls/library/bignum_core.c +1240 -0
  183. package/vendor/mbedtls/library/bignum_core.h +872 -0
  184. package/vendor/mbedtls/library/bignum_core_invasive.h +38 -0
  185. package/vendor/mbedtls/library/bignum_internal.h +122 -0
  186. package/vendor/mbedtls/library/bignum_mod.c +394 -0
  187. package/vendor/mbedtls/library/bignum_mod.h +452 -0
  188. package/vendor/mbedtls/library/bignum_mod_raw.c +276 -0
  189. package/vendor/mbedtls/library/bignum_mod_raw.h +416 -0
  190. package/vendor/mbedtls/library/bignum_mod_raw_invasive.h +34 -0
  191. package/vendor/mbedtls/library/block_cipher.c +207 -0
  192. package/vendor/mbedtls/library/block_cipher_internal.h +99 -0
  193. package/vendor/mbedtls/library/bn_mul.h +1094 -0
  194. package/vendor/mbedtls/library/camellia.c +1058 -0
  195. package/vendor/mbedtls/library/ccm.c +777 -0
  196. package/vendor/mbedtls/library/chacha20.c +563 -0
  197. package/vendor/mbedtls/library/chacha20_internal.h +23 -0
  198. package/vendor/mbedtls/library/chachapoly.c +487 -0
  199. package/vendor/mbedtls/library/check_crypto_config.h +136 -0
  200. package/vendor/mbedtls/library/cipher.c +1712 -0
  201. package/vendor/mbedtls/library/cipher_invasive.h +28 -0
  202. package/vendor/mbedtls/library/cipher_wrap.c +2482 -0
  203. package/vendor/mbedtls/library/cipher_wrap.h +178 -0
  204. package/vendor/mbedtls/library/cmac.c +1067 -0
  205. package/vendor/mbedtls/library/common.h +487 -0
  206. package/vendor/mbedtls/library/constant_time.c +247 -0
  207. package/vendor/mbedtls/library/constant_time_impl.h +541 -0
  208. package/vendor/mbedtls/library/constant_time_internal.h +579 -0
  209. package/vendor/mbedtls/library/ctr.h +35 -0
  210. package/vendor/mbedtls/library/ctr_drbg.c +1016 -0
  211. package/vendor/mbedtls/library/debug.c +475 -0
  212. package/vendor/mbedtls/library/debug_internal.h +185 -0
  213. package/vendor/mbedtls/library/des.c +1042 -0
  214. package/vendor/mbedtls/library/dhm.c +700 -0
  215. package/vendor/mbedtls/library/ecdh.c +696 -0
  216. package/vendor/mbedtls/library/ecdsa.c +858 -0
  217. package/vendor/mbedtls/library/ecjpake.c +1216 -0
  218. package/vendor/mbedtls/library/ecp.c +3674 -0
  219. package/vendor/mbedtls/library/ecp_curves.c +6125 -0
  220. package/vendor/mbedtls/library/ecp_curves_new.c +9 -0
  221. package/vendor/mbedtls/library/ecp_internal_alt.h +287 -0
  222. package/vendor/mbedtls/library/ecp_invasive.h +305 -0
  223. package/vendor/mbedtls/library/entropy.c +680 -0
  224. package/vendor/mbedtls/library/entropy_poll.c +233 -0
  225. package/vendor/mbedtls/library/entropy_poll.h +64 -0
  226. package/vendor/mbedtls/library/error.c +878 -0
  227. package/vendor/mbedtls/library/gcm.c +1330 -0
  228. package/vendor/mbedtls/library/hkdf.c +161 -0
  229. package/vendor/mbedtls/library/hmac_drbg.c +633 -0
  230. package/vendor/mbedtls/library/lmots.c +789 -0
  231. package/vendor/mbedtls/library/lmots.h +288 -0
  232. package/vendor/mbedtls/library/lms.c +778 -0
  233. package/vendor/mbedtls/library/md.c +1108 -0
  234. package/vendor/mbedtls/library/md5.c +426 -0
  235. package/vendor/mbedtls/library/md_psa.h +26 -0
  236. package/vendor/mbedtls/library/md_wrap.h +46 -0
  237. package/vendor/mbedtls/library/memory_buffer_alloc.c +751 -0
  238. package/vendor/mbedtls/library/mps_common.h +181 -0
  239. package/vendor/mbedtls/library/mps_error.h +89 -0
  240. package/vendor/mbedtls/library/mps_reader.c +538 -0
  241. package/vendor/mbedtls/library/mps_reader.h +366 -0
  242. package/vendor/mbedtls/library/mps_trace.c +112 -0
  243. package/vendor/mbedtls/library/mps_trace.h +154 -0
  244. package/vendor/mbedtls/library/net_sockets.c +694 -0
  245. package/vendor/mbedtls/library/nist_kw.c +729 -0
  246. package/vendor/mbedtls/library/oid.c +1166 -0
  247. package/vendor/mbedtls/library/padlock.c +157 -0
  248. package/vendor/mbedtls/library/padlock.h +111 -0
  249. package/vendor/mbedtls/library/pem.c +554 -0
  250. package/vendor/mbedtls/library/pk.c +1602 -0
  251. package/vendor/mbedtls/library/pk_ecc.c +261 -0
  252. package/vendor/mbedtls/library/pk_internal.h +241 -0
  253. package/vendor/mbedtls/library/pk_wrap.c +1618 -0
  254. package/vendor/mbedtls/library/pk_wrap.h +138 -0
  255. package/vendor/mbedtls/library/pkcs12.c +437 -0
  256. package/vendor/mbedtls/library/pkcs5.c +500 -0
  257. package/vendor/mbedtls/library/pkcs7.c +787 -0
  258. package/vendor/mbedtls/library/pkparse.c +1392 -0
  259. package/vendor/mbedtls/library/pkwrite.c +631 -0
  260. package/vendor/mbedtls/library/pkwrite.h +121 -0
  261. package/vendor/mbedtls/library/platform.c +402 -0
  262. package/vendor/mbedtls/library/platform_util.c +258 -0
  263. package/vendor/mbedtls/library/poly1305.c +492 -0
  264. package/vendor/mbedtls/library/psa_crypto.c +9532 -0
  265. package/vendor/mbedtls/library/psa_crypto_aead.c +646 -0
  266. package/vendor/mbedtls/library/psa_crypto_aead.h +499 -0
  267. package/vendor/mbedtls/library/psa_crypto_cipher.c +747 -0
  268. package/vendor/mbedtls/library/psa_crypto_cipher.h +316 -0
  269. package/vendor/mbedtls/library/psa_crypto_client.c +22 -0
  270. package/vendor/mbedtls/library/psa_crypto_core.h +983 -0
  271. package/vendor/mbedtls/library/psa_crypto_core_common.h +52 -0
  272. package/vendor/mbedtls/library/psa_crypto_driver_wrappers.h +2896 -0
  273. package/vendor/mbedtls/library/psa_crypto_driver_wrappers_no_static.c +256 -0
  274. package/vendor/mbedtls/library/psa_crypto_driver_wrappers_no_static.h +31 -0
  275. package/vendor/mbedtls/library/psa_crypto_ecp.c +594 -0
  276. package/vendor/mbedtls/library/psa_crypto_ecp.h +267 -0
  277. package/vendor/mbedtls/library/psa_crypto_ffdh.c +361 -0
  278. package/vendor/mbedtls/library/psa_crypto_ffdh.h +131 -0
  279. package/vendor/mbedtls/library/psa_crypto_hash.c +470 -0
  280. package/vendor/mbedtls/library/psa_crypto_hash.h +211 -0
  281. package/vendor/mbedtls/library/psa_crypto_invasive.h +92 -0
  282. package/vendor/mbedtls/library/psa_crypto_its.h +131 -0
  283. package/vendor/mbedtls/library/psa_crypto_mac.c +505 -0
  284. package/vendor/mbedtls/library/psa_crypto_mac.h +264 -0
  285. package/vendor/mbedtls/library/psa_crypto_pake.c +571 -0
  286. package/vendor/mbedtls/library/psa_crypto_pake.h +159 -0
  287. package/vendor/mbedtls/library/psa_crypto_random.c +181 -0
  288. package/vendor/mbedtls/library/psa_crypto_random.h +72 -0
  289. package/vendor/mbedtls/library/psa_crypto_random_impl.h +200 -0
  290. package/vendor/mbedtls/library/psa_crypto_rsa.c +714 -0
  291. package/vendor/mbedtls/library/psa_crypto_rsa.h +321 -0
  292. package/vendor/mbedtls/library/psa_crypto_se.c +373 -0
  293. package/vendor/mbedtls/library/psa_crypto_se.h +192 -0
  294. package/vendor/mbedtls/library/psa_crypto_slot_management.c +1137 -0
  295. package/vendor/mbedtls/library/psa_crypto_slot_management.h +344 -0
  296. package/vendor/mbedtls/library/psa_crypto_storage.c +481 -0
  297. package/vendor/mbedtls/library/psa_crypto_storage.h +392 -0
  298. package/vendor/mbedtls/library/psa_its_file.c +254 -0
  299. package/vendor/mbedtls/library/psa_util.c +614 -0
  300. package/vendor/mbedtls/library/psa_util_internal.h +100 -0
  301. package/vendor/mbedtls/library/ripemd160.c +490 -0
  302. package/vendor/mbedtls/library/rsa.c +3121 -0
  303. package/vendor/mbedtls/library/rsa_alt_helpers.c +455 -0
  304. package/vendor/mbedtls/library/rsa_alt_helpers.h +209 -0
  305. package/vendor/mbedtls/library/rsa_internal.h +188 -0
  306. package/vendor/mbedtls/library/sha1.c +480 -0
  307. package/vendor/mbedtls/library/sha256.c +983 -0
  308. package/vendor/mbedtls/library/sha3.c +721 -0
  309. package/vendor/mbedtls/library/sha512.c +1115 -0
  310. package/vendor/mbedtls/library/ssl_cache.c +410 -0
  311. package/vendor/mbedtls/library/ssl_ciphersuites.c +2050 -0
  312. package/vendor/mbedtls/library/ssl_ciphersuites_internal.h +154 -0
  313. package/vendor/mbedtls/library/ssl_client.c +1023 -0
  314. package/vendor/mbedtls/library/ssl_client.h +22 -0
  315. package/vendor/mbedtls/library/ssl_cookie.c +384 -0
  316. package/vendor/mbedtls/library/ssl_debug_helpers.h +85 -0
  317. package/vendor/mbedtls/library/ssl_debug_helpers_generated.c +251 -0
  318. package/vendor/mbedtls/library/ssl_misc.h +3198 -0
  319. package/vendor/mbedtls/library/ssl_msg.c +6619 -0
  320. package/vendor/mbedtls/library/ssl_ticket.c +556 -0
  321. package/vendor/mbedtls/library/ssl_tls.c +10234 -0
  322. package/vendor/mbedtls/library/ssl_tls12_client.c +3688 -0
  323. package/vendor/mbedtls/library/ssl_tls12_server.c +4311 -0
  324. package/vendor/mbedtls/library/ssl_tls13_client.c +3208 -0
  325. package/vendor/mbedtls/library/ssl_tls13_generic.c +1793 -0
  326. package/vendor/mbedtls/library/ssl_tls13_invasive.h +23 -0
  327. package/vendor/mbedtls/library/ssl_tls13_keys.c +1918 -0
  328. package/vendor/mbedtls/library/ssl_tls13_keys.h +668 -0
  329. package/vendor/mbedtls/library/ssl_tls13_server.c +3624 -0
  330. package/vendor/mbedtls/library/threading.c +193 -0
  331. package/vendor/mbedtls/library/threading_internal.h +28 -0
  332. package/vendor/mbedtls/library/timing.c +152 -0
  333. package/vendor/mbedtls/library/version.c +32 -0
  334. package/vendor/mbedtls/library/version_features.c +856 -0
  335. package/vendor/mbedtls/library/x509.c +1776 -0
  336. package/vendor/mbedtls/library/x509_create.c +570 -0
  337. package/vendor/mbedtls/library/x509_crl.c +708 -0
  338. package/vendor/mbedtls/library/x509_crt.c +3311 -0
  339. package/vendor/mbedtls/library/x509_csr.c +648 -0
  340. package/vendor/mbedtls/library/x509_internal.h +101 -0
  341. package/vendor/mbedtls/library/x509write.c +174 -0
  342. package/vendor/mbedtls/library/x509write_crt.c +688 -0
  343. package/vendor/mbedtls/library/x509write_csr.c +336 -0
  344. package/vendor/quickjs-ng/CMakeLists.txt +566 -0
  345. package/vendor/quickjs-ng/LICENSE +24 -0
  346. package/vendor/quickjs-ng/README.md +24 -0
  347. package/vendor/quickjs-ng/api-test.c +1195 -0
  348. package/vendor/quickjs-ng/builtin-array-fromasync.h +119 -0
  349. package/vendor/quickjs-ng/builtin-iterator-zip-keyed.h +332 -0
  350. package/vendor/quickjs-ng/builtin-iterator-zip.h +337 -0
  351. package/vendor/quickjs-ng/cutils.h +1998 -0
  352. package/vendor/quickjs-ng/dtoa.c +1619 -0
  353. package/vendor/quickjs-ng/dtoa.h +87 -0
  354. package/vendor/quickjs-ng/gen/function_source.c +81 -0
  355. package/vendor/quickjs-ng/gen/hello.c +53 -0
  356. package/vendor/quickjs-ng/gen/hello_module.c +106 -0
  357. package/vendor/quickjs-ng/gen/repl.c +3036 -0
  358. package/vendor/quickjs-ng/gen/standalone.c +323 -0
  359. package/vendor/quickjs-ng/gen/test_fib.c +81 -0
  360. package/vendor/quickjs-ng/libregexp-opcode.h +73 -0
  361. package/vendor/quickjs-ng/libregexp.c +3474 -0
  362. package/vendor/quickjs-ng/libregexp.h +101 -0
  363. package/vendor/quickjs-ng/libunicode-table.h +5173 -0
  364. package/vendor/quickjs-ng/libunicode.c +2069 -0
  365. package/vendor/quickjs-ng/libunicode.h +172 -0
  366. package/vendor/quickjs-ng/list.h +107 -0
  367. package/vendor/quickjs-ng/lre-test.c +52 -0
  368. package/vendor/quickjs-ng/qjs.c +762 -0
  369. package/vendor/quickjs-ng/qjsc.c +673 -0
  370. package/vendor/quickjs-ng/quickjs-atom.h +280 -0
  371. package/vendor/quickjs-ng/quickjs-c-atomics.h +54 -0
  372. package/vendor/quickjs-ng/quickjs-libc.c +5037 -0
  373. package/vendor/quickjs-ng/quickjs-libc.h +87 -0
  374. package/vendor/quickjs-ng/quickjs-opcode.h +377 -0
  375. package/vendor/quickjs-ng/quickjs.c +64041 -0
  376. package/vendor/quickjs-ng/quickjs.h +1447 -0
  377. package/vendor/quickjs-ng/run-test262.c +2374 -0
  378. package/vendor/quickjs-ng/unicode_gen.c +3121 -0
  379. package/vendor/quickjs-ng/unicode_gen_def.h +310 -0
  380. package/vendor/ryu/LICENSE-Boost +23 -0
  381. package/vendor/ryu/common.h +114 -0
  382. package/vendor/ryu/d2s.c +509 -0
  383. package/vendor/ryu/d2s_full_table.h +367 -0
  384. package/vendor/ryu/d2s_intrinsics.h +357 -0
  385. package/vendor/ryu/d2s_small_table.h +186 -0
  386. package/vendor/ryu/digit_table.h +35 -0
  387. package/vendor/ryu/ryu.h +46 -0
  388. package/vendor/zlib/LICENSE +22 -0
  389. package/vendor/zlib/adler32.c +164 -0
  390. package/vendor/zlib/compress.c +75 -0
  391. package/vendor/zlib/crc32.c +1049 -0
  392. package/vendor/zlib/crc32.h +9446 -0
  393. package/vendor/zlib/deflate.c +2139 -0
  394. package/vendor/zlib/deflate.h +377 -0
  395. package/vendor/zlib/gzclose.c +23 -0
  396. package/vendor/zlib/gzguts.h +214 -0
  397. package/vendor/zlib/gzlib.c +582 -0
  398. package/vendor/zlib/gzread.c +602 -0
  399. package/vendor/zlib/gzwrite.c +631 -0
  400. package/vendor/zlib/infback.c +628 -0
  401. package/vendor/zlib/inffast.c +320 -0
  402. package/vendor/zlib/inffast.h +11 -0
  403. package/vendor/zlib/inffixed.h +94 -0
  404. package/vendor/zlib/inflate.c +1526 -0
  405. package/vendor/zlib/inflate.h +126 -0
  406. package/vendor/zlib/inftrees.c +299 -0
  407. package/vendor/zlib/inftrees.h +62 -0
  408. package/vendor/zlib/trees.c +1117 -0
  409. package/vendor/zlib/trees.h +128 -0
  410. package/vendor/zlib/uncompr.c +85 -0
  411. package/vendor/zlib/zconf.h +543 -0
  412. package/vendor/zlib/zlib.h +1938 -0
  413. package/vendor/zlib/zutil.c +299 -0
  414. package/vendor/zlib/zutil.h +254 -0
  415. package/README.md +0 -3
  416. package/index.js +0 -2
@@ -0,0 +1,699 @@
1
+ /* The node:events EventEmitter — the runtime-provided BASE CLASS behind
2
+ * `new EventEmitter()` and `class My extends EventEmitter` (the ScrError
3
+ * precedent: ScrEmitter lays out exactly like a compiler-emitted hierarchy
4
+ * class — rc, vt, then the prefix fields — so user subclasses embed it and
5
+ * every vtable mechanism applies unchanged). This translation unit links
6
+ * ONLY into binaries whose IR touches the emitter surface
7
+ * (moduleUsesEmitter — the scr_events.c gating precedent); emitter-free
8
+ * binaries keep their exact link line. Pure data structure: no event loop,
9
+ * no poller — emits are synchronous calls on the caller's stack, exactly
10
+ * Node's contract.
11
+ *
12
+ * Listener lists are name-keyed buckets in first-registration order
13
+ * (eventNames order; a bucket emptied by removal DROPS, and a later add
14
+ * re-appends — Node deletes the _events key the same way). Entries are
15
+ * small shared heap nodes so an emit's SNAPSHOT and the live list agree on
16
+ * the once-fired flag: Node emits over a copy (a listener removed
17
+ * mid-emit still runs for that emit; one added waits), and a once wrapper
18
+ * skips only when it already FIRED — mid-emit removal of a not-yet-run
19
+ * once listener does not skip it, matching the wrapper's `fired` check.
20
+ *
21
+ * Dispatch is C-variadic: the emit call site passes the event tuple as
22
+ * typed C values, and each listener invokes through a compiler-EMITTED
23
+ * adapter `void inv(ScrClosure *cb, va_list ap)` that va_args exactly the
24
+ * listener's own parameter prefix, retains the +1 the callee owns per the
25
+ * universal convention, and calls cb->fn. The frontend's per-event tuple
26
+ * unification is what makes every adapter's reads agree with every emit
27
+ * site's writes. Internal (meta-event) emits reuse the same variadic
28
+ * entry, passing the event NAME as the one argument — meta listeners are
29
+ * fenced to arity <= 1, so no adapter ever reads the listener argument
30
+ * Node would pass second.
31
+ *
32
+ * The special 'error' event routes through scr_emitter_emit_error: with no
33
+ * 'error' listener the Error payload THROWS through the exception cell
34
+ * (catchable; uncaught exits 1), Node's unhandled-'error' contract.
35
+ *
36
+ * The maxListeners leak warning prints Node's message shape on stderr,
37
+ * once per (emitter, event name), plus the once-per-process
38
+ * --trace-warnings hint line. Documented divergences: the pid in
39
+ * "(node:pid)" is this process's (it can never equal the oracle's), and
40
+ * the warning prints synchronously at the add (Node defers it a tick). */
41
+ #include "scr_runtime.h"
42
+
43
+ #include <stdarg.h>
44
+ #include <stdio.h>
45
+ #include <stdlib.h>
46
+ #include <string.h>
47
+
48
+ #ifdef _WIN32
49
+ #include <process.h>
50
+ #define SCR_EE_PID() ((long)_getpid())
51
+ #else
52
+ #include <unistd.h>
53
+ #define SCR_EE_PID() ((long)getpid())
54
+ #endif
55
+
56
+ static void scr_ee_oom(void) {
57
+ fputs("scriptc: out of memory\n", stderr);
58
+ abort();
59
+ }
60
+
61
+ /* One registered listener. Shared between the live list and emit
62
+ * snapshots via `refs` (never the closure's own rc: the node owns ONE cb
63
+ * reference, released when the last holder lets go). */
64
+ typedef struct ScrEeEntry {
65
+ ScrClosure *cb; /* owned by the node — what emit INVOKES */
66
+ /* NULL for direct registrations. A dyn-adapted registration (the JS
67
+ * lane's checked-dynamic listeners) invokes through a compiler-built
68
+ * adapter closure (cb) but keeps the ORIGINAL function here (owned):
69
+ * removeListener/off match it, listenerCount(name, fn) counts it, and
70
+ * listeners()/rawListeners() answer it — Node's identity semantics. */
71
+ ScrClosure *orig;
72
+ ScrEeInvoke inv;
73
+ bool once;
74
+ bool fired; /* a once entry that already ran (snapshot skip rule) */
75
+ uint32_t refs;
76
+ } ScrEeEntry;
77
+
78
+ typedef struct ScrEeBucket {
79
+ ScrStr *name; /* owned */
80
+ ScrEeEntry **ls;
81
+ size_t n, cap;
82
+ bool warned; /* leak warning printed for this name already */
83
+ struct ScrEeBucket *next;
84
+ } ScrEeBucket;
85
+
86
+ struct ScrEeReg {
87
+ ScrEeBucket *head; /* singly linked, first-registration order */
88
+ double max; /* -1 = unset (follows the default), 0 = unlimited */
89
+ };
90
+
91
+ /* The vtable of BARE `new EventEmitter()` instances; the emitted main()
92
+ * stamps pre/post from the program's preorder numbering (the
93
+ * scr_error_vts precedent). release is the direct teardown below. */
94
+ static void scr_emitter_release_direct(void *obj);
95
+ ScrVt scr_emitter_vt = {0, 0, &scr_emitter_release_direct};
96
+
97
+ double scr_emitter_default_max = 10; /* EventEmitter.defaultMaxListeners */
98
+
99
+ static bool scr_ee_trace_hint_shown = false;
100
+
101
+ /* Post-registration hook (scr_runtime.h): the stream unit's flow kick.
102
+ * NULL in stream-free builds — behavior byte-identical. */
103
+ void (*scr_emitter_on_hook)(ScrEmitter *em, ScrStr *name) = NULL;
104
+
105
+ /* ── entries and buckets ──────────────────────────────────────────────── */
106
+
107
+ static void scr_ee_entry_unref(ScrEeEntry *e) {
108
+ if (--e->refs > 0) return;
109
+ scr_closure_release(e->cb);
110
+ scr_closure_release(e->orig); /* NULL-tolerant */
111
+ free(e);
112
+ }
113
+
114
+ /* The entry's IDENTITY closure — what Node would see as the listener. */
115
+ static ScrClosure *scr_ee_entry_fn(const ScrEeEntry *e) {
116
+ return e->orig ? e->orig : e->cb;
117
+ }
118
+
119
+ static ScrEeReg *scr_ee_reg_ensure(ScrEmitter *em) {
120
+ if (!em->reg) {
121
+ em->reg = calloc(1, sizeof *em->reg);
122
+ if (!em->reg) scr_ee_oom();
123
+ em->reg->max = -1;
124
+ }
125
+ return em->reg;
126
+ }
127
+
128
+ static ScrEeBucket *scr_ee_bucket_find(ScrEeReg *reg, const char *name, size_t len) {
129
+ if (!reg) return NULL;
130
+ for (ScrEeBucket *b = reg->head; b; b = b->next) {
131
+ if (b->name->len == len && memcmp(b->name->data, name, len) == 0) return b;
132
+ }
133
+ return NULL;
134
+ }
135
+
136
+ static ScrEeBucket *scr_ee_bucket_ensure(ScrEeReg *reg, ScrStr *name) {
137
+ ScrEeBucket *b = scr_ee_bucket_find(reg, name->data, name->len);
138
+ if (b) return b;
139
+ b = calloc(1, sizeof *b);
140
+ if (!b) scr_ee_oom();
141
+ b->name = scr_str_retain(name);
142
+ /* Append: bucket order IS eventNames() order. */
143
+ ScrEeBucket **link = &reg->head;
144
+ while (*link) link = &(*link)->next;
145
+ *link = b;
146
+ return b;
147
+ }
148
+
149
+ /* Drops an emptied bucket from the list (Node deletes the _events key; a
150
+ * later add re-appends at the end). */
151
+ static void scr_ee_bucket_drop(ScrEeReg *reg, ScrEeBucket *b) {
152
+ ScrEeBucket **link = &reg->head;
153
+ while (*link != b) link = &(*link)->next;
154
+ *link = b->next;
155
+ scr_str_release(b->name);
156
+ free(b->ls);
157
+ free(b);
158
+ }
159
+
160
+ static bool scr_ee_has(ScrEeReg *reg, const char *name) {
161
+ ScrEeBucket *b = scr_ee_bucket_find(reg, name, strlen(name));
162
+ return b != NULL && b->n > 0;
163
+ }
164
+
165
+ /* ── the emitter object (hierarchy prefix helpers) ────────────────────── */
166
+
167
+ /* rc-0 teardown of the registry: releases EVERYTHING (closures included)
168
+ * and frees the storage. The emitted subclass DIRECT releases call this
169
+ * for their embedded prefix, exactly like a string field's release. */
170
+ void scr_emitter_reg_drop(ScrEeReg *reg) {
171
+ if (!reg) return;
172
+ ScrEeBucket *b = reg->head;
173
+ while (b) {
174
+ ScrEeBucket *next = b->next;
175
+ for (size_t i = 0; i < b->n; i++) scr_ee_entry_unref(b->ls[i]);
176
+ scr_str_release(b->name);
177
+ free(b->ls);
178
+ free(b);
179
+ b = next;
180
+ }
181
+ free(reg);
182
+ }
183
+
184
+ /* Collector trace: the listener closures are the registry's only
185
+ * cycle-headered children (bucket names are strings — acyclic). */
186
+ void scr_emitter_reg_trace(ScrEeReg *reg, ScrTraceVisit visit, void *ctx) {
187
+ if (!reg) return;
188
+ for (ScrEeBucket *b = reg->head; b; b = b->next) {
189
+ for (size_t i = 0; i < b->n; i++) {
190
+ visit(b->ls[i]->cb, ctx);
191
+ if (b->ls[i]->orig) visit(b->ls[i]->orig, ctx);
192
+ }
193
+ }
194
+ }
195
+
196
+ /* Collector teardown: the complement of the trace — releases the names,
197
+ * frees vectors/entries/registry, but NOT the closures (traced edges were
198
+ * already accounted by the collector). */
199
+ void scr_emitter_reg_gcfree(ScrEeReg *reg) {
200
+ if (!reg) return;
201
+ ScrEeBucket *b = reg->head;
202
+ while (b) {
203
+ ScrEeBucket *next = b->next;
204
+ for (size_t i = 0; i < b->n; i++) {
205
+ if (--b->ls[i]->refs == 0) free(b->ls[i]);
206
+ }
207
+ scr_str_release(b->name);
208
+ free(b->ls);
209
+ free(b);
210
+ b = next;
211
+ }
212
+ free(reg);
213
+ }
214
+
215
+ void scr_emitter_trace(void *obj, ScrTraceVisit visit, void *ctx) {
216
+ scr_emitter_reg_trace(((ScrEmitter *)obj)->reg, visit, ctx);
217
+ }
218
+
219
+ static void scr_emitter_gcfree(void *obj) {
220
+ scr_emitter_reg_gcfree(((ScrEmitter *)obj)->reg);
221
+ scr_obj_free_note();
222
+ scr_cyc_free(obj);
223
+ }
224
+
225
+ static void scr_emitter_release_direct(void *obj) {
226
+ ScrEmitter *em = obj;
227
+ if (--em->rc == 0) {
228
+ scr_cyc_on_dead(em);
229
+ scr_emitter_reg_drop(em->reg);
230
+ scr_obj_free_note();
231
+ scr_cyc_free(em);
232
+ } else {
233
+ scr_cyc_on_release(em); /* possible cycle root; may collect */
234
+ }
235
+ }
236
+
237
+ ScrEmitter *scr_emitter_new(void) {
238
+ /* Always collector-headered: the registry holds closures, so the
239
+ * emitter hierarchy is unconditionally cycle-capable (the canonical
240
+ * capture cycle is `e.on('x', () => e.emit(...))`). */
241
+ ScrEmitter *em = scr_cyc_alloc(sizeof *em, &scr_emitter_trace, &scr_emitter_gcfree);
242
+ em->rc = 1;
243
+ em->vt = &scr_emitter_vt;
244
+ em->reg = NULL;
245
+ em->cls = "EventEmitter";
246
+ scr_obj_alloc_note();
247
+ return em;
248
+ }
249
+
250
+ /* super() into the emitter prefix of an emitted subclass: the allocation
251
+ * already zeroed reg and stamped the concrete class's display name, so
252
+ * construction has nothing left to do — the call exists so the super()
253
+ * statement lowers to a real site (and may grow options later). */
254
+ void scr_emitter_init(void *obj) { (void)obj; }
255
+
256
+ ScrEmitter *scr_emitter_retain(ScrEmitter *em) {
257
+ if (em && em->rc != SIZE_MAX) {
258
+ em->rc++;
259
+ scr_cyc_mark_live(em);
260
+ }
261
+ return em;
262
+ }
263
+
264
+ void scr_emitter_release(ScrEmitter *em) {
265
+ if (!em || em->rc == SIZE_MAX) return;
266
+ em->vt->release(em); /* the DYNAMIC class's teardown */
267
+ }
268
+
269
+ void *scr_emitter_retain_v(void *em) { return scr_emitter_retain(em); }
270
+ void scr_emitter_release_v(void *em) { scr_emitter_release(em); }
271
+
272
+ /* ── the meta events ('newListener' / 'removeListener') ──────────────── */
273
+
274
+ static bool scr_ee_emit_va(ScrEmitter *em, ScrStr *name, ...);
275
+
276
+ /* Fires a meta event with the affected event's NAME as the argument
277
+ * (listeners are fenced to arity <= 1, so the listener-function argument
278
+ * Node passes second is never read). */
279
+ static void scr_ee_emit_meta(ScrEmitter *em, const char *meta, ScrStr *name) {
280
+ if (!scr_ee_has(em->reg, meta)) return;
281
+ ScrStr *m = scr_str_new(meta, strlen(meta));
282
+ scr_ee_emit_va(em, m, name);
283
+ scr_str_release(m);
284
+ }
285
+
286
+ /* ── add / remove ─────────────────────────────────────────────────────── */
287
+
288
+ static void scr_ee_warn_maybe(ScrEmitter *em, ScrEeBucket *b) {
289
+ ScrEeReg *reg = em->reg;
290
+ double max = reg->max >= 0 ? reg->max : scr_emitter_default_max;
291
+ if (b->warned || max <= 0 || (double)b->n <= max) return;
292
+ b->warned = true;
293
+ /* Node's message byte for byte — except the pid, which is OURS (it can
294
+ * never match another process's), and the synchronous timing (Node
295
+ * defers the print by a tick). SEMANTICS.md documents both. */
296
+ fprintf(stderr,
297
+ "(node:%ld) MaxListenersExceededWarning: Possible EventEmitter memory leak "
298
+ "detected. %zu %s listeners added to [%s]. MaxListeners is %g. Use "
299
+ "emitter.setMaxListeners() to increase limit\n",
300
+ SCR_EE_PID(), b->n, b->name->data, em->cls, max);
301
+ if (!scr_ee_trace_hint_shown) {
302
+ scr_ee_trace_hint_shown = true;
303
+ fputs("(Use `node --trace-warnings ...` to show where the warning was created)\n",
304
+ stderr);
305
+ }
306
+ }
307
+
308
+ /* Registers a listener. cb and orig MOVE in; name is borrowed. Returns em
309
+ * +1 (the `return this` chaining value). 'newListener' fires BEFORE the
310
+ * add, like Node. A listener throw inside the meta emit leaves the
311
+ * exception pending; the add still happens (Node's addListener has no
312
+ * try). */
313
+ static ScrEmitter *scr_ee_add(ScrEmitter *em, ScrStr *name, ScrClosure *cb /*moves*/,
314
+ ScrClosure *orig /*moves; may be NULL*/,
315
+ ScrEeInvoke inv, bool once, bool prepend) {
316
+ scr_ee_reg_ensure(em);
317
+ scr_ee_emit_meta(em, "newListener", name);
318
+ ScrEeBucket *b = scr_ee_bucket_ensure(em->reg, name);
319
+ ScrEeEntry *e = calloc(1, sizeof *e);
320
+ if (!e) scr_ee_oom();
321
+ e->cb = cb;
322
+ e->orig = orig;
323
+ e->inv = inv;
324
+ e->once = once;
325
+ e->refs = 1;
326
+ if (b->n == b->cap) {
327
+ b->cap = b->cap ? b->cap * 2 : 2;
328
+ b->ls = realloc(b->ls, b->cap * sizeof *b->ls);
329
+ if (!b->ls) scr_ee_oom();
330
+ }
331
+ if (prepend) {
332
+ memmove(b->ls + 1, b->ls, b->n * sizeof *b->ls);
333
+ b->ls[0] = e;
334
+ } else {
335
+ b->ls[b->n] = e;
336
+ }
337
+ b->n++;
338
+ scr_ee_warn_maybe(em, b);
339
+ if (scr_emitter_on_hook != NULL) scr_emitter_on_hook(em, name);
340
+ return scr_emitter_retain(em);
341
+ }
342
+
343
+ ScrEmitter *scr_emitter_on(ScrEmitter *em, ScrStr *name, ScrClosure *cb /*moves*/,
344
+ ScrEeInvoke inv, bool once, bool prepend) {
345
+ return scr_ee_add(em, name, cb, NULL, inv, once, prepend);
346
+ }
347
+
348
+ /* The dyn-adapted registration (JS-lane checked-dynamic listeners): the
349
+ * ADAPTER closure (compiler-built — boxes the event tuple to dyn and
350
+ * calls the original through the checked-dynamic machinery) is what emit
351
+ * invokes; the ORIGINAL function (the dyn box's underlying closure) is
352
+ * the entry's identity. cb must be a SCR_DYN_FUNC (the emitted
353
+ * scr_emitter_check_listener ran first); adapter MOVES in, cb is
354
+ * borrowed. */
355
+ ScrEmitter *scr_emitter_on_dyn(ScrEmitter *em, ScrStr *name, const ScrDyn *cb,
356
+ ScrClosure *adapter /*moves*/,
357
+ ScrEeInvoke inv, bool once, bool prepend) {
358
+ return scr_ee_add(em, name, adapter, scr_closure_retain(cb->v.fn.clo), inv, once,
359
+ prepend);
360
+ }
361
+
362
+ /* The adapter-mediated registration (the LLVM backend): adapter is what
363
+ * emit invokes, orig is the entry's identity — the on_dyn split with a
364
+ * plain-closure identity. Both move in. */
365
+ ScrEmitter *scr_emitter_on_via(ScrEmitter *em, ScrStr *name, ScrClosure *orig /*moves*/,
366
+ ScrClosure *adapter /*moves*/,
367
+ ScrEeInvoke inv, bool once, bool prepend) {
368
+ return scr_ee_add(em, name, adapter, orig, inv, once, prepend);
369
+ }
370
+
371
+ /* ── fixed-arity invoke shims (scr_runtime.h's contract) ──────────────
372
+ * Read k pointer-size slots and call the fixed-signature adapter behind
373
+ * cb->fn. The LLVM lane's emit sites pass every tuple argument pointer-
374
+ * classed (f64 as its i64 bit pattern, bool zero-extended) and the
375
+ * runtime's own emits are pointer-only, so va_arg(ap, void *) reads every
376
+ * tuple a fixed-registered listener can observe. */
377
+ void scr_ee_inv_fixed0(ScrClosure *cb, va_list ap) {
378
+ (void)ap;
379
+ ((void (*)(ScrClosure *))cb->fn)(cb);
380
+ }
381
+ void scr_ee_inv_fixed1(ScrClosure *cb, va_list ap) {
382
+ void *a0 = va_arg(ap, void *);
383
+ ((void (*)(ScrClosure *, void *))cb->fn)(cb, a0);
384
+ }
385
+ void scr_ee_inv_fixed2(ScrClosure *cb, va_list ap) {
386
+ void *a0 = va_arg(ap, void *);
387
+ void *a1 = va_arg(ap, void *);
388
+ ((void (*)(ScrClosure *, void *, void *))cb->fn)(cb, a0, a1);
389
+ }
390
+ void scr_ee_inv_fixed3(ScrClosure *cb, va_list ap) {
391
+ void *a0 = va_arg(ap, void *);
392
+ void *a1 = va_arg(ap, void *);
393
+ void *a2 = va_arg(ap, void *);
394
+ ((void (*)(ScrClosure *, void *, void *, void *))cb->fn)(cb, a0, a1, a2);
395
+ }
396
+ void scr_ee_inv_fixed4(ScrClosure *cb, va_list ap) {
397
+ void *a0 = va_arg(ap, void *);
398
+ void *a1 = va_arg(ap, void *);
399
+ void *a2 = va_arg(ap, void *);
400
+ void *a3 = va_arg(ap, void *);
401
+ ((void (*)(ScrClosure *, void *, void *, void *, void *))cb->fn)(cb, a0, a1, a2, a3);
402
+ }
403
+
404
+ /* Removes one entry (by index) from a bucket's live list and fires the
405
+ * 'removeListener' meta event AFTER the removal, Node's order. Drops the
406
+ * bucket when emptied. */
407
+ static void scr_ee_remove_at(ScrEmitter *em, ScrEeBucket *b, size_t i) {
408
+ ScrEeEntry *e = b->ls[i];
409
+ memmove(b->ls + i, b->ls + i + 1, (b->n - i - 1) * sizeof *b->ls);
410
+ b->n--;
411
+ ScrStr *name = scr_str_retain(b->name);
412
+ if (b->n == 0) scr_ee_bucket_drop(em->reg, b);
413
+ scr_ee_entry_unref(e);
414
+ scr_ee_emit_meta(em, "removeListener", name);
415
+ scr_str_release(name);
416
+ }
417
+
418
+ /* removeListener/off: the LAST matching occurrence leaves (Node searches
419
+ * from the end). cb is borrowed. Returns em +1. */
420
+ ScrEmitter *scr_emitter_off(ScrEmitter *em, ScrStr *name, ScrClosure *cb) {
421
+ ScrEeBucket *b = em->reg ? scr_ee_bucket_find(em->reg, name->data, name->len) : NULL;
422
+ if (b) {
423
+ for (size_t i = b->n; i-- > 0;) {
424
+ if (scr_ee_entry_fn(b->ls[i]) == cb) {
425
+ scr_ee_remove_at(em, b, i);
426
+ break;
427
+ }
428
+ }
429
+ }
430
+ return scr_emitter_retain(em);
431
+ }
432
+
433
+ /* off/removeListener with a checked-dynamic listener: the identity is the
434
+ * dyn box's underlying closure (check_listener ran first — the kind IS
435
+ * function). cb borrowed; returns em +1. */
436
+ ScrEmitter *scr_emitter_off_dyn(ScrEmitter *em, ScrStr *name, const ScrDyn *cb) {
437
+ return scr_emitter_off(em, name, cb->v.fn.clo);
438
+ }
439
+
440
+ /* The listener-argument type check Node runs first in the whole
441
+ * registration family (on, once, the prepend forms, removeListener): a
442
+ * non-function throws the catchable ERR_INVALID_ARG_TYPE TypeError,
443
+ * message shaped by errors.js's determineSpecificType (scalars render
444
+ * inspected and truncate at 28 rendered chars to 25 + "..."; strings take
445
+ * the simple '-quoted spelling — listener mistakes are words, not escape
446
+ * zoos). */
447
+ void scr_emitter_check_listener(const ScrDyn *cb) {
448
+ /* The shared gate lives in the always-linked DOM core (scr_json.c) so
449
+ * the handle dispatchers' .on paths render the same shapes without
450
+ * linking this unit. */
451
+ scr_dyn_check_listener(cb, "listener");
452
+ }
453
+
454
+ /* removeAllListeners(name?) — all = no name argument. With NO
455
+ * 'removeListener' listeners this is a plain wipe (no events, Node's fast
456
+ * path). With them, listeners leave ONE AT A TIME in LIFO order, each
457
+ * firing the meta event — and the whole-emitter form does every other
458
+ * event first (bucket order), 'removeListener' itself LAST. Returns em +1. */
459
+ static void scr_ee_remove_all_named(ScrEmitter *em, ScrEeBucket *b, bool meta) {
460
+ if (!meta) {
461
+ for (size_t i = 0; i < b->n; i++) scr_ee_entry_unref(b->ls[i]);
462
+ b->n = 0;
463
+ scr_ee_bucket_drop(em->reg, b);
464
+ return;
465
+ }
466
+ /* Node snapshots the list and removeListener()s each entry from the
467
+ * END (LIFO): meta listeners run per removal, and anything they add
468
+ * survives. The bucket can drop (and even be recreated) under the
469
+ * pass, so every step re-finds it and matches entries by identity. */
470
+ ScrStr *name = scr_str_retain(b->name);
471
+ size_t n = b->n;
472
+ ScrEeEntry **snap = malloc(n * sizeof *snap);
473
+ if (!snap) scr_ee_oom();
474
+ for (size_t i = 0; i < n; i++) {
475
+ snap[i] = b->ls[i];
476
+ snap[i]->refs++;
477
+ }
478
+ for (size_t i = n; i-- > 0;) {
479
+ ScrEeEntry *e = snap[i];
480
+ ScrEeBucket *live = scr_ee_bucket_find(em->reg, name->data, name->len);
481
+ if (live) {
482
+ for (size_t j = live->n; j-- > 0;) {
483
+ if (live->ls[j] == e) {
484
+ scr_ee_remove_at(em, live, j);
485
+ break;
486
+ }
487
+ }
488
+ }
489
+ scr_ee_entry_unref(e);
490
+ }
491
+ free(snap);
492
+ scr_str_release(name);
493
+ }
494
+
495
+ ScrEmitter *scr_emitter_remove_all(ScrEmitter *em, ScrStr *name, bool all) {
496
+ ScrEeReg *reg = em->reg;
497
+ if (!reg) return scr_emitter_retain(em);
498
+ bool meta = scr_ee_has(reg, "removeListener");
499
+ if (!all) {
500
+ ScrEeBucket *b = scr_ee_bucket_find(reg, name->data, name->len);
501
+ if (b) scr_ee_remove_all_named(em, b, meta);
502
+ return scr_emitter_retain(em);
503
+ }
504
+ /* Every event except 'removeListener' first, in bucket order; then
505
+ * 'removeListener' itself. The bucket list mutates under us (drops,
506
+ * meta listeners may add), so restart the scan after each bucket. */
507
+ for (;;) {
508
+ ScrEeBucket *pick = NULL;
509
+ for (ScrEeBucket *b = reg->head; b; b = b->next) {
510
+ if (b->name->len == 14 && memcmp(b->name->data, "removeListener", 14) == 0) continue;
511
+ pick = b;
512
+ break;
513
+ }
514
+ if (!pick) break;
515
+ scr_ee_remove_all_named(em, pick, meta);
516
+ }
517
+ ScrEeBucket *rl = scr_ee_bucket_find(reg, "removeListener", 14);
518
+ if (rl) scr_ee_remove_all_named(em, rl, meta);
519
+ return scr_emitter_retain(em);
520
+ }
521
+
522
+ /* ── emit ─────────────────────────────────────────────────────────────── */
523
+
524
+ /* One dispatch pass over a SNAPSHOT of the bucket: entries invoke in list
525
+ * order through their emitted adapters, each with a fresh va_start over
526
+ * the emit site's typed tail. A once entry leaves the live list (firing
527
+ * 'removeListener', Node's wrapper calls removeListener) BEFORE its
528
+ * callback runs, and never runs twice even when a nested emit's snapshot
529
+ * still holds it (the shared fired flag — Node's wrapper.fired). A
530
+ * listener throw stops the pass (the exception stays pending for the
531
+ * caller). Returns whether the bucket had listeners. */
532
+ static bool scr_ee_emit_core(ScrEmitter *em, ScrStr *name, va_list *ap_template) {
533
+ ScrEeBucket *b = em->reg ? scr_ee_bucket_find(em->reg, name->data, name->len) : NULL;
534
+ if (!b || b->n == 0) return false;
535
+ size_t n = b->n;
536
+ ScrEeEntry **snap = malloc(n * sizeof *snap);
537
+ if (!snap) scr_ee_oom();
538
+ for (size_t i = 0; i < n; i++) {
539
+ snap[i] = b->ls[i];
540
+ snap[i]->refs++;
541
+ }
542
+ for (size_t i = 0; i < n; i++) {
543
+ ScrEeEntry *e = snap[i];
544
+ if (scr_exc_pending()) {
545
+ scr_ee_entry_unref(e);
546
+ continue;
547
+ }
548
+ if (e->once) {
549
+ if (e->fired) {
550
+ scr_ee_entry_unref(e);
551
+ continue;
552
+ }
553
+ e->fired = true;
554
+ /* Remove from the live list first (the wrapper's own removal). The
555
+ * bucket may have been dropped/recreated by earlier listeners —
556
+ * re-find it and match by entry identity. */
557
+ ScrEeBucket *live = scr_ee_bucket_find(em->reg, name->data, name->len);
558
+ if (live) {
559
+ for (size_t j = 0; j < live->n; j++) {
560
+ if (live->ls[j] == e) {
561
+ scr_ee_remove_at(em, live, j);
562
+ break;
563
+ }
564
+ }
565
+ }
566
+ if (scr_exc_pending()) { /* a removeListener meta listener threw */
567
+ scr_ee_entry_unref(e);
568
+ continue;
569
+ }
570
+ }
571
+ va_list ap;
572
+ va_copy(ap, *ap_template);
573
+ e->inv(e->cb, ap);
574
+ va_end(ap);
575
+ scr_ee_entry_unref(e);
576
+ }
577
+ free(snap);
578
+ return true;
579
+ }
580
+
581
+ static bool scr_ee_emit_va(ScrEmitter *em, ScrStr *name, ...) {
582
+ va_list ap;
583
+ va_start(ap, name);
584
+ bool had = scr_ee_emit_core(em, name, &ap);
585
+ va_end(ap);
586
+ return had;
587
+ }
588
+
589
+ /* emit(name, ...tuple) — the emitted call site passes the event's unified
590
+ * tuple as typed C variadics (doubles, pointers, ints for bools); every
591
+ * argument is BORROWED (adapters retain the +1 each callee owns). May
592
+ * leave an exception pending (a listener threw). */
593
+ bool scr_emitter_emit(ScrEmitter *em, ScrStr *name, ...) {
594
+ va_list ap;
595
+ va_start(ap, name);
596
+ bool had = scr_ee_emit_core(em, name, &ap);
597
+ va_end(ap);
598
+ return had;
599
+ }
600
+
601
+ /* emit('error', err) — Node's special event: with no 'error' listener the
602
+ * payload THROWS (catchable; uncaught exits 1 with the error report).
603
+ * err is borrowed; the throw takes its own +1. */
604
+ bool scr_emitter_emit_error(ScrEmitter *em, ScrStr *name, ScrError *err) {
605
+ if (!scr_ee_has(em->reg, "error")) {
606
+ scr_throw_obj(scr_error_retain(err), &scr_error_retain_v, &scr_error_release_v,
607
+ scr_error_trace_arg());
608
+ return false;
609
+ }
610
+ return scr_ee_emit_va(em, name, err);
611
+ }
612
+
613
+ /* ── introspection ────────────────────────────────────────────────────── */
614
+
615
+ /* The stream unit's registration probe (any unit's, really). */
616
+ bool scr_emitter_has(ScrEmitter *em, const char *name) {
617
+ return scr_ee_has(em->reg, name);
618
+ }
619
+
620
+ double scr_emitter_listener_count(ScrEmitter *em, ScrStr *name) {
621
+ ScrEeBucket *b = em->reg ? scr_ee_bucket_find(em->reg, name->data, name->len) : NULL;
622
+ return b ? (double)b->n : 0;
623
+ }
624
+
625
+ /* listenerCount(name, fn): entries matching fn by identity. */
626
+ double scr_emitter_listener_count_fn(ScrEmitter *em, ScrStr *name, ScrClosure *fn) {
627
+ ScrEeBucket *b = em->reg ? scr_ee_bucket_find(em->reg, name->data, name->len) : NULL;
628
+ if (!b) return 0;
629
+ size_t count = 0;
630
+ for (size_t i = 0; i < b->n; i++) {
631
+ if (scr_ee_entry_fn(b->ls[i]) == fn) count++;
632
+ }
633
+ return (double)count;
634
+ }
635
+
636
+ /* eventNames(): +1 string[] of the bucket names in first-registration
637
+ * order (exactly Node's _events key order). */
638
+ ScrArr *scr_emitter_event_names(ScrEmitter *em) {
639
+ ScrArr *out = scr_arr_new(SCR_ELEM_STR, 0);
640
+ if (em->reg) {
641
+ for (ScrEeBucket *b = em->reg->head; b; b = b->next) {
642
+ scr_arr_push_ref(out, scr_str_retain(b->name));
643
+ }
644
+ }
645
+ return out;
646
+ }
647
+
648
+ /* listeners(name) / rawListeners(name): +1 closure array in list order.
649
+ * The once wrapper is runtime-internal here, so BOTH forms answer the
650
+ * original listeners (SEMANTICS.md documents the rawListeners
651
+ * divergence). */
652
+ ScrArr *scr_emitter_listeners(ScrEmitter *em, ScrStr *name) {
653
+ ScrArr *out = scr_arr_new_ref(&scr_closure_retain_v, &scr_closure_release_v,
654
+ &scr_closure_trace_v, 0);
655
+ ScrEeBucket *b = em->reg ? scr_ee_bucket_find(em->reg, name->data, name->len) : NULL;
656
+ if (b) {
657
+ for (size_t i = 0; i < b->n; i++) {
658
+ scr_arr_push_ref(out, scr_closure_retain(scr_ee_entry_fn(b->ls[i])));
659
+ }
660
+ }
661
+ return out;
662
+ }
663
+
664
+ /* ── max listeners ────────────────────────────────────────────────────── */
665
+
666
+ ScrEmitter *scr_emitter_set_max(ScrEmitter *em, double n) {
667
+ if (!(n >= 0)) { /* negatives and NaN — Node's validateNumber */
668
+ char num[32];
669
+ size_t nlen = scr_f64_to_str(n, num);
670
+ char msg[128];
671
+ int len = snprintf(msg, sizeof msg,
672
+ "The value of \"setMaxListeners\" is out of range. It must be >= 0. Received %.*s",
673
+ (int)nlen, num);
674
+ scr_throw_error_msg_code(SCR_ERR_RANGE, msg, (size_t)len, "ERR_OUT_OF_RANGE");
675
+ return scr_emitter_retain(em); /* the pending check unwinds */
676
+ }
677
+ scr_ee_reg_ensure(em)->max = n;
678
+ return scr_emitter_retain(em);
679
+ }
680
+
681
+ double scr_emitter_get_max(ScrEmitter *em) {
682
+ if (em->reg && em->reg->max >= 0) return em->reg->max;
683
+ return scr_emitter_default_max;
684
+ }
685
+
686
+ void scr_emitter_set_default_max(double n) {
687
+ if (!(n >= 0)) { /* negatives and NaN — Node's validateNumber(n, "setMaxListeners", 0) */
688
+ char num[32];
689
+ size_t nlen = scr_f64_to_str(n, num);
690
+ char msg[128];
691
+ int len = snprintf(msg, sizeof msg,
692
+ "The value of \"setMaxListeners\" is out of range. It must be >= 0. Received %.*s",
693
+ (int)nlen, num);
694
+ scr_throw_error_msg_code(SCR_ERR_RANGE, msg, (size_t)len, "ERR_OUT_OF_RANGE");
695
+ return; /* the pending check unwinds */
696
+ }
697
+ scr_emitter_default_max = n;
698
+ }
699
+ double scr_emitter_get_default_max(void) { return scr_emitter_default_max; }