typenative 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (500) hide show
  1. package/.gitattributes +1 -0
  2. package/.github/workflows/ci.yml +1 -1
  3. package/.github/workflows/npm-publish-github-packages.yml +1 -1
  4. package/CHANGELOG.md +247 -0
  5. package/CONTRIBUTION.md +1 -1
  6. package/README.md +4 -4
  7. package/bin/cli.js +3 -1
  8. package/bin/go/bridge.js +919 -0
  9. package/bin/go/convert.js +238 -0
  10. package/bin/go/metadata.js +211 -0
  11. package/bin/go/overrides.js +68 -0
  12. package/bin/go/stdlib.generated.js +175 -0
  13. package/bin/index.js +294 -240
  14. package/bin/main.js +4 -1
  15. package/bin/node/assert.js +344 -0
  16. package/bin/node/async_hooks.js +273 -0
  17. package/bin/node/buffer.js +765 -0
  18. package/bin/node/child_process.js +600 -0
  19. package/bin/node/cluster.js +1002 -0
  20. package/bin/node/console.js +121 -0
  21. package/bin/node/core.js +111 -0
  22. package/bin/node/crypto.js +414 -0
  23. package/bin/node/crypto_keys.js +2685 -0
  24. package/bin/node/dgram.js +388 -0
  25. package/bin/node/diagnostics_channel.js +534 -0
  26. package/bin/node/dns.js +635 -0
  27. package/bin/node/events.js +743 -0
  28. package/bin/node/fetch.js +737 -0
  29. package/bin/node/fs.js +998 -0
  30. package/bin/node/http.js +1500 -0
  31. package/bin/node/http2.js +688 -0
  32. package/bin/node/net.js +1143 -0
  33. package/bin/node/os.js +257 -0
  34. package/bin/node/path.js +758 -0
  35. package/bin/node/process.js +316 -0
  36. package/bin/node/punycode.js +195 -0
  37. package/bin/node/querystring.js +143 -0
  38. package/bin/node/readline.js +299 -0
  39. package/bin/node/registry.js +161 -0
  40. package/bin/node/sqlite.js +1142 -0
  41. package/bin/node/stream.js +1221 -0
  42. package/bin/node/stream_web.js +2259 -0
  43. package/bin/node/string_decoder.js +101 -0
  44. package/bin/node/system_extra.js +661 -0
  45. package/bin/node/test.js +1068 -0
  46. package/bin/node/timers.js +250 -0
  47. package/bin/node/tls.js +719 -0
  48. package/bin/node/url.js +861 -0
  49. package/bin/node/util.js +1311 -0
  50. package/bin/node/util_extra.js +599 -0
  51. package/bin/node/worker_threads.js +745 -0
  52. package/bin/node/zlib.js +263 -0
  53. package/bin/transpiler.js +2650 -575
  54. package/bin/version.js +2 -0
  55. package/conformance.md +707 -241
  56. package/govendor/github.com/ncruces/go-sqlite3/LICENSE +21 -0
  57. package/govendor/github.com/ncruces/go-sqlite3/README.md +121 -0
  58. package/govendor/github.com/ncruces/go-sqlite3/backup.go +132 -0
  59. package/govendor/github.com/ncruces/go-sqlite3/blob.go +266 -0
  60. package/govendor/github.com/ncruces/go-sqlite3/config.go +397 -0
  61. package/govendor/github.com/ncruces/go-sqlite3/conn.go +540 -0
  62. package/govendor/github.com/ncruces/go-sqlite3/conn_127.go +93 -0
  63. package/govendor/github.com/ncruces/go-sqlite3/const.go +436 -0
  64. package/govendor/github.com/ncruces/go-sqlite3/context.go +222 -0
  65. package/govendor/github.com/ncruces/go-sqlite3/error.go +182 -0
  66. package/govendor/github.com/ncruces/go-sqlite3/ext.go +153 -0
  67. package/govendor/github.com/ncruces/go-sqlite3/func.go +309 -0
  68. package/govendor/github.com/ncruces/go-sqlite3/go.mod +3 -0
  69. package/govendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk.go +29 -0
  70. package/govendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk_other.go +13 -0
  71. package/govendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk_unix.go +57 -0
  72. package/govendor/github.com/ncruces/go-sqlite3/internal/errutil/error.go +41 -0
  73. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/alloc.go +128 -0
  74. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/const.go +122 -0
  75. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/error.go +77 -0
  76. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem.go +116 -0
  77. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem_other.go +34 -0
  78. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem_unix.go +87 -0
  79. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem_windows.go +149 -0
  80. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mmap_unix.go +80 -0
  81. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mmap_windows.go +129 -0
  82. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/sys_windows.go +60 -0
  83. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/wrap.go +82 -0
  84. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/wrap_sys.go +113 -0
  85. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/wrap_vfs.go +181 -0
  86. package/govendor/github.com/ncruces/go-sqlite3/internal/testenv/env.go +55 -0
  87. package/govendor/github.com/ncruces/go-sqlite3/internal/util/json.go +54 -0
  88. package/govendor/github.com/ncruces/go-sqlite3/internal/util/json_v2.go +54 -0
  89. package/govendor/github.com/ncruces/go-sqlite3/internal/util/math.go +29 -0
  90. package/govendor/github.com/ncruces/go-sqlite3/internal/util/page.go +5 -0
  91. package/govendor/github.com/ncruces/go-sqlite3/internal/util/parse.go +142 -0
  92. package/govendor/github.com/ncruces/go-sqlite3/internal/util/pointer.go +3 -0
  93. package/govendor/github.com/ncruces/go-sqlite3/internal/util/reflect.go +10 -0
  94. package/govendor/github.com/ncruces/go-sqlite3/json.go +100 -0
  95. package/govendor/github.com/ncruces/go-sqlite3/json_v2.go +116 -0
  96. package/govendor/github.com/ncruces/go-sqlite3/pointer.go +13 -0
  97. package/govendor/github.com/ncruces/go-sqlite3/quote.go +140 -0
  98. package/govendor/github.com/ncruces/go-sqlite3/stmt.go +692 -0
  99. package/govendor/github.com/ncruces/go-sqlite3/time.go +360 -0
  100. package/govendor/github.com/ncruces/go-sqlite3/txn.go +374 -0
  101. package/govendor/github.com/ncruces/go-sqlite3/value.go +212 -0
  102. package/govendor/github.com/ncruces/go-sqlite3/vfs/README.md +133 -0
  103. package/govendor/github.com/ncruces/go-sqlite3/vfs/api.go +239 -0
  104. package/govendor/github.com/ncruces/go-sqlite3/vfs/cksm.go +143 -0
  105. package/govendor/github.com/ncruces/go-sqlite3/vfs/const.go +256 -0
  106. package/govendor/github.com/ncruces/go-sqlite3/vfs/file.go +260 -0
  107. package/govendor/github.com/ncruces/go-sqlite3/vfs/filename.go +187 -0
  108. package/govendor/github.com/ncruces/go-sqlite3/vfs/lock.go +128 -0
  109. package/govendor/github.com/ncruces/go-sqlite3/vfs/lock_other.go +23 -0
  110. package/govendor/github.com/ncruces/go-sqlite3/vfs/map.go +63 -0
  111. package/govendor/github.com/ncruces/go-sqlite3/vfs/map_other.go +13 -0
  112. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_bsd.go +110 -0
  113. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_darwin.go +131 -0
  114. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_dotlk.go +140 -0
  115. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_f2fs_linux.go +56 -0
  116. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_linux.go +117 -0
  117. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_ofd.go +59 -0
  118. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std.go +50 -0
  119. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_alloc.go +19 -0
  120. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_atomic.go +9 -0
  121. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_rw.go +13 -0
  122. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_sync.go +9 -0
  123. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_temp.go +16 -0
  124. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_unix.go +108 -0
  125. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_windows.go +180 -0
  126. package/govendor/github.com/ncruces/go-sqlite3/vfs/registry.go +48 -0
  127. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm.go +26 -0
  128. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_bsd.go +258 -0
  129. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_copy.go +90 -0
  130. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_dotlk.go +168 -0
  131. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_memlk.go +52 -0
  132. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_ofd.go +185 -0
  133. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_other.go +21 -0
  134. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_windows.go +124 -0
  135. package/govendor/github.com/ncruces/go-sqlite3/vfs/vfs.go +455 -0
  136. package/govendor/github.com/ncruces/go-sqlite3/vtab.go +677 -0
  137. package/govendor/github.com/ncruces/go-sqlite3/wrap.go +48 -0
  138. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/LICENSE +18 -0
  139. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/README.md +11 -0
  140. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/go.mod +3 -0
  141. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/libc.go +215 -0
  142. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/sqlite3.dat +0 -0
  143. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/sqlite3.go +157903 -0
  144. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/tools.sh +38 -0
  145. package/govendor/github.com/ncruces/julianday/LICENSE +21 -0
  146. package/govendor/github.com/ncruces/julianday/README.md +9 -0
  147. package/govendor/github.com/ncruces/julianday/go.mod +3 -0
  148. package/govendor/github.com/ncruces/julianday/julianday.go +124 -0
  149. package/govendor/golang.org/x/sys/LICENSE +27 -0
  150. package/govendor/golang.org/x/sys/PATENTS +22 -0
  151. package/govendor/golang.org/x/sys/go.mod +3 -0
  152. package/govendor/golang.org/x/sys/unix/README.md +184 -0
  153. package/govendor/golang.org/x/sys/unix/affinity_linux.go +189 -0
  154. package/govendor/golang.org/x/sys/unix/aliases.go +13 -0
  155. package/govendor/golang.org/x/sys/unix/asm_aix_ppc64.s +17 -0
  156. package/govendor/golang.org/x/sys/unix/asm_bsd_386.s +27 -0
  157. package/govendor/golang.org/x/sys/unix/asm_bsd_amd64.s +27 -0
  158. package/govendor/golang.org/x/sys/unix/asm_bsd_arm.s +27 -0
  159. package/govendor/golang.org/x/sys/unix/asm_bsd_arm64.s +27 -0
  160. package/govendor/golang.org/x/sys/unix/asm_bsd_ppc64.s +29 -0
  161. package/govendor/golang.org/x/sys/unix/asm_bsd_riscv64.s +27 -0
  162. package/govendor/golang.org/x/sys/unix/asm_linux_386.s +65 -0
  163. package/govendor/golang.org/x/sys/unix/asm_linux_amd64.s +57 -0
  164. package/govendor/golang.org/x/sys/unix/asm_linux_arm.s +56 -0
  165. package/govendor/golang.org/x/sys/unix/asm_linux_arm64.s +50 -0
  166. package/govendor/golang.org/x/sys/unix/asm_linux_loong64.s +51 -0
  167. package/govendor/golang.org/x/sys/unix/asm_linux_mips64x.s +54 -0
  168. package/govendor/golang.org/x/sys/unix/asm_linux_mipsx.s +52 -0
  169. package/govendor/golang.org/x/sys/unix/asm_linux_ppc64x.s +42 -0
  170. package/govendor/golang.org/x/sys/unix/asm_linux_riscv64.s +47 -0
  171. package/govendor/golang.org/x/sys/unix/asm_linux_s390x.s +54 -0
  172. package/govendor/golang.org/x/sys/unix/asm_openbsd_mips64.s +29 -0
  173. package/govendor/golang.org/x/sys/unix/asm_solaris_amd64.s +17 -0
  174. package/govendor/golang.org/x/sys/unix/asm_zos_s390x.s +382 -0
  175. package/govendor/golang.org/x/sys/unix/auxv.go +36 -0
  176. package/govendor/golang.org/x/sys/unix/auxv_unsupported.go +13 -0
  177. package/govendor/golang.org/x/sys/unix/bluetooth_linux.go +36 -0
  178. package/govendor/golang.org/x/sys/unix/bpxsvc_zos.go +657 -0
  179. package/govendor/golang.org/x/sys/unix/bpxsvc_zos.s +192 -0
  180. package/govendor/golang.org/x/sys/unix/cap_freebsd.go +195 -0
  181. package/govendor/golang.org/x/sys/unix/constants.go +13 -0
  182. package/govendor/golang.org/x/sys/unix/dev_aix_ppc.go +26 -0
  183. package/govendor/golang.org/x/sys/unix/dev_aix_ppc64.go +28 -0
  184. package/govendor/golang.org/x/sys/unix/dev_darwin.go +24 -0
  185. package/govendor/golang.org/x/sys/unix/dev_dragonfly.go +30 -0
  186. package/govendor/golang.org/x/sys/unix/dev_freebsd.go +30 -0
  187. package/govendor/golang.org/x/sys/unix/dev_linux.go +42 -0
  188. package/govendor/golang.org/x/sys/unix/dev_netbsd.go +29 -0
  189. package/govendor/golang.org/x/sys/unix/dev_openbsd.go +29 -0
  190. package/govendor/golang.org/x/sys/unix/dev_zos.go +28 -0
  191. package/govendor/golang.org/x/sys/unix/dirent.go +102 -0
  192. package/govendor/golang.org/x/sys/unix/endian_big.go +9 -0
  193. package/govendor/golang.org/x/sys/unix/endian_little.go +9 -0
  194. package/govendor/golang.org/x/sys/unix/env_unix.go +31 -0
  195. package/govendor/golang.org/x/sys/unix/fcntl.go +36 -0
  196. package/govendor/golang.org/x/sys/unix/fcntl_darwin.go +24 -0
  197. package/govendor/golang.org/x/sys/unix/fcntl_linux_32bit.go +13 -0
  198. package/govendor/golang.org/x/sys/unix/fdset.go +27 -0
  199. package/govendor/golang.org/x/sys/unix/gccgo.go +59 -0
  200. package/govendor/golang.org/x/sys/unix/gccgo_c.c +44 -0
  201. package/govendor/golang.org/x/sys/unix/gccgo_linux_amd64.go +20 -0
  202. package/govendor/golang.org/x/sys/unix/ifreq_linux.go +145 -0
  203. package/govendor/golang.org/x/sys/unix/ioctl_linux.go +341 -0
  204. package/govendor/golang.org/x/sys/unix/ioctl_signed.go +74 -0
  205. package/govendor/golang.org/x/sys/unix/ioctl_unsigned.go +74 -0
  206. package/govendor/golang.org/x/sys/unix/ioctl_zos.go +71 -0
  207. package/govendor/golang.org/x/sys/unix/mkall.sh +250 -0
  208. package/govendor/golang.org/x/sys/unix/mkerrors.sh +807 -0
  209. package/govendor/golang.org/x/sys/unix/mmap_nomremap.go +13 -0
  210. package/govendor/golang.org/x/sys/unix/mremap.go +57 -0
  211. package/govendor/golang.org/x/sys/unix/pagesize_unix.go +15 -0
  212. package/govendor/golang.org/x/sys/unix/pledge_openbsd.go +111 -0
  213. package/govendor/golang.org/x/sys/unix/ptrace_darwin.go +11 -0
  214. package/govendor/golang.org/x/sys/unix/ptrace_ios.go +11 -0
  215. package/govendor/golang.org/x/sys/unix/race.go +30 -0
  216. package/govendor/golang.org/x/sys/unix/race0.go +25 -0
  217. package/govendor/golang.org/x/sys/unix/readdirent_getdents.go +12 -0
  218. package/govendor/golang.org/x/sys/unix/readdirent_getdirentries.go +19 -0
  219. package/govendor/golang.org/x/sys/unix/readv_unix.go +103 -0
  220. package/govendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go +16 -0
  221. package/govendor/golang.org/x/sys/unix/sockcmsg_linux.go +85 -0
  222. package/govendor/golang.org/x/sys/unix/sockcmsg_unix.go +106 -0
  223. package/govendor/golang.org/x/sys/unix/sockcmsg_unix_other.go +46 -0
  224. package/govendor/golang.org/x/sys/unix/sockcmsg_zos.go +58 -0
  225. package/govendor/golang.org/x/sys/unix/symaddr_zos_s390x.s +75 -0
  226. package/govendor/golang.org/x/sys/unix/syscall.go +86 -0
  227. package/govendor/golang.org/x/sys/unix/syscall_aix.go +582 -0
  228. package/govendor/golang.org/x/sys/unix/syscall_aix_ppc.go +52 -0
  229. package/govendor/golang.org/x/sys/unix/syscall_aix_ppc64.go +83 -0
  230. package/govendor/golang.org/x/sys/unix/syscall_bsd.go +609 -0
  231. package/govendor/golang.org/x/sys/unix/syscall_darwin.go +711 -0
  232. package/govendor/golang.org/x/sys/unix/syscall_darwin_amd64.go +50 -0
  233. package/govendor/golang.org/x/sys/unix/syscall_darwin_arm64.go +50 -0
  234. package/govendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go +26 -0
  235. package/govendor/golang.org/x/sys/unix/syscall_dragonfly.go +359 -0
  236. package/govendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go +56 -0
  237. package/govendor/golang.org/x/sys/unix/syscall_freebsd.go +455 -0
  238. package/govendor/golang.org/x/sys/unix/syscall_freebsd_386.go +64 -0
  239. package/govendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go +64 -0
  240. package/govendor/golang.org/x/sys/unix/syscall_freebsd_arm.go +60 -0
  241. package/govendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go +60 -0
  242. package/govendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go +60 -0
  243. package/govendor/golang.org/x/sys/unix/syscall_hurd.go +30 -0
  244. package/govendor/golang.org/x/sys/unix/syscall_hurd_386.go +28 -0
  245. package/govendor/golang.org/x/sys/unix/syscall_illumos.go +78 -0
  246. package/govendor/golang.org/x/sys/unix/syscall_linux.go +2574 -0
  247. package/govendor/golang.org/x/sys/unix/syscall_linux_386.go +313 -0
  248. package/govendor/golang.org/x/sys/unix/syscall_linux_alarm.go +12 -0
  249. package/govendor/golang.org/x/sys/unix/syscall_linux_amd64.go +144 -0
  250. package/govendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go +12 -0
  251. package/govendor/golang.org/x/sys/unix/syscall_linux_arm.go +218 -0
  252. package/govendor/golang.org/x/sys/unix/syscall_linux_arm64.go +188 -0
  253. package/govendor/golang.org/x/sys/unix/syscall_linux_gc.go +14 -0
  254. package/govendor/golang.org/x/sys/unix/syscall_linux_gc_386.go +16 -0
  255. package/govendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go +13 -0
  256. package/govendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go +30 -0
  257. package/govendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go +20 -0
  258. package/govendor/golang.org/x/sys/unix/syscall_linux_loong64.go +220 -0
  259. package/govendor/golang.org/x/sys/unix/syscall_linux_mips64x.go +187 -0
  260. package/govendor/golang.org/x/sys/unix/syscall_linux_mipsx.go +173 -0
  261. package/govendor/golang.org/x/sys/unix/syscall_linux_ppc.go +203 -0
  262. package/govendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go +114 -0
  263. package/govendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +193 -0
  264. package/govendor/golang.org/x/sys/unix/syscall_linux_s390x.go +295 -0
  265. package/govendor/golang.org/x/sys/unix/syscall_linux_sparc64.go +111 -0
  266. package/govendor/golang.org/x/sys/unix/syscall_netbsd.go +388 -0
  267. package/govendor/golang.org/x/sys/unix/syscall_netbsd_386.go +37 -0
  268. package/govendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go +37 -0
  269. package/govendor/golang.org/x/sys/unix/syscall_netbsd_arm.go +37 -0
  270. package/govendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go +37 -0
  271. package/govendor/golang.org/x/sys/unix/syscall_openbsd.go +346 -0
  272. package/govendor/golang.org/x/sys/unix/syscall_openbsd_386.go +41 -0
  273. package/govendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go +41 -0
  274. package/govendor/golang.org/x/sys/unix/syscall_openbsd_arm.go +41 -0
  275. package/govendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go +41 -0
  276. package/govendor/golang.org/x/sys/unix/syscall_openbsd_libc.go +26 -0
  277. package/govendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go +39 -0
  278. package/govendor/golang.org/x/sys/unix/syscall_openbsd_ppc64.go +41 -0
  279. package/govendor/golang.org/x/sys/unix/syscall_openbsd_riscv64.go +41 -0
  280. package/govendor/golang.org/x/sys/unix/syscall_solaris.go +1183 -0
  281. package/govendor/golang.org/x/sys/unix/syscall_solaris_amd64.go +27 -0
  282. package/govendor/golang.org/x/sys/unix/syscall_unix.go +619 -0
  283. package/govendor/golang.org/x/sys/unix/syscall_unix_gc.go +14 -0
  284. package/govendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go +22 -0
  285. package/govendor/golang.org/x/sys/unix/syscall_zos_s390x.go +3213 -0
  286. package/govendor/golang.org/x/sys/unix/sysvshm_linux.go +20 -0
  287. package/govendor/golang.org/x/sys/unix/sysvshm_unix.go +51 -0
  288. package/govendor/golang.org/x/sys/unix/sysvshm_unix_other.go +13 -0
  289. package/govendor/golang.org/x/sys/unix/timestruct.go +76 -0
  290. package/govendor/golang.org/x/sys/unix/unveil_openbsd.go +51 -0
  291. package/govendor/golang.org/x/sys/unix/vgetrandom_linux.go +13 -0
  292. package/govendor/golang.org/x/sys/unix/vgetrandom_unsupported.go +11 -0
  293. package/govendor/golang.org/x/sys/unix/xattr_bsd.go +280 -0
  294. package/govendor/golang.org/x/sys/unix/zerrors_aix_ppc.go +1384 -0
  295. package/govendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go +1385 -0
  296. package/govendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +1922 -0
  297. package/govendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +1922 -0
  298. package/govendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go +1737 -0
  299. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_386.go +2042 -0
  300. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go +2039 -0
  301. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go +2033 -0
  302. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go +2033 -0
  303. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go +2147 -0
  304. package/govendor/golang.org/x/sys/unix/zerrors_linux.go +4209 -0
  305. package/govendor/golang.org/x/sys/unix/zerrors_linux_386.go +882 -0
  306. package/govendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +882 -0
  307. package/govendor/golang.org/x/sys/unix/zerrors_linux_arm.go +887 -0
  308. package/govendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +884 -0
  309. package/govendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +874 -0
  310. package/govendor/golang.org/x/sys/unix/zerrors_linux_mips.go +888 -0
  311. package/govendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +888 -0
  312. package/govendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +888 -0
  313. package/govendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +888 -0
  314. package/govendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +940 -0
  315. package/govendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +944 -0
  316. package/govendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +944 -0
  317. package/govendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +884 -0
  318. package/govendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +943 -0
  319. package/govendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +992 -0
  320. package/govendor/golang.org/x/sys/unix/zerrors_netbsd_386.go +1779 -0
  321. package/govendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go +1769 -0
  322. package/govendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go +1758 -0
  323. package/govendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go +1769 -0
  324. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_386.go +1905 -0
  325. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go +1905 -0
  326. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go +1905 -0
  327. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go +1905 -0
  328. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go +1905 -0
  329. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_ppc64.go +1904 -0
  330. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_riscv64.go +1903 -0
  331. package/govendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go +1556 -0
  332. package/govendor/golang.org/x/sys/unix/zerrors_zos_s390x.go +990 -0
  333. package/govendor/golang.org/x/sys/unix/zptrace_armnn_linux.go +40 -0
  334. package/govendor/golang.org/x/sys/unix/zptrace_linux_arm64.go +17 -0
  335. package/govendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go +49 -0
  336. package/govendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go +49 -0
  337. package/govendor/golang.org/x/sys/unix/zptrace_x86_linux.go +79 -0
  338. package/govendor/golang.org/x/sys/unix/zsymaddr_zos_s390x.s +364 -0
  339. package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go +1461 -0
  340. package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go +1420 -0
  341. package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go +1188 -0
  342. package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go +1069 -0
  343. package/govendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +2728 -0
  344. package/govendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +799 -0
  345. package/govendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +2728 -0
  346. package/govendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +799 -0
  347. package/govendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go +1666 -0
  348. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go +1886 -0
  349. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go +1886 -0
  350. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go +1886 -0
  351. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go +1886 -0
  352. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go +1886 -0
  353. package/govendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go +101 -0
  354. package/govendor/golang.org/x/sys/unix/zsyscall_linux.go +2267 -0
  355. package/govendor/golang.org/x/sys/unix/zsyscall_linux_386.go +469 -0
  356. package/govendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go +636 -0
  357. package/govendor/golang.org/x/sys/unix/zsyscall_linux_arm.go +584 -0
  358. package/govendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go +535 -0
  359. package/govendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go +469 -0
  360. package/govendor/golang.org/x/sys/unix/zsyscall_linux_mips.go +636 -0
  361. package/govendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go +630 -0
  362. package/govendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go +619 -0
  363. package/govendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go +636 -0
  364. package/govendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go +641 -0
  365. package/govendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go +687 -0
  366. package/govendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go +687 -0
  367. package/govendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go +531 -0
  368. package/govendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go +478 -0
  369. package/govendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go +631 -0
  370. package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go +1848 -0
  371. package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go +1848 -0
  372. package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go +1848 -0
  373. package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go +1848 -0
  374. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +2407 -0
  375. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s +719 -0
  376. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +2407 -0
  377. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s +719 -0
  378. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +2407 -0
  379. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s +719 -0
  380. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +2407 -0
  381. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s +719 -0
  382. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go +2407 -0
  383. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s +719 -0
  384. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go +2407 -0
  385. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s +862 -0
  386. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go +2407 -0
  387. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s +719 -0
  388. package/govendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +2217 -0
  389. package/govendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go +3458 -0
  390. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go +280 -0
  391. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go +280 -0
  392. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go +280 -0
  393. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go +280 -0
  394. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go +280 -0
  395. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_ppc64.go +280 -0
  396. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_riscv64.go +281 -0
  397. package/govendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go +439 -0
  398. package/govendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go +437 -0
  399. package/govendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go +316 -0
  400. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go +393 -0
  401. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go +393 -0
  402. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go +393 -0
  403. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go +393 -0
  404. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go +393 -0
  405. package/govendor/golang.org/x/sys/unix/zsysnum_linux_386.go +470 -0
  406. package/govendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +394 -0
  407. package/govendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +434 -0
  408. package/govendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +337 -0
  409. package/govendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +334 -0
  410. package/govendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +454 -0
  411. package/govendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +384 -0
  412. package/govendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +384 -0
  413. package/govendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +454 -0
  414. package/govendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +461 -0
  415. package/govendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +433 -0
  416. package/govendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +433 -0
  417. package/govendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +338 -0
  418. package/govendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +399 -0
  419. package/govendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +413 -0
  420. package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go +274 -0
  421. package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go +274 -0
  422. package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go +274 -0
  423. package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go +274 -0
  424. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go +219 -0
  425. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go +219 -0
  426. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go +219 -0
  427. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go +218 -0
  428. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go +221 -0
  429. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_ppc64.go +217 -0
  430. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_riscv64.go +218 -0
  431. package/govendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go +2852 -0
  432. package/govendor/golang.org/x/sys/unix/ztypes_aix_ppc.go +353 -0
  433. package/govendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go +357 -0
  434. package/govendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +878 -0
  435. package/govendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +878 -0
  436. package/govendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go +473 -0
  437. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_386.go +651 -0
  438. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go +656 -0
  439. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go +642 -0
  440. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go +636 -0
  441. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go +638 -0
  442. package/govendor/golang.org/x/sys/unix/ztypes_linux.go +6547 -0
  443. package/govendor/golang.org/x/sys/unix/ztypes_linux_386.go +747 -0
  444. package/govendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +761 -0
  445. package/govendor/golang.org/x/sys/unix/ztypes_linux_arm.go +741 -0
  446. package/govendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +740 -0
  447. package/govendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +741 -0
  448. package/govendor/golang.org/x/sys/unix/ztypes_linux_mips.go +746 -0
  449. package/govendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +743 -0
  450. package/govendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +743 -0
  451. package/govendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +746 -0
  452. package/govendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +754 -0
  453. package/govendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +749 -0
  454. package/govendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +749 -0
  455. package/govendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +828 -0
  456. package/govendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +763 -0
  457. package/govendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +744 -0
  458. package/govendor/golang.org/x/sys/unix/ztypes_netbsd_386.go +585 -0
  459. package/govendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go +593 -0
  460. package/govendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go +590 -0
  461. package/govendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go +593 -0
  462. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_386.go +568 -0
  463. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go +568 -0
  464. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go +575 -0
  465. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go +568 -0
  466. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go +568 -0
  467. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_ppc64.go +570 -0
  468. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_riscv64.go +570 -0
  469. package/govendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go +516 -0
  470. package/govendor/golang.org/x/sys/unix/ztypes_zos_s390x.go +552 -0
  471. package/govendor/golang.org/x/sys/windows/aliases.go +13 -0
  472. package/govendor/golang.org/x/sys/windows/dll_windows.go +380 -0
  473. package/govendor/golang.org/x/sys/windows/env_windows.go +57 -0
  474. package/govendor/golang.org/x/sys/windows/eventlog.go +20 -0
  475. package/govendor/golang.org/x/sys/windows/exec_windows.go +248 -0
  476. package/govendor/golang.org/x/sys/windows/memory_windows.go +48 -0
  477. package/govendor/golang.org/x/sys/windows/mkerrors.bash +70 -0
  478. package/govendor/golang.org/x/sys/windows/mkknownfolderids.bash +27 -0
  479. package/govendor/golang.org/x/sys/windows/mksyscall.go +9 -0
  480. package/govendor/golang.org/x/sys/windows/race.go +30 -0
  481. package/govendor/golang.org/x/sys/windows/race0.go +25 -0
  482. package/govendor/golang.org/x/sys/windows/security_windows.go +1537 -0
  483. package/govendor/golang.org/x/sys/windows/service.go +257 -0
  484. package/govendor/golang.org/x/sys/windows/setupapi_windows.go +1425 -0
  485. package/govendor/golang.org/x/sys/windows/str.go +22 -0
  486. package/govendor/golang.org/x/sys/windows/syscall.go +104 -0
  487. package/govendor/golang.org/x/sys/windows/syscall_windows.go +1952 -0
  488. package/govendor/golang.org/x/sys/windows/types_windows.go +4058 -0
  489. package/govendor/golang.org/x/sys/windows/types_windows_386.go +35 -0
  490. package/govendor/golang.org/x/sys/windows/types_windows_amd64.go +34 -0
  491. package/govendor/golang.org/x/sys/windows/types_windows_arm.go +35 -0
  492. package/govendor/golang.org/x/sys/windows/types_windows_arm64.go +34 -0
  493. package/govendor/golang.org/x/sys/windows/zerrors_windows.go +9468 -0
  494. package/govendor/golang.org/x/sys/windows/zknownfolderids_windows.go +149 -0
  495. package/govendor/golang.org/x/sys/windows/zsyscall_windows.go +4828 -0
  496. package/govendor/manifest.txt +7 -0
  497. package/package.json +6 -1
  498. package/types/typenative-go.d.ts +15159 -5
  499. package/types/typenative-npm.d.ts +2637 -34
  500. package/types/typenative.d.ts +651 -8
@@ -0,0 +1,1143 @@
1
+ // node:net — TCP (and Unix socket) servers and clients on Go's net package.
2
+ // A Socket is a TnStream duplex over a net.Conn: a goroutine reads into the
3
+ // stream, writes go straight to the connection; open sockets and listening
4
+ // servers keep the event loop alive. Also the base of node:tls and node:http.
5
+ import { defineClass, defineHelper, defineModule, setResults } from './registry.js';
6
+ import { STREAM_METHODS, STREAM_GETTERS, streamListenerTypes } from './stream.js';
7
+ const netErrorsHelper = `// Node-style network errors: connect ECONNREFUSED 127.0.0.1:80
8
+ var tnNetErrnos = map[string]float64{
9
+ "ECONNREFUSED": -111, "EADDRINUSE": -98, "EADDRNOTAVAIL": -99, "ECONNRESET": -104, "EPIPE": -32,
10
+ "ETIMEDOUT": -110, "EACCES": -13, "ENOTFOUND": -3008, "EAI_AGAIN": -3001, "ENETUNREACH": -101,
11
+ "EHOSTUNREACH": -113, "ECONNABORTED": -103, "EINVAL": -22, "ENOENT": -2,
12
+ }
13
+
14
+ func tnNetCode(err error) string {
15
+ var dnsErr *net.DNSError
16
+ if errors.As(err, &dnsErr) {
17
+ if dnsErr.IsTemporary || dnsErr.IsTimeout {
18
+ return "EAI_AGAIN"
19
+ }
20
+ return "ENOTFOUND"
21
+ }
22
+ switch {
23
+ case errors.Is(err, syscall.ECONNREFUSED):
24
+ return "ECONNREFUSED"
25
+ case errors.Is(err, syscall.EADDRINUSE):
26
+ return "EADDRINUSE"
27
+ case errors.Is(err, syscall.EADDRNOTAVAIL):
28
+ return "EADDRNOTAVAIL"
29
+ case errors.Is(err, syscall.ECONNRESET):
30
+ return "ECONNRESET"
31
+ case errors.Is(err, syscall.EPIPE):
32
+ return "EPIPE"
33
+ case errors.Is(err, syscall.EACCES):
34
+ return "EACCES"
35
+ case errors.Is(err, syscall.ENETUNREACH):
36
+ return "ENETUNREACH"
37
+ case errors.Is(err, syscall.EHOSTUNREACH):
38
+ return "EHOSTUNREACH"
39
+ case errors.Is(err, syscall.ECONNABORTED):
40
+ return "ECONNABORTED"
41
+ case errors.Is(err, os.ErrNotExist):
42
+ return "ENOENT"
43
+ case errors.Is(err, os.ErrDeadlineExceeded):
44
+ return "ETIMEDOUT"
45
+ }
46
+ msg := err.Error()
47
+ switch {
48
+ case strings.Contains(msg, "refused"):
49
+ return "ECONNREFUSED"
50
+ case strings.Contains(msg, "address already in use") || strings.Contains(msg, "Only one usage"):
51
+ return "EADDRINUSE"
52
+ case strings.Contains(msg, "reset by peer") || strings.Contains(msg, "forcibly closed"):
53
+ return "ECONNRESET"
54
+ case strings.Contains(msg, "broken pipe"):
55
+ return "EPIPE"
56
+ case strings.Contains(msg, "timeout") || strings.Contains(msg, "timed out"):
57
+ return "ETIMEDOUT"
58
+ case strings.Contains(msg, "no such host"):
59
+ return "ENOTFOUND"
60
+ }
61
+ return "EINVAL"
62
+ }
63
+
64
+ // An error from a socket call: syscall + code + address[:port]
65
+ func TnNetError(err error, syscallName string, address string, port float64) *TnError {
66
+ code := tnNetCode(err)
67
+ msg := syscallName + " " + code
68
+ if address != "" {
69
+ msg += " " + address
70
+ if port >= 0 {
71
+ msg += ":" + strconv.FormatFloat(port, 'f', -1, 64)
72
+ }
73
+ }
74
+ e := TnNodeError("Error", code, msg)
75
+ e.props["errno"] = tnNetErrnos[code]
76
+ e.props["syscall"] = syscallName
77
+ if address != "" {
78
+ e.props["address"] = address
79
+ if port >= 0 {
80
+ e.props["port"] = port
81
+ }
82
+ }
83
+ return e
84
+ }
85
+
86
+ // A JS number from a dynamic value (literal ints, floats, numeric strings)
87
+ func tnNetNumber(v interface{}) (float64, bool) {
88
+ switch n := v.(type) {
89
+ case float64:
90
+ return n, true
91
+ case int:
92
+ return float64(n), true
93
+ case int64:
94
+ return float64(n), true
95
+ case float32:
96
+ return float64(n), true
97
+ case *float64:
98
+ if n != nil {
99
+ return *n, true
100
+ }
101
+ case string:
102
+ if f, err := strconv.ParseFloat(n, 64); err == nil {
103
+ return f, true
104
+ }
105
+ }
106
+ return 0, false
107
+ }
108
+
109
+ func tnNetString(v interface{}) string {
110
+ switch s := v.(type) {
111
+ case string:
112
+ return s
113
+ case *string:
114
+ if s != nil {
115
+ return *s
116
+ }
117
+ }
118
+ return ""
119
+ }
120
+
121
+ func tnIsFunc(v interface{}) bool {
122
+ return v != nil && reflect.ValueOf(v).Kind() == reflect.Func && !reflect.ValueOf(v).IsNil()
123
+ }
124
+
125
+ func tnIsOptions(v interface{}) bool {
126
+ if v == nil || tnIsFunc(v) {
127
+ return false
128
+ }
129
+ if _, ok := tnNetNumber(v); ok {
130
+ return false
131
+ }
132
+ _, isString := v.(string)
133
+ return !isString
134
+ }`;
135
+ const netHelper = `// node:net
136
+ // net.isIP: 4, 6 or 0
137
+ func TnIsIP(input string) float64 {
138
+ ip := net.ParseIP(input)
139
+ if i := strings.IndexByte(input, '%'); ip == nil && i > 0 && strings.Contains(input, ":") {
140
+ ip = net.ParseIP(input[:i])
141
+ }
142
+ if ip == nil {
143
+ return 0
144
+ }
145
+ if strings.Contains(input, ":") {
146
+ return 6
147
+ }
148
+ return 4
149
+ }
150
+
151
+ func TnIsIPv4(input string) bool { return TnIsIP(input) == 4 }
152
+ func TnIsIPv6(input string) bool { return TnIsIP(input) == 6 }
153
+
154
+ func tnFamily(ip string) string {
155
+ if strings.Contains(ip, ":") {
156
+ return "IPv6"
157
+ }
158
+ return "IPv4"
159
+ }
160
+
161
+ // server.address() / socket.address()
162
+ type TnAddressInfo struct {
163
+ address string
164
+ family string
165
+ port float64
166
+ }
167
+
168
+ func tnAddrInfo(addr net.Addr) *TnAddressInfo {
169
+ if addr == nil {
170
+ return nil
171
+ }
172
+ switch a := addr.(type) {
173
+ case *net.TCPAddr:
174
+ ip := "::"
175
+ if a.IP != nil && !a.IP.IsUnspecified() {
176
+ ip = a.IP.String()
177
+ } else if a.IP != nil && a.IP.To4() != nil && len(a.IP) == net.IPv4len {
178
+ ip = "0.0.0.0"
179
+ }
180
+ return &TnAddressInfo{address: ip, family: tnFamily(ip), port: float64(a.Port)}
181
+ case *net.UDPAddr:
182
+ ip := "::"
183
+ if a.IP != nil && !a.IP.IsUnspecified() {
184
+ ip = a.IP.String()
185
+ } else if a.IP != nil && a.IP.To4() != nil && len(a.IP) == net.IPv4len {
186
+ ip = "0.0.0.0"
187
+ }
188
+ return &TnAddressInfo{address: ip, family: tnFamily(ip), port: float64(a.Port)}
189
+ }
190
+ return &TnAddressInfo{address: addr.String(), family: "", port: -1}
191
+ }
192
+
193
+ // net.Socket: a duplex stream over a net.Conn
194
+ type TnSocket struct {
195
+ TnStream
196
+ conn net.Conn
197
+ connecting bool
198
+ pendingWrites []func()
199
+ allowHalfOpen bool
200
+ timeoutMs float64
201
+ timer *time.Timer
202
+ timerGen int
203
+ server *TnNetServer
204
+ refd bool
205
+ remoteAddress interface{}
206
+ remotePort interface{}
207
+ remoteFamily interface{}
208
+ localAddress interface{}
209
+ localPort interface{}
210
+ encrypted bool
211
+ authorized bool
212
+ authorizationError interface{}
213
+ // Runs on the dial goroutine after connecting (TLS handshakes)
214
+ dialWrap func(conn net.Conn) (net.Conn, error)
215
+ // Runs on the loop once attached, before 'connect' (TLS state)
216
+ afterConnect func(s *TnSocket)
217
+ tlsState interface{}
218
+ servername interface{}
219
+ alpnProtocol interface{}
220
+ }
221
+
222
+ func (s *TnSocket) Get_remoteAddress() interface{} { return s.remoteAddress }
223
+ func (s *TnSocket) Get_remotePort() interface{} { return s.remotePort }
224
+ func (s *TnSocket) Get_remoteFamily() interface{} { return s.remoteFamily }
225
+ func (s *TnSocket) Get_localAddress() interface{} { return s.localAddress }
226
+ func (s *TnSocket) Get_localPort() interface{} { return s.localPort }
227
+ func (s *TnSocket) Get_localFamily() interface{} {
228
+ if a, ok := s.localAddress.(string); ok {
229
+ return tnFamily(a)
230
+ }
231
+ return nil
232
+ }
233
+ func (s *TnSocket) Get_connecting() bool { return s.connecting }
234
+ func (s *TnSocket) Get_pending() bool { return s.conn == nil }
235
+ func (s *TnSocket) Get_readyState() string {
236
+ switch {
237
+ case s.connecting:
238
+ return "opening"
239
+ case s.conn == nil || s.destroyed:
240
+ return "closed"
241
+ case s.Get_readable() && s.Get_writable():
242
+ return "open"
243
+ case s.Get_readable():
244
+ return "readOnly"
245
+ case s.Get_writable():
246
+ return "writeOnly"
247
+ }
248
+ return "closed"
249
+ }
250
+ func (s *TnSocket) Get_timeout() interface{} {
251
+ if s.timeoutMs <= 0 {
252
+ return nil
253
+ }
254
+ return s.timeoutMs
255
+ }
256
+ func (s *TnSocket) Get_encrypted() bool { return s.encrypted }
257
+ func (s *TnSocket) Get_authorized() bool { return s.authorized }
258
+ func (s *TnSocket) Get_authorizationError() interface{} { return s.authorizationError }
259
+
260
+ func TnNewSocket(options ...interface{}) *TnSocket {
261
+ s := &TnSocket{}
262
+ s.TnStream = *TnNewDuplex()
263
+ s.tnSelf = s
264
+ if len(options) > 0 && options[0] != nil {
265
+ if b, ok := TnGet(options[0], "allowHalfOpen").(bool); ok {
266
+ s.allowHalfOpen = b
267
+ }
268
+ }
269
+ s.sink = func(chunk interface{}, done func(err interface{})) {
270
+ write := func() {
271
+ if s.conn == nil {
272
+ done(TnNodeError("Error", "EPIPE", "This socket has been ended by the other party"))
273
+ return
274
+ }
275
+ var data []byte
276
+ switch c := chunk.(type) {
277
+ case []byte:
278
+ data = c
279
+ case string:
280
+ data = []byte(c)
281
+ default:
282
+ data = []byte(TnJSString(c))
283
+ }
284
+ _, err := s.conn.Write(data)
285
+ s.touch()
286
+ if err != nil {
287
+ done(TnNetError(err, "write", "", -1))
288
+ return
289
+ }
290
+ done(nil)
291
+ }
292
+ if s.connecting {
293
+ s.pendingWrites = append(s.pendingWrites, write)
294
+ return
295
+ }
296
+ write()
297
+ }
298
+ s.sinkFinal = func(done func(err interface{})) {
299
+ finish := func() {
300
+ if cw, ok := s.conn.(interface{ CloseWrite() error }); ok {
301
+ cw.CloseWrite()
302
+ }
303
+ done(nil)
304
+ }
305
+ if s.connecting {
306
+ s.pendingWrites = append(s.pendingWrites, finish)
307
+ return
308
+ }
309
+ if s.conn == nil {
310
+ done(nil)
311
+ return
312
+ }
313
+ finish()
314
+ }
315
+ s.TnEventEmitter.on("end", func() {
316
+ if !s.allowHalfOpen && !s.writeEnded {
317
+ s.end()
318
+ }
319
+ })
320
+ return s
321
+ }
322
+
323
+ // Takes over a connected net.Conn: addresses, the read goroutine, a loop ref
324
+ func (s *TnSocket) attach(conn net.Conn) {
325
+ s.conn = conn
326
+ s.connecting = false
327
+ if a := tnAddrInfo(conn.RemoteAddr()); a != nil && a.port >= 0 {
328
+ s.remoteAddress, s.remotePort, s.remoteFamily = a.address, a.port, a.family
329
+ }
330
+ if a := tnAddrInfo(conn.LocalAddr()); a != nil && a.port >= 0 {
331
+ s.localAddress, s.localPort = a.address, a.port
332
+ }
333
+ s.refd = true
334
+ TnLoopRef()
335
+ s.onClose = func() {
336
+ s.clearTimer()
337
+ conn.Close()
338
+ if s.refd {
339
+ s.refd = false
340
+ TnLoopUnref()
341
+ }
342
+ if s.server != nil {
343
+ s.server.forget(s)
344
+ }
345
+ }
346
+ go func() {
347
+ buf := make([]byte, 65536)
348
+ for {
349
+ n, err := conn.Read(buf)
350
+ if n > 0 {
351
+ chunk := append([]byte{}, buf[:n]...)
352
+ s.post(func() {
353
+ if !s.destroyed {
354
+ s.touch()
355
+ s.push(chunk)
356
+ }
357
+ })
358
+ }
359
+ if err != nil {
360
+ s.post(func() {
361
+ if s.destroyed || s.readEnded {
362
+ return
363
+ }
364
+ if err == io.EOF || errors.Is(err, net.ErrClosed) {
365
+ s.push(nil)
366
+ return
367
+ }
368
+ s.destroy(TnNetError(err, "read", "", -1))
369
+ })
370
+ return
371
+ }
372
+ }
373
+ }()
374
+ }
375
+
376
+ func (s *TnSocket) flushPending() {
377
+ pending := s.pendingWrites
378
+ s.pendingWrites = nil
379
+ for _, fn := range pending {
380
+ fn()
381
+ }
382
+ }
383
+
384
+ // socket.connect(port, host?, cb?) / connect({ port, host, path }, cb?) / connect(path, cb?)
385
+ func (s *TnSocket) connect(args ...interface{}) *TnSocket {
386
+ network, host, port, path := "tcp", "localhost", float64(-1), ""
387
+ var cb interface{}
388
+ timeoutMs := float64(0)
389
+ for i, a := range args {
390
+ if tnIsFunc(a) {
391
+ cb = a
392
+ continue
393
+ }
394
+ if n, ok := tnNetNumber(a); ok && i == 0 {
395
+ port = n
396
+ continue
397
+ }
398
+ if str, ok := a.(string); ok {
399
+ if i == 0 {
400
+ path = str
401
+ network = "unix"
402
+ } else {
403
+ host = str
404
+ }
405
+ continue
406
+ }
407
+ if i == 0 && a != nil {
408
+ if n, ok := tnNetNumber(TnGet(a, "port")); ok {
409
+ port = n
410
+ }
411
+ if h := tnNetString(TnGet(a, "host")); h != "" {
412
+ host = h
413
+ }
414
+ if p := tnNetString(TnGet(a, "path")); p != "" {
415
+ path, network = p, "unix"
416
+ }
417
+ if b, ok := TnGet(a, "allowHalfOpen").(bool); ok {
418
+ s.allowHalfOpen = b
419
+ }
420
+ if n, ok := tnNetNumber(TnGet(a, "timeout")); ok {
421
+ timeoutMs = n
422
+ }
423
+ if fam, ok := tnNetNumber(TnGet(a, "family")); ok && fam == 4 {
424
+ network = "tcp4"
425
+ } else if ok && fam == 6 {
426
+ network = "tcp6"
427
+ }
428
+ }
429
+ }
430
+ if cb != nil {
431
+ s.TnEventEmitter.once("connect", cb)
432
+ }
433
+ if timeoutMs > 0 {
434
+ s.setTimeout(timeoutMs)
435
+ }
436
+ s.connecting = true
437
+ TnLoopRef()
438
+ address := path
439
+ if network != "unix" {
440
+ address = net.JoinHostPort(host, strconv.FormatFloat(port, 'f', -1, 64))
441
+ }
442
+ go func() {
443
+ conn, err := net.Dial(network, address)
444
+ if err == nil && s.dialWrap != nil {
445
+ wrapped, werr := s.dialWrap(conn)
446
+ if werr != nil {
447
+ conn.Close()
448
+ s.post(func() {
449
+ defer TnLoopUnref()
450
+ s.connecting = false
451
+ if te, ok := werr.(*TnError); ok {
452
+ s.destroy(te)
453
+ } else {
454
+ s.destroy(TnNetError(werr, "connect", host, port))
455
+ }
456
+ })
457
+ return
458
+ }
459
+ conn = wrapped
460
+ }
461
+ s.post(func() {
462
+ defer TnLoopUnref()
463
+ if err != nil {
464
+ s.connecting = false
465
+ target, targetPort := host, port
466
+ if network == "unix" {
467
+ target, targetPort = path, -1
468
+ } else if ip := tnDialedIP(err); ip != "" {
469
+ target = ip
470
+ }
471
+ s.destroy(TnNetError(err, "connect", target, targetPort))
472
+ return
473
+ }
474
+ if s.destroyed {
475
+ conn.Close()
476
+ return
477
+ }
478
+ s.attach(conn)
479
+ s.emit("connect")
480
+ if s.afterConnect != nil {
481
+ s.afterConnect(s)
482
+ }
483
+ s.emit("ready")
484
+ s.flushPending()
485
+ })
486
+ }()
487
+ return s
488
+ }
489
+
490
+ // The address a failed dial tried (localhost → 127.0.0.1 in the error message)
491
+ func tnDialedIP(err error) string {
492
+ var opErr *net.OpError
493
+ if errors.As(err, &opErr) && opErr.Addr != nil {
494
+ if a, ok := opErr.Addr.(*net.TCPAddr); ok {
495
+ return a.IP.String()
496
+ }
497
+ }
498
+ return ""
499
+ }
500
+
501
+ // Idle timeout: 'timeout' after ms without activity (the socket stays open)
502
+ func (s *TnSocket) setTimeout(ms float64, cb ...interface{}) *TnSocket {
503
+ s.timeoutMs = ms
504
+ if len(cb) > 0 && tnIsFunc(cb[0]) {
505
+ s.TnEventEmitter.once("timeout", cb[0])
506
+ }
507
+ s.touch()
508
+ return s
509
+ }
510
+
511
+ func (s *TnSocket) clearTimer() {
512
+ s.timerGen++
513
+ if s.timer != nil {
514
+ s.timer.Stop()
515
+ s.timer = nil
516
+ }
517
+ }
518
+
519
+ func (s *TnSocket) touch() {
520
+ s.clearTimer()
521
+ if s.timeoutMs <= 0 || s.destroyed {
522
+ return
523
+ }
524
+ gen := s.timerGen
525
+ s.timer = time.AfterFunc(time.Duration(s.timeoutMs*float64(time.Millisecond)), func() {
526
+ s.post(func() {
527
+ if gen == s.timerGen && !s.destroyed {
528
+ s.emit("timeout")
529
+ }
530
+ })
531
+ })
532
+ }
533
+
534
+ func (s *TnSocket) setNoDelay(noDelay ...bool) *TnSocket {
535
+ if tc, ok := s.conn.(*net.TCPConn); ok {
536
+ tc.SetNoDelay(len(noDelay) == 0 || noDelay[0])
537
+ }
538
+ return s
539
+ }
540
+
541
+ func (s *TnSocket) setKeepAlive(args ...interface{}) *TnSocket {
542
+ if tc, ok := s.conn.(*net.TCPConn); ok {
543
+ enable := false
544
+ if len(args) > 0 {
545
+ enable, _ = args[0].(bool)
546
+ }
547
+ tc.SetKeepAlive(enable)
548
+ if len(args) > 1 {
549
+ if ms, ok := tnNetNumber(args[1]); ok && ms > 0 {
550
+ tc.SetKeepAlivePeriod(time.Duration(ms * float64(time.Millisecond)))
551
+ }
552
+ }
553
+ }
554
+ return s
555
+ }
556
+
557
+ func (s *TnSocket) address() *TnAddressInfo {
558
+ if s.conn == nil {
559
+ return &TnAddressInfo{}
560
+ }
561
+ return tnAddrInfo(s.conn.LocalAddr())
562
+ }
563
+
564
+ // ref / unref: whether this socket keeps the process alive
565
+ func (s *TnSocket) ref() *TnSocket {
566
+ if !s.refd && s.conn != nil && !s.closed {
567
+ s.refd = true
568
+ TnLoopRef()
569
+ }
570
+ return s
571
+ }
572
+
573
+ func (s *TnSocket) unref() *TnSocket {
574
+ if s.refd {
575
+ s.refd = false
576
+ TnLoopUnref()
577
+ }
578
+ return s
579
+ }
580
+
581
+ func (s *TnSocket) resetAndDestroy() *TnSocket {
582
+ if tc, ok := s.conn.(*net.TCPConn); ok {
583
+ tc.SetLinger(0)
584
+ }
585
+ s.destroy()
586
+ return s
587
+ }
588
+
589
+ func (s *TnSocket) destroySoon() {
590
+ s.end()
591
+ }
592
+
593
+ // Cluster workers listen through the primary (set by node:cluster)
594
+ var tnListenHook func(srv *TnNetServer, network string, address string) (net.Listener, error)
595
+
596
+ // net.Server
597
+ type TnNetServer struct {
598
+ TnEventEmitter
599
+ ln net.Listener
600
+ listening bool
601
+ conns map[*TnSocket]bool
602
+ refd bool
603
+ closing bool
604
+ allowHalfOpen bool
605
+ pauseOnConnect bool
606
+ maxConnections float64
607
+ // Wraps accepted connections on their own goroutine (TLS handshakes)
608
+ wrapConn func(c net.Conn) (net.Conn, error)
609
+ // Prepares sockets after they are attached (TLS state)
610
+ onSocket func(s *TnSocket)
611
+ connectionEvent string
612
+ // Serves the listener instead of accepting sockets (http servers)
613
+ serve func(ln net.Listener)
614
+ // The async context of listen(): connections are handled in it
615
+ asyncCtx TnAsyncContext
616
+ }
617
+
618
+ func TnNewNetServer(args ...interface{}) *TnNetServer {
619
+ srv := &TnNetServer{conns: map[*TnSocket]bool{}, connectionEvent: "connection"}
620
+ for _, a := range args {
621
+ if tnIsFunc(a) {
622
+ srv.on(srv.connectionEvent, a)
623
+ } else if a != nil {
624
+ if b, ok := TnGet(a, "allowHalfOpen").(bool); ok {
625
+ srv.allowHalfOpen = b
626
+ }
627
+ if b, ok := TnGet(a, "pauseOnConnect").(bool); ok {
628
+ srv.pauseOnConnect = b
629
+ }
630
+ }
631
+ }
632
+ return srv
633
+ }
634
+
635
+ func (srv *TnNetServer) Get_listening() bool { return srv.listening }
636
+ func (srv *TnNetServer) Get_maxConnections() float64 { return srv.maxConnections }
637
+ func (srv *TnNetServer) Set_maxConnections(n float64) { srv.maxConnections = n }
638
+
639
+ // listen(port?, host?, backlog?, cb?) / listen({ port, host, path }, cb?) / listen(path, cb?)
640
+ func (srv *TnNetServer) listen(args ...interface{}) *TnNetServer {
641
+ network, host, port, path := "tcp", "", float64(0), ""
642
+ for i, a := range args {
643
+ if tnIsFunc(a) {
644
+ srv.TnEventEmitter.once("listening", a)
645
+ continue
646
+ }
647
+ if n, ok := tnNetNumber(a); ok {
648
+ if i == 0 {
649
+ port = n
650
+ }
651
+ continue
652
+ }
653
+ if str, ok := a.(string); ok {
654
+ if i == 0 {
655
+ path, network = str, "unix"
656
+ } else {
657
+ host = str
658
+ }
659
+ continue
660
+ }
661
+ if i == 0 && a != nil {
662
+ if n, ok := tnNetNumber(TnGet(a, "port")); ok {
663
+ port = n
664
+ }
665
+ host = tnNetString(TnGet(a, "host"))
666
+ if p := tnNetString(TnGet(a, "path")); p != "" {
667
+ path, network = p, "unix"
668
+ }
669
+ }
670
+ }
671
+ srv.asyncCtx = TnAsyncSnapshot()
672
+ address := path
673
+ if network != "unix" {
674
+ address = net.JoinHostPort(host, strconv.FormatFloat(port, 'f', -1, 64))
675
+ }
676
+ var ln net.Listener
677
+ var err error
678
+ if tnListenHook != nil && network != "unix" {
679
+ ln, err = tnListenHook(srv, network, address)
680
+ } else {
681
+ ln, err = net.Listen(network, address)
682
+ }
683
+ if err != nil {
684
+ target := host
685
+ if network == "unix" {
686
+ target, port = path, -1
687
+ } else if target == "" {
688
+ target = "::"
689
+ }
690
+ e := TnNetError(err, "listen", target, port)
691
+ TnLoopPost(func() { srv.emit("error", e) })
692
+ return srv
693
+ }
694
+ srv.ln = ln
695
+ srv.listening = true
696
+ srv.refd = true
697
+ TnLoopRef()
698
+ TnLoopPost(func() { srv.emit("listening") })
699
+ if srv.serve != nil {
700
+ go srv.serve(ln)
701
+ } else {
702
+ go srv.acceptLoop(ln)
703
+ }
704
+ return srv
705
+ }
706
+
707
+ func (srv *TnNetServer) acceptLoop(ln net.Listener) {
708
+ for {
709
+ conn, err := ln.Accept()
710
+ if err != nil {
711
+ if errors.Is(err, net.ErrClosed) {
712
+ return
713
+ }
714
+ var ne net.Error
715
+ if errors.As(err, &ne) && ne.Timeout() {
716
+ continue
717
+ }
718
+ TnLoopPost(func() { srv.emit("error", TnNetError(err, "accept", "", -1)) })
719
+ return
720
+ }
721
+ if srv.wrapConn != nil {
722
+ go func() {
723
+ wrapped, err := srv.wrapConn(conn)
724
+ if err != nil {
725
+ conn.Close()
726
+ TnLoopPost(func() { srv.emit("tlsClientError", err, nil) })
727
+ return
728
+ }
729
+ TnLoopPost(func() { TnAsyncRun(srv.asyncCtx, func() { srv.accept(wrapped) }) })
730
+ }()
731
+ continue
732
+ }
733
+ TnLoopPost(func() { TnAsyncRun(srv.asyncCtx, func() { srv.accept(conn) }) })
734
+ }
735
+ }
736
+
737
+ func (srv *TnNetServer) accept(conn net.Conn) {
738
+ if srv.closing || (srv.maxConnections > 0 && float64(len(srv.conns)) >= srv.maxConnections) {
739
+ conn.Close()
740
+ return
741
+ }
742
+ s := TnNewSocket(map[string]interface{}{"allowHalfOpen": srv.allowHalfOpen})
743
+ s.server = srv
744
+ srv.conns[s] = true
745
+ s.attach(conn)
746
+ if srv.onSocket != nil {
747
+ srv.onSocket(s)
748
+ }
749
+ if srv.pauseOnConnect {
750
+ s.pause()
751
+ }
752
+ srv.emit(srv.connectionEvent, s)
753
+ }
754
+
755
+ func (srv *TnNetServer) forget(s *TnSocket) {
756
+ delete(srv.conns, s)
757
+ srv.maybeClosed()
758
+ }
759
+
760
+ func (srv *TnNetServer) maybeClosed() {
761
+ if srv.closing && len(srv.conns) == 0 && srv.ln == nil {
762
+ srv.closing = false
763
+ TnLoopPost(func() { srv.emit("close") })
764
+ }
765
+ }
766
+
767
+ // close(cb?): stops accepting; 'close' once every connection has ended
768
+ func (srv *TnNetServer) close(cb ...interface{}) *TnNetServer {
769
+ if len(cb) > 0 && tnIsFunc(cb[0]) {
770
+ fn := cb[0]
771
+ if srv.ln == nil {
772
+ err := TnNodeError("Error", "ERR_SERVER_NOT_RUNNING", "Server is not running.")
773
+ TnLoopPost(func() { TnInvoke(fn, err) })
774
+ } else {
775
+ srv.TnEventEmitter.once("close", func() { TnInvoke(fn, nil) })
776
+ }
777
+ }
778
+ if srv.ln == nil {
779
+ return srv
780
+ }
781
+ srv.ln.Close()
782
+ srv.ln = nil
783
+ srv.listening = false
784
+ srv.closing = true
785
+ if srv.refd {
786
+ srv.refd = false
787
+ TnLoopUnref()
788
+ }
789
+ srv.maybeClosed()
790
+ return srv
791
+ }
792
+
793
+ func (srv *TnNetServer) address() *TnAddressInfo {
794
+ if srv.ln == nil {
795
+ return nil
796
+ }
797
+ return tnAddrInfo(srv.ln.Addr())
798
+ }
799
+
800
+ func (srv *TnNetServer) getConnections(cb interface{}) *TnNetServer {
801
+ n := float64(len(srv.conns))
802
+ TnLoopPost(func() { TnInvoke(cb, nil, n) })
803
+ return srv
804
+ }
805
+
806
+ func (srv *TnNetServer) ref() *TnNetServer {
807
+ if !srv.refd && srv.ln != nil {
808
+ srv.refd = true
809
+ TnLoopRef()
810
+ }
811
+ return srv
812
+ }
813
+
814
+ func (srv *TnNetServer) unref() *TnNetServer {
815
+ if srv.refd {
816
+ srv.refd = false
817
+ TnLoopUnref()
818
+ }
819
+ return srv
820
+ }
821
+
822
+ // net.connect / createConnection
823
+ func TnNetConnect(args ...interface{}) *TnSocket {
824
+ var opts interface{}
825
+ if len(args) > 0 && tnIsOptions(args[0]) {
826
+ opts = args[0]
827
+ }
828
+ return TnNewSocket(opts).connect(args...)
829
+ }`;
830
+ // Methods of the socket / server classes (beyond the stream and emitter ones)
831
+ export const SOCKET_METHODS = STREAM_METHODS +
832
+ '; connect=*TnSocket; setTimeout=*TnSocket; setNoDelay=*TnSocket; setKeepAlive=*TnSocket; address=*TnAddressInfo; ref=*TnSocket; unref=*TnSocket; resetAndDestroy=*TnSocket; destroySoon=';
833
+ export const SOCKET_GETTERS = STREAM_GETTERS +
834
+ '; remoteAddress=interface{}; remotePort=interface{}; remoteFamily=interface{}; localAddress=interface{}; localPort=interface{}; localFamily=interface{}; connecting=bool; pending=bool; readyState=string; timeout=interface{}; encrypted=bool; authorized=bool; authorizationError=interface{}';
835
+ export const SERVER_METHODS = 'on=*TnEventEmitter; once=*TnEventEmitter; addListener=*TnEventEmitter; off=*TnEventEmitter; removeListener=*TnEventEmitter; removeAllListeners=*TnEventEmitter; emit=bool; listenerCount=float64; listen=*TnNetServer; close=*TnNetServer; address=*TnAddressInfo; getConnections=*TnNetServer; ref=*TnNetServer; unref=*TnNetServer';
836
+ // Listener parameter types of socket events
837
+ export function socketListenerTypes(nodes) {
838
+ const event = nodes[0];
839
+ const name = event && event.kind === 'StringLiteral' ? String(event.text) : '';
840
+ if (name === 'close')
841
+ return ['bool'];
842
+ if (name === 'lookup')
843
+ return ['*TnError', 'string', 'interface{}', 'string'];
844
+ return streamListenerTypes(nodes);
845
+ }
846
+ // net.SocketAddress / net.BlockList on net/netip
847
+ const blockListHelper = `// node:net SocketAddress, BlockList
848
+ type TnSocketAddress struct {
849
+ address string
850
+ port float64
851
+ family string
852
+ flowlabel float64
853
+ }
854
+
855
+ func tnInvalidAddress() *TnError {
856
+ return TnNodeError("Error", "ERR_INVALID_ADDRESS", "Invalid socket address")
857
+ }
858
+
859
+ func TnNewSocketAddress(options ...interface{}) *TnSocketAddress {
860
+ sa := &TnSocketAddress{family: "ipv4"}
861
+ var opts interface{}
862
+ if len(options) > 0 {
863
+ opts = options[0]
864
+ }
865
+ if f, ok := TnGet(opts, "family").(string); ok {
866
+ sa.family = strings.ToLower(f)
867
+ }
868
+ if sa.family != "ipv4" && sa.family != "ipv6" {
869
+ panic(TnNodeError("TypeError", "ERR_INVALID_ARG_VALUE", "The property 'options.family' must be one of: 'ipv4', 'ipv6'. Received '"+sa.family+"'"))
870
+ }
871
+ sa.address = "127.0.0.1"
872
+ if sa.family == "ipv6" {
873
+ sa.address = "::"
874
+ }
875
+ if a, ok := TnGet(opts, "address").(string); ok {
876
+ sa.address = a
877
+ }
878
+ if p, ok := TnGet(opts, "port").(float64); ok {
879
+ sa.port = p
880
+ }
881
+ if fl, ok := TnGet(opts, "flowlabel").(float64); ok {
882
+ sa.flowlabel = fl
883
+ }
884
+ addr, err := netip.ParseAddr(sa.address)
885
+ if err != nil || (sa.family == "ipv4") != addr.Is4() {
886
+ panic(tnInvalidAddress())
887
+ }
888
+ sa.address = addr.String()
889
+ return sa
890
+ }
891
+
892
+ // SocketAddress.parse('1.2.3.4:80' | '[::1]:80'): undefined when invalid
893
+ func TnParseSocketAddress(input string) *TnSocketAddress {
894
+ host, port := input, "0"
895
+ if ap, err := netip.ParseAddrPort(input); err == nil {
896
+ host, port = ap.Addr().String(), strconv.Itoa(int(ap.Port()))
897
+ } else if _, err := netip.ParseAddr(strings.Trim(input, "[]")); err == nil {
898
+ host = strings.Trim(input, "[]")
899
+ } else {
900
+ return nil
901
+ }
902
+ addr, _ := netip.ParseAddr(host)
903
+ family := "ipv4"
904
+ if !addr.Is4() {
905
+ family = "ipv6"
906
+ }
907
+ p, _ := strconv.Atoi(port)
908
+ return &TnSocketAddress{address: addr.String(), port: float64(p), family: family}
909
+ }
910
+
911
+ func (sa *TnSocketAddress) Get_address() string { return sa.address }
912
+ func (sa *TnSocketAddress) Get_port() float64 { return sa.port }
913
+ func (sa *TnSocketAddress) Get_family() string { return sa.family }
914
+ func (sa *TnSocketAddress) Get_flowlabel() float64 { return sa.flowlabel }
915
+ func (sa *TnSocketAddress) toJSON() map[string]interface{} {
916
+ return map[string]interface{}{"address": sa.address, "port": sa.port, "family": sa.family, "flowlabel": sa.flowlabel}
917
+ }
918
+
919
+ type tnBlockRule struct {
920
+ kind string
921
+ from netip.Addr
922
+ to netip.Addr
923
+ prefix netip.Prefix
924
+ text string
925
+ }
926
+
927
+ type TnBlockList struct {
928
+ rules []tnBlockRule
929
+ }
930
+
931
+ func TnNewBlockList() *TnBlockList { return &TnBlockList{} }
932
+
933
+ func TnIsBlockList(v interface{}) bool {
934
+ _, ok := v.(*TnBlockList)
935
+ return ok
936
+ }
937
+
938
+ // An address argument (string + family, or a SocketAddress) as a netip.Addr
939
+ func tnBlockAddr(v interface{}, family []interface{}) (netip.Addr, bool) {
940
+ fam := "ipv4"
941
+ if sa, ok := v.(*TnSocketAddress); ok {
942
+ v, fam = sa.address, sa.family
943
+ } else if len(family) > 0 {
944
+ if f, ok := family[0].(string); ok {
945
+ fam = strings.ToLower(f)
946
+ }
947
+ }
948
+ str, ok := v.(string)
949
+ if !ok {
950
+ return netip.Addr{}, false
951
+ }
952
+ addr, err := netip.ParseAddr(str)
953
+ if err != nil || (fam == "ipv4") != addr.Is4() {
954
+ return netip.Addr{}, false
955
+ }
956
+ return addr, true
957
+ }
958
+
959
+ func tnBlockFamily(a netip.Addr) string {
960
+ if a.Is4() {
961
+ return "IPv4"
962
+ }
963
+ return "IPv6"
964
+ }
965
+
966
+ func (b *TnBlockList) add(rule tnBlockRule) {
967
+ b.rules = append([]tnBlockRule{rule}, b.rules...)
968
+ }
969
+
970
+ func (b *TnBlockList) addAddress(address interface{}, family ...interface{}) {
971
+ addr, ok := tnBlockAddr(address, family)
972
+ if !ok {
973
+ panic(tnInvalidAddress())
974
+ }
975
+ b.add(tnBlockRule{kind: "address", from: addr, text: "Address: " + tnBlockFamily(addr) + " " + addr.String()})
976
+ }
977
+
978
+ func (b *TnBlockList) addRange(start interface{}, end interface{}, family ...interface{}) {
979
+ from, ok1 := tnBlockAddr(start, family)
980
+ to, ok2 := tnBlockAddr(end, family)
981
+ if !ok1 || !ok2 {
982
+ panic(tnInvalidAddress())
983
+ }
984
+ if to.Less(from) {
985
+ panic(TnNodeError("RangeError", "ERR_INVALID_ARG_VALUE", "The argument 'start' must be less than or equal to 'end'"))
986
+ }
987
+ b.add(tnBlockRule{kind: "range", from: from, to: to, text: "Range: " + tnBlockFamily(from) + " " + from.String() + "-" + to.String()})
988
+ }
989
+
990
+ func (b *TnBlockList) addSubnet(network interface{}, prefix float64, family ...interface{}) {
991
+ addr, ok := tnBlockAddr(network, family)
992
+ if !ok {
993
+ panic(tnInvalidAddress())
994
+ }
995
+ pfx, err := addr.Prefix(int(prefix))
996
+ if err != nil {
997
+ panic(TnNodeError("RangeError", "ERR_OUT_OF_RANGE", "The value of \\"prefix\\" is out of range. Received "+TnNumStr(prefix)))
998
+ }
999
+ b.add(tnBlockRule{kind: "subnet", prefix: pfx, text: "Subnet: " + tnBlockFamily(addr) + " " + addr.String() + "/" + strconv.Itoa(int(prefix))})
1000
+ }
1001
+
1002
+ // The address in the rule's family (IPv4-mapped IPv6 addresses match IPv4 rules)
1003
+ func tnBlockAs(addr netip.Addr, like netip.Addr) (netip.Addr, bool) {
1004
+ if addr.Is4() == like.Is4() {
1005
+ return addr, true
1006
+ }
1007
+ if like.Is4() && addr.Is4In6() {
1008
+ return addr.Unmap(), true
1009
+ }
1010
+ if !like.Is4() && addr.Is4() {
1011
+ return netip.AddrFrom16(addr.As16()), true
1012
+ }
1013
+ return addr, false
1014
+ }
1015
+
1016
+ func (b *TnBlockList) check(address interface{}, family ...interface{}) bool {
1017
+ addr, ok := tnBlockAddr(address, family)
1018
+ if !ok {
1019
+ return false
1020
+ }
1021
+ for _, rule := range b.rules {
1022
+ switch rule.kind {
1023
+ case "address":
1024
+ if a, ok := tnBlockAs(addr, rule.from); ok && a == rule.from {
1025
+ return true
1026
+ }
1027
+ case "range":
1028
+ if a, ok := tnBlockAs(addr, rule.from); ok && !a.Less(rule.from) && !rule.to.Less(a) {
1029
+ return true
1030
+ }
1031
+ case "subnet":
1032
+ if a, ok := tnBlockAs(addr, rule.prefix.Addr()); ok && rule.prefix.Contains(a) {
1033
+ return true
1034
+ }
1035
+ }
1036
+ }
1037
+ return false
1038
+ }
1039
+
1040
+ func (b *TnBlockList) Get_rules() []string {
1041
+ out := []string{}
1042
+ for _, rule := range b.rules {
1043
+ out = append(out, rule.text)
1044
+ }
1045
+ return out
1046
+ }`;
1047
+ export function registerNet(r) {
1048
+ defineModule(r, 'net');
1049
+ defineHelper(r, 'netErrors', ['errors', 'net', 'os', 'reflect', 'strconv', 'strings', 'syscall'], ['error', 'dynamic'], netErrorsHelper);
1050
+ defineHelper(r, 'nodeNet', ['errors', 'io', 'net', 'strconv', 'strings', 'time'], ['netErrors', 'nodeStream', 'nodeEvents', 'eventLoop', 'nodeInvoke', 'dynamic'], netHelper);
1051
+ const use = () => r.helper('nodeNet');
1052
+ defineClass(r, 'net.AddressInfo', '*TnAddressInfo', 'class', '', 'address=string; family=string; port=float64', '', '');
1053
+ defineClass(r, 'net.Socket', '*TnSocket', 'class', SOCKET_METHODS, '', SOCKET_GETTERS, '');
1054
+ defineClass(r, 'net.Server', '*TnNetServer', 'class', SERVER_METHODS, '', 'listening=bool; maxConnections=float64', 'maxConnections');
1055
+ r.methods['net.Socket#pipe'] = (c) => {
1056
+ r.helper('nodeStream');
1057
+ return `TnPipe(${c.recv}, ${c.args.join(', ')})`;
1058
+ };
1059
+ r.typers['net.Socket#pipe'] = (c) => c.types[0] || '*TnStream';
1060
+ r.paramTypers['net.Socket#on'] = socketListenerTypes;
1061
+ r.paramTypers['net.Socket#once'] = socketListenerTypes;
1062
+ const serverListeners = (nodes) => {
1063
+ const event = nodes[0];
1064
+ const name = event && event.kind === 'StringLiteral' ? String(event.text) : '';
1065
+ if (name === 'connection')
1066
+ return ['*TnSocket'];
1067
+ if (name === 'error')
1068
+ return ['interface{}'];
1069
+ return [];
1070
+ };
1071
+ r.paramTypers['net.Server#on'] = serverListeners;
1072
+ r.paramTypers['net.Server#once'] = serverListeners;
1073
+ r.paramTypers['net.Server#close'] = (_n) => ['*TnError'];
1074
+ r.paramTypers['net.Server#getConnections'] = (_n) => ['*TnError', 'float64'];
1075
+ r.constructors['net.Socket'] = (c) => {
1076
+ use();
1077
+ return `TnNewSocket(${c.args.join(', ')})`;
1078
+ };
1079
+ // net.Stream: the legacy name of Socket
1080
+ r.classes['net.Stream'] = r.classes['net.Socket'];
1081
+ r.constructors['net.Stream'] = r.constructors['net.Socket'];
1082
+ // Go's dialer always races IPv4 / IPv6 (Happy Eyeballs): the defaults are reported, not used
1083
+ r.functions['net.getDefaultAutoSelectFamily'] = (_c) => 'true';
1084
+ r.results['net.getDefaultAutoSelectFamily'] = 'bool';
1085
+ r.functions['net.setDefaultAutoSelectFamily'] = (_c) => '_ = 0';
1086
+ r.results['net.setDefaultAutoSelectFamily'] = '';
1087
+ r.functions['net.getDefaultAutoSelectFamilyAttemptTimeout'] = (_c) => 'float64(250)';
1088
+ r.results['net.getDefaultAutoSelectFamilyAttemptTimeout'] = 'float64';
1089
+ r.functions['net.setDefaultAutoSelectFamilyAttemptTimeout'] = (_c) => '_ = 0';
1090
+ r.results['net.setDefaultAutoSelectFamilyAttemptTimeout'] = '';
1091
+ r.constructors['net.Server'] = (c) => {
1092
+ use();
1093
+ return `TnNewNetServer(${c.args.join(', ')})`;
1094
+ };
1095
+ r.functions['net.createServer'] = (c) => {
1096
+ use();
1097
+ return `TnNewNetServer(${c.args.join(', ')})`;
1098
+ };
1099
+ r.paramTypers['net.createServer'] = (_n) => ['*TnSocket'];
1100
+ const connect = (c) => {
1101
+ use();
1102
+ return `TnNetConnect(${c.args.join(', ')})`;
1103
+ };
1104
+ r.functions['net.connect'] = connect;
1105
+ r.functions['net.createConnection'] = connect;
1106
+ r.paramTypers['net.connect'] = (_n) => [];
1107
+ r.paramTypers['net.createConnection'] = (_n) => [];
1108
+ setResults(r, 'net', 'createServer=*TnNetServer; connect=*TnSocket; createConnection=*TnSocket; isIP=float64; isIPv4=bool; isIPv6=bool');
1109
+ r.functions['net.isIP'] = (c) => {
1110
+ use();
1111
+ return `TnIsIP(${c.args[0]})`;
1112
+ };
1113
+ r.functions['net.isIPv4'] = (c) => {
1114
+ use();
1115
+ return `TnIsIPv4(${c.args[0]})`;
1116
+ };
1117
+ r.functions['net.isIPv6'] = (c) => {
1118
+ use();
1119
+ return `TnIsIPv6(${c.args[0]})`;
1120
+ };
1121
+ defineHelper(r, 'nodeBlockList', ['net/netip', 'strconv', 'strings'], ['error', 'dynamic'], blockListHelper);
1122
+ const block = () => r.helper('nodeBlockList');
1123
+ defineClass(r, 'net.SocketAddress', '*TnSocketAddress', 'class', 'toJSON=map[string]interface{}', '', 'address=string; port=float64; family=string; flowlabel=float64', '');
1124
+ defineClass(r, 'net.BlockList', '*TnBlockList', 'class', 'addAddress=; addRange=; addSubnet=; check=bool', '', 'rules=[]string', '');
1125
+ r.constructors['net.SocketAddress'] = (c) => {
1126
+ block();
1127
+ return `TnNewSocketAddress(${c.args.join(', ')})`;
1128
+ };
1129
+ r.constructors['net.BlockList'] = (_c) => {
1130
+ block();
1131
+ return 'TnNewBlockList()';
1132
+ };
1133
+ r.functions['net.SocketAddress.parse'] = (c) => {
1134
+ block();
1135
+ return `TnParseSocketAddress(${c.args[0]})`;
1136
+ };
1137
+ r.results['net.SocketAddress.parse'] = '*TnSocketAddress';
1138
+ r.functions['net.BlockList.isBlockList'] = (c) => {
1139
+ block();
1140
+ return `TnIsBlockList(${c.args[0]})`;
1141
+ };
1142
+ r.results['net.BlockList.isBlockList'] = 'bool';
1143
+ }