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,745 @@
1
+ // node:worker_threads — a Worker runs the current program again as a child
2
+ // process (its own isolate, as in Node): the child connects back to the
3
+ // parent over a loopback TCP connection that carries length-prefixed,
4
+ // structured-clone-like messages (JSON plus Buffers, Maps, Sets, Dates,
5
+ // BigInts and Errors). In the child, isMainThread is false and parentPort /
6
+ // workerData are set. MessageChannel / MessagePort / BroadcastChannel work
7
+ // within one process. The worker's stdout / stderr are the parent's; an
8
+ // uncaught exception in a worker becomes an 'error' event and exit code 1.
9
+ import { defineClass, defineHelper, defineModule, setResults, isStringNode } from './registry.js';
10
+ const cloneHelper = `// Structured clone (subset): values to and from JSON with type tags
11
+ func tnCloneEncode(v interface{}) interface{} {
12
+ switch x := v.(type) {
13
+ case nil:
14
+ return nil
15
+ case bool, string, float64:
16
+ return x
17
+ case int:
18
+ return float64(x)
19
+ case *string:
20
+ if x == nil {
21
+ return nil
22
+ }
23
+ return *x
24
+ case *float64:
25
+ if x == nil {
26
+ return nil
27
+ }
28
+ return *x
29
+ case *bool:
30
+ if x == nil {
31
+ return nil
32
+ }
33
+ return *x
34
+ case []byte:
35
+ return map[string]interface{}{"$tn": "Buffer", "v": base64.StdEncoding.EncodeToString(x)}
36
+ case *tnbig.Int:
37
+ return map[string]interface{}{"$tn": "BigInt", "v": x.String()}
38
+ case time.Time:
39
+ return map[string]interface{}{"$tn": "Date", "v": float64(x.UnixMilli())}
40
+ case *TnError:
41
+ props := map[string]interface{}{}
42
+ for k, val := range x.props {
43
+ props[k] = tnCloneEncode(val)
44
+ }
45
+ return map[string]interface{}{"$tn": "Error", "message": x.message, "code": x.code, "props": props}
46
+ case map[string]interface{}:
47
+ out := map[string]interface{}{}
48
+ for k, val := range x {
49
+ out[k] = tnCloneEncode(val)
50
+ }
51
+ return out
52
+ case []interface{}:
53
+ out := make([]interface{}, len(x))
54
+ for i, val := range x {
55
+ out[i] = tnCloneEncode(val)
56
+ }
57
+ return out
58
+ }
59
+ if withEntries, ok := v.(interface{ Entries() [][]interface{} }); ok {
60
+ if _, isSet := v.(interface{ IsSet() bool }); isSet {
61
+ values := []interface{}{}
62
+ for _, e := range withEntries.Entries() {
63
+ values = append(values, tnCloneEncode(e[0]))
64
+ }
65
+ return map[string]interface{}{"$tn": "Set", "v": values}
66
+ }
67
+ pairs := []interface{}{}
68
+ for _, e := range withEntries.Entries() {
69
+ pairs = append(pairs, []interface{}{tnCloneEncode(e[0]), tnCloneEncode(e[1])})
70
+ }
71
+ return map[string]interface{}{"$tn": "Map", "v": pairs}
72
+ }
73
+ rv := reflect.ValueOf(v)
74
+ switch rv.Kind() {
75
+ case reflect.Func, reflect.Chan:
76
+ panic(TnNodeError("DataCloneError", "", fmt.Sprint(v)+" could not be cloned."))
77
+ case reflect.Slice, reflect.Array:
78
+ out := make([]interface{}, rv.Len())
79
+ for i := 0; i < rv.Len(); i++ {
80
+ out[i] = tnCloneEncode(rv.Index(i).Interface())
81
+ }
82
+ return out
83
+ case reflect.Map:
84
+ out := map[string]interface{}{}
85
+ for _, key := range rv.MapKeys() {
86
+ out[fmt.Sprint(key.Interface())] = tnCloneEncode(rv.MapIndex(key).Interface())
87
+ }
88
+ return out
89
+ case reflect.Pointer:
90
+ if rv.IsNil() {
91
+ return nil
92
+ }
93
+ if rv.Elem().Kind() == reflect.Struct {
94
+ sv := rv.Elem()
95
+ out := map[string]interface{}{}
96
+ for i := 0; i < sv.NumField(); i++ {
97
+ f := sv.Field(i)
98
+ if f.Kind() == reflect.Func {
99
+ continue
100
+ }
101
+ value := reflect.NewAt(f.Type(), unsafe.Pointer(f.UnsafeAddr())).Elem().Interface()
102
+ out[strings.TrimSuffix(sv.Type().Field(i).Name, "_")] = tnCloneEncode(value)
103
+ }
104
+ return out
105
+ }
106
+ return tnCloneEncode(rv.Elem().Interface())
107
+ case reflect.Float32, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
108
+ return rv.Convert(reflect.TypeOf(float64(0))).Interface()
109
+ }
110
+ return TnJSString(v)
111
+ }
112
+
113
+ func tnCloneDecode(v interface{}) interface{} {
114
+ switch x := v.(type) {
115
+ case []interface{}:
116
+ for i, val := range x {
117
+ x[i] = tnCloneDecode(val)
118
+ }
119
+ return x
120
+ case map[string]interface{}:
121
+ if tag, ok := x["$tn"].(string); ok {
122
+ switch tag {
123
+ case "Buffer":
124
+ b, _ := base64.StdEncoding.DecodeString(TnJSString(x["v"]))
125
+ return b
126
+ case "BigInt":
127
+ n, _ := new(tnbig.Int).SetString(TnJSString(x["v"]), 10)
128
+ return n
129
+ case "Date":
130
+ ms, _ := x["v"].(float64)
131
+ return time.UnixMilli(int64(ms))
132
+ case "Error":
133
+ e := TnNodeError("Error", TnJSString(x["code"]), TnJSString(x["message"]))
134
+ if x["code"] == "" {
135
+ e.code = ""
136
+ }
137
+ if props, ok := x["props"].(map[string]interface{}); ok {
138
+ for k, val := range props {
139
+ e.props[k] = tnCloneDecode(val)
140
+ }
141
+ }
142
+ return e
143
+ case "Map":
144
+ m := TnNewMap[interface{}, interface{}]()
145
+ if pairs, ok := x["v"].([]interface{}); ok {
146
+ for _, p := range pairs {
147
+ if pair, ok := p.([]interface{}); ok && len(pair) == 2 {
148
+ m.Set(tnCloneDecode(pair[0]), tnCloneDecode(pair[1]))
149
+ }
150
+ }
151
+ }
152
+ return m
153
+ case "Set":
154
+ m := TnNewMap[interface{}, interface{}]()
155
+ if values, ok := x["v"].([]interface{}); ok {
156
+ for _, val := range values {
157
+ d := tnCloneDecode(val)
158
+ m.Set(d, d)
159
+ }
160
+ }
161
+ return m
162
+ }
163
+ }
164
+ for k, val := range x {
165
+ x[k] = tnCloneDecode(val)
166
+ }
167
+ return x
168
+ }
169
+ return v
170
+ }`;
171
+ const workerHelper = `// node:worker_threads
172
+ // MessagePort: in-process pairs (MessageChannel) or the link to the parent
173
+ type TnMessagePort struct {
174
+ TnEventEmitter
175
+ other *TnMessagePort
176
+ transport func(data []byte)
177
+ queue []interface{}
178
+ started bool
179
+ closed bool
180
+ refd bool
181
+ unrefd bool
182
+ onmessage interface{}
183
+ scheduled bool
184
+ }
185
+
186
+ func tnNewPort() *TnMessagePort { return &TnMessagePort{} }
187
+
188
+ func (p *TnMessagePort) Get_onmessage() interface{} { return p.onmessage }
189
+ func (p *TnMessagePort) Set_onmessage(fn interface{}) {
190
+ p.onmessage = fn
191
+ p.start()
192
+ }
193
+
194
+ // on('message') starts the port and keeps the process alive until close()
195
+ func (p *TnMessagePort) on(event string, fn interface{}) *TnEventEmitter {
196
+ p.TnEventEmitter.on(event, fn)
197
+ if event == "message" {
198
+ p.start()
199
+ }
200
+ return &p.TnEventEmitter
201
+ }
202
+
203
+ func (p *TnMessagePort) once(event string, fn interface{}) *TnEventEmitter {
204
+ p.TnEventEmitter.once(event, fn)
205
+ if event == "message" {
206
+ p.start()
207
+ }
208
+ return &p.TnEventEmitter
209
+ }
210
+
211
+ func (p *TnMessagePort) addListener(event string, fn interface{}) *TnEventEmitter { return p.on(event, fn) }
212
+
213
+ func (p *TnMessagePort) start() {
214
+ if p.closed {
215
+ return
216
+ }
217
+ p.started = true
218
+ if !p.refd && !p.unrefd {
219
+ p.refd = true
220
+ TnLoopRef()
221
+ }
222
+ p.schedule()
223
+ }
224
+
225
+ func (p *TnMessagePort) ref() *TnMessagePort {
226
+ p.unrefd = false
227
+ if !p.refd && p.started && !p.closed {
228
+ p.refd = true
229
+ TnLoopRef()
230
+ }
231
+ return p
232
+ }
233
+
234
+ func (p *TnMessagePort) unref() *TnMessagePort {
235
+ p.unrefd = true
236
+ if p.refd {
237
+ p.refd = false
238
+ TnLoopUnref()
239
+ }
240
+ return p
241
+ }
242
+
243
+ func (p *TnMessagePort) hasRef() bool { return p.refd }
244
+
245
+ func (p *TnMessagePort) schedule() {
246
+ if p.scheduled || !p.started || len(p.queue) == 0 {
247
+ return
248
+ }
249
+ p.scheduled = true
250
+ TnLoopPost(func() {
251
+ p.scheduled = false
252
+ for p.started && !p.closed && len(p.queue) > 0 {
253
+ msg := p.queue[0]
254
+ p.queue = p.queue[1:]
255
+ p.dispatch(msg)
256
+ }
257
+ })
258
+ }
259
+
260
+ func (p *TnMessagePort) dispatch(msg interface{}) {
261
+ if p.onmessage != nil {
262
+ TnInvoke(p.onmessage, &TnMessageEvent{data: msg, eventType: "message"})
263
+ }
264
+ p.emit("message", msg)
265
+ }
266
+
267
+ func (p *TnMessagePort) deliver(msg interface{}) {
268
+ if p.closed {
269
+ return
270
+ }
271
+ p.queue = append(p.queue, msg)
272
+ p.schedule()
273
+ }
274
+
275
+ func (p *TnMessagePort) postMessage(value interface{}, transfer ...interface{}) {
276
+ if p.closed {
277
+ return
278
+ }
279
+ data := tnEncodeMessage(value)
280
+ if p.transport != nil {
281
+ p.transport(data)
282
+ return
283
+ }
284
+ if p.other != nil {
285
+ p.other.deliver(tnDecodeMessage(data))
286
+ }
287
+ }
288
+
289
+ func (p *TnMessagePort) close() {
290
+ if p.closed {
291
+ return
292
+ }
293
+ p.closed = true
294
+ p.unref()
295
+ TnLoopPost(func() { p.emit("close") })
296
+ if other := p.other; other != nil && !other.closed {
297
+ other.close()
298
+ }
299
+ }
300
+
301
+ type TnMessageEvent struct {
302
+ data interface{}
303
+ eventType string
304
+ }
305
+
306
+ func (e *TnMessageEvent) Get_type_() string { return e.eventType }
307
+
308
+ type TnMessageChannel struct {
309
+ port1 *TnMessagePort
310
+ port2 *TnMessagePort
311
+ }
312
+
313
+ func TnNewMessageChannel() *TnMessageChannel {
314
+ a, b := tnNewPort(), tnNewPort()
315
+ a.other, b.other = b, a
316
+ return &TnMessageChannel{port1: a, port2: b}
317
+ }
318
+
319
+ type TnReceivedMessage struct {
320
+ message interface{}
321
+ }
322
+
323
+ // receiveMessageOnPort(port): the next queued message, synchronously (undefined when none)
324
+ func TnReceiveMessageOnPort(p *TnMessagePort) *TnReceivedMessage {
325
+ if len(p.queue) == 0 {
326
+ return nil
327
+ }
328
+ msg := p.queue[0]
329
+ p.queue = p.queue[1:]
330
+ return &TnReceivedMessage{message: msg}
331
+ }
332
+
333
+ // BroadcastChannel: every instance with the same name in this process
334
+ var tnBroadcast = map[string][]*TnBroadcastChannel{}
335
+
336
+ type TnBroadcastChannel struct {
337
+ name string
338
+ port *TnMessagePort
339
+ listeners []interface{}
340
+ }
341
+
342
+ func TnNewBroadcastChannel(name string) *TnBroadcastChannel {
343
+ ch := &TnBroadcastChannel{name: name, port: tnNewPort()}
344
+ tnBroadcast[name] = append(tnBroadcast[name], ch)
345
+ return ch
346
+ }
347
+
348
+ func (b *TnBroadcastChannel) Get_name() string { return b.name }
349
+ func (b *TnBroadcastChannel) Get_onmessage() interface{} { return b.port.onmessage }
350
+ func (b *TnBroadcastChannel) Set_onmessage(fn interface{}) { b.port.Set_onmessage(fn) }
351
+
352
+ func (b *TnBroadcastChannel) addEventListener(event string, fn interface{}, options ...interface{}) {
353
+ if event == "message" {
354
+ b.port.on("message", func(msg interface{}) {
355
+ TnInvoke(fn, &TnMessageEvent{data: msg, eventType: "message"})
356
+ })
357
+ }
358
+ }
359
+
360
+ func (b *TnBroadcastChannel) postMessage(value interface{}) {
361
+ data := tnEncodeMessage(value)
362
+ for _, other := range tnBroadcast[b.name] {
363
+ if other != b && !other.port.closed {
364
+ other.port.deliver(tnDecodeMessage(data))
365
+ }
366
+ }
367
+ }
368
+
369
+ func (b *TnBroadcastChannel) close() {
370
+ b.port.close()
371
+ list := tnBroadcast[b.name]
372
+ for i, other := range list {
373
+ if other == b {
374
+ tnBroadcast[b.name] = append(list[:i], list[i+1:]...)
375
+ break
376
+ }
377
+ }
378
+ }
379
+
380
+ func (b *TnBroadcastChannel) ref() *TnBroadcastChannel {
381
+ b.port.ref()
382
+ return b
383
+ }
384
+
385
+ func (b *TnBroadcastChannel) unref() *TnBroadcastChannel {
386
+ b.port.unref()
387
+ return b
388
+ }
389
+
390
+ // --- the worker side: set up before main runs ---
391
+ var TnIsMainThread = os.Getenv("TN_WORKER_ADDR") == ""
392
+ var TnWorkerData interface{}
393
+ var TnParentPort *TnMessagePort
394
+ var TnThreadID float64
395
+ var tnEnvironmentData = map[string]interface{}{}
396
+
397
+ func init() {
398
+ if TnIsMainThread {
399
+ return
400
+ }
401
+ conn, err := net.Dial("tcp", os.Getenv("TN_WORKER_ADDR"))
402
+ if err != nil {
403
+ os.Exit(1)
404
+ }
405
+ tnWriteFrame(conn, 't', []byte(os.Getenv("TN_WORKER_TOKEN")))
406
+ kind, payload, err := tnReadFrame(conn)
407
+ if err != nil || kind != 'd' {
408
+ os.Exit(1)
409
+ }
410
+ var setup map[string]interface{}
411
+ json.Unmarshal(payload, &setup)
412
+ TnWorkerData = tnCloneDecode(setup["workerData"])
413
+ if env, ok := tnCloneDecode(setup["environmentData"]).(map[string]interface{}); ok {
414
+ tnEnvironmentData = env
415
+ }
416
+ TnThreadID, _ = setup["threadId"].(float64)
417
+ port := tnNewPort()
418
+ var writeMu sync.Mutex
419
+ port.transport = func(data []byte) {
420
+ writeMu.Lock()
421
+ defer writeMu.Unlock()
422
+ tnWriteFrame(conn, 'm', data)
423
+ }
424
+ TnParentPort = port
425
+ go func() {
426
+ for {
427
+ kind, payload, err := tnReadFrame(conn)
428
+ if err != nil {
429
+ TnLoopPost(func() { port.close() })
430
+ return
431
+ }
432
+ if kind == 'm' {
433
+ msg := tnDecodeMessage(payload)
434
+ TnLoopPost(func() { port.deliver(msg) })
435
+ }
436
+ }
437
+ }()
438
+ }
439
+
440
+ func TnGetEnvironmentData(key interface{}) interface{} { return tnEnvironmentData[TnJSString(key)] }
441
+ func TnSetEnvironmentData(key interface{}, value interface{}) {
442
+ if value == nil {
443
+ delete(tnEnvironmentData, TnJSString(key))
444
+ return
445
+ }
446
+ tnEnvironmentData[TnJSString(key)] = value
447
+ }
448
+
449
+ // --- the parent side ---
450
+ var tnNextThreadID float64
451
+
452
+ type TnWorker struct {
453
+ TnEventEmitter
454
+ threadId float64
455
+ cmd *exec.Cmd
456
+ conn net.Conn
457
+ pending [][]byte
458
+ refd bool
459
+ exited bool
460
+ killed bool
461
+ exitWait []chan float64
462
+ }
463
+
464
+ func (w *TnWorker) Get_threadId() float64 { return w.threadId }
465
+
466
+ func TnNewWorker(filename interface{}, options ...interface{}) *TnWorker {
467
+ tnNextThreadID++
468
+ w := &TnWorker{threadId: tnNextThreadID}
469
+ var opts interface{}
470
+ if len(options) > 0 {
471
+ opts = options[0]
472
+ }
473
+ if opts != nil {
474
+ if b, ok := TnGet(opts, "eval").(bool); ok && b {
475
+ panic(TnNodeError("Error", "ERR_WORKER_UNSUPPORTED_OPERATION", "eval workers are not supported by TypeNative"))
476
+ }
477
+ }
478
+ ln, err := net.Listen("tcp", "127.0.0.1:0")
479
+ if err != nil {
480
+ panic(TnNodeError("Error", "ERR_WORKER_INIT_FAILED", err.Error()))
481
+ }
482
+ tokenBytes := make([]byte, 16)
483
+ cryptorand.Read(tokenBytes)
484
+ token := hex.EncodeToString(tokenBytes)
485
+ exe, err := os.Executable()
486
+ if err != nil {
487
+ exe = os.Args[0]
488
+ }
489
+ args := []string{}
490
+ env := os.Environ()
491
+ var workerData interface{}
492
+ if opts != nil {
493
+ workerData = TnGet(opts, "workerData")
494
+ if argv := TnGet(opts, "argv"); argv != nil {
495
+ rv := reflect.ValueOf(argv)
496
+ if rv.Kind() == reflect.Slice {
497
+ for i := 0; i < rv.Len(); i++ {
498
+ args = append(args, TnJSString(rv.Index(i).Interface()))
499
+ }
500
+ }
501
+ }
502
+ if custom := TnGet(opts, "env"); custom != nil {
503
+ if s, ok := custom.(string); !ok || s != "TnShareEnv" {
504
+ env = tnEnvList(custom)
505
+ }
506
+ }
507
+ }
508
+ env = append(env, "TN_WORKER_ADDR="+ln.Addr().String(), "TN_WORKER_TOKEN="+token)
509
+ setup, err := json.Marshal(map[string]interface{}{
510
+ "workerData": tnCloneEncode(workerData),
511
+ "environmentData": tnCloneEncode(tnEnvironmentData),
512
+ "threadId": w.threadId,
513
+ })
514
+ if err != nil {
515
+ panic(TnNodeError("DataCloneError", "", err.Error()))
516
+ }
517
+ cmd := exec.Command(exe, args...)
518
+ cmd.Env = env
519
+ cmd.Stdin = nil
520
+ cmd.Stdout = os.Stdout
521
+ stderr, _ := cmd.StderrPipe()
522
+ w.cmd = cmd
523
+ if err := cmd.Start(); err != nil {
524
+ ln.Close()
525
+ e := TnNodeError("Error", "ERR_WORKER_INIT_FAILED", err.Error())
526
+ TnLoopPost(func() { w.emit("error", e) })
527
+ return w
528
+ }
529
+ w.refd = true
530
+ TnLoopRef()
531
+ // stderr passes through; a Go panic (an uncaught exception) becomes 'error'
532
+ var panicMsg string
533
+ stderrDone := make(chan struct{})
534
+ go func() {
535
+ defer close(stderrDone)
536
+ scanner := bufio.NewScanner(stderr)
537
+ scanner.Buffer(make([]byte, 64*1024), 1024*1024)
538
+ inPanic := false
539
+ for scanner.Scan() {
540
+ line := scanner.Text()
541
+ if !inPanic && strings.HasPrefix(line, "panic: ") {
542
+ inPanic = true
543
+ panicMsg = strings.TrimPrefix(line, "panic: ")
544
+ continue
545
+ }
546
+ if !inPanic {
547
+ fmt.Fprintln(os.Stderr, line)
548
+ }
549
+ }
550
+ }()
551
+ go func() {
552
+ deadline := time.Now().Add(30 * time.Second)
553
+ ln.(*net.TCPListener).SetDeadline(deadline)
554
+ for {
555
+ conn, err := ln.Accept()
556
+ if err != nil {
557
+ ln.Close()
558
+ return
559
+ }
560
+ kind, payload, err := tnReadFrame(conn)
561
+ if err != nil || kind != 't' || string(payload) != token {
562
+ conn.Close()
563
+ continue
564
+ }
565
+ ln.Close()
566
+ tnWriteFrame(conn, 'd', setup)
567
+ TnLoopPost(func() {
568
+ w.conn = conn
569
+ for _, data := range w.pending {
570
+ tnWriteFrame(conn, 'm', data)
571
+ }
572
+ w.pending = nil
573
+ w.emit("online")
574
+ })
575
+ for {
576
+ kind, payload, err := tnReadFrame(conn)
577
+ if err != nil {
578
+ return
579
+ }
580
+ if kind == 'm' {
581
+ msg := tnDecodeMessage(payload)
582
+ TnLoopPost(func() { w.emit("message", msg) })
583
+ }
584
+ }
585
+ }
586
+ }()
587
+ go func() {
588
+ <-stderrDone
589
+ err := cmd.Wait()
590
+ code := float64(0)
591
+ if exitErr, ok := err.(*exec.ExitError); ok {
592
+ code = float64(exitErr.ExitCode())
593
+ }
594
+ TnLoopPost(func() {
595
+ w.exited = true
596
+ if w.conn != nil {
597
+ w.conn.Close()
598
+ }
599
+ if w.killed {
600
+ code = 1
601
+ } else if panicMsg != "" {
602
+ code = 1
603
+ w.emit("error", TnNodeError("Error", "", panicMsg))
604
+ }
605
+ w.emit("exit", code)
606
+ for _, ch := range w.exitWait {
607
+ ch <- code
608
+ }
609
+ if w.refd {
610
+ w.refd = false
611
+ TnLoopUnref()
612
+ }
613
+ })
614
+ }()
615
+ return w
616
+ }
617
+
618
+ func (w *TnWorker) postMessage(value interface{}, transfer ...interface{}) {
619
+ if w.exited {
620
+ return
621
+ }
622
+ data := tnEncodeMessage(value)
623
+ if w.conn == nil {
624
+ w.pending = append(w.pending, data)
625
+ return
626
+ }
627
+ tnWriteFrame(w.conn, 'm', data)
628
+ }
629
+
630
+ // terminate(): stops the worker; resolves with its exit code
631
+ func (w *TnWorker) terminate() chan float64 {
632
+ ch := make(chan float64, 1)
633
+ if w.exited || w.cmd == nil || w.cmd.Process == nil {
634
+ ch <- 0
635
+ return ch
636
+ }
637
+ w.exitWait = append(w.exitWait, ch)
638
+ w.killed = true
639
+ w.cmd.Process.Kill()
640
+ return ch
641
+ }
642
+
643
+ func (w *TnWorker) ref() *TnWorker {
644
+ if !w.refd && !w.exited {
645
+ w.refd = true
646
+ TnLoopRef()
647
+ }
648
+ return w
649
+ }
650
+
651
+ func (w *TnWorker) unref() *TnWorker {
652
+ if w.refd {
653
+ w.refd = false
654
+ TnLoopUnref()
655
+ }
656
+ return w
657
+ }`;
658
+ const EMITTER = 'on=*TnEventEmitter; once=*TnEventEmitter; addListener=*TnEventEmitter; off=*TnEventEmitter; removeListener=*TnEventEmitter; removeAllListeners=*TnEventEmitter; emit=bool; listenerCount=float64';
659
+ export function registerWorkerThreads(r) {
660
+ defineModule(r, 'worker_threads');
661
+ defineHelper(r, 'nodeClone', ['encoding/base64', 'encoding/json', 'fmt', 'math/big', 'reflect', 'strings', 'time', 'unsafe'], ['dynamic', 'orderedMap', 'error'], cloneHelper);
662
+ defineHelper(r, 'nodeWorker', ['bufio', 'crypto/rand', 'encoding/hex', 'encoding/json', 'fmt', 'net', 'os', 'os/exec', 'reflect', 'strings', 'sync', 'time'], ['nodeClone', 'nodeIpc', 'nodeEvents', 'eventLoop', 'nodeInvoke', 'dynamic', 'nodeChild'], workerHelper);
663
+ const use = () => r.helper('nodeWorker');
664
+ defineClass(r, 'worker_threads.Worker', '*TnWorker', 'class', `${EMITTER}; postMessage=; terminate=chan float64; ref=*TnWorker; unref=*TnWorker`, '', 'threadId=float64', '');
665
+ defineClass(r, 'worker_threads.MessagePort', '*TnMessagePort', 'class', `${EMITTER}; postMessage=; start=; close=; ref=*TnMessagePort; unref=*TnMessagePort; hasRef=bool`, '', 'onmessage=interface{}', 'onmessage');
666
+ defineClass(r, 'worker_threads.MessageChannel', '*TnMessageChannel', 'class', '', 'port1=*TnMessagePort; port2=*TnMessagePort', '', '');
667
+ defineClass(r, 'worker_threads.BroadcastChannel', '*TnBroadcastChannel', 'class', 'postMessage=; close=; addEventListener=; ref=*TnBroadcastChannel; unref=*TnBroadcastChannel', '', 'name=string; onmessage=interface{}', 'onmessage');
668
+ defineClass(r, 'worker_threads.MessageEvent', '*TnMessageEvent', 'class', '', 'data=interface{}', 'type=string', '');
669
+ defineClass(r, 'worker_threads.ReceivedMessage', '*TnReceivedMessage', 'class', '', 'message=interface{}', '', '');
670
+ for (const name of ['MessageChannel', 'MessagePort', 'BroadcastChannel']) {
671
+ r.globals[name] = `worker_threads.${name}`;
672
+ }
673
+ const workerListeners = (nodes) => {
674
+ const event = nodes[0];
675
+ const name = event && event.kind === 'StringLiteral' ? String(event.text) : '';
676
+ if (name === 'message' || name === 'error' || name === 'messageerror')
677
+ return ['interface{}'];
678
+ if (name === 'exit')
679
+ return ['float64'];
680
+ return [];
681
+ };
682
+ r.paramTypers['worker_threads.Worker#on'] = workerListeners;
683
+ r.paramTypers['worker_threads.Worker#once'] = workerListeners;
684
+ r.paramTypers['worker_threads.MessagePort#on'] = workerListeners;
685
+ r.paramTypers['worker_threads.MessagePort#once'] = workerListeners;
686
+ r.paramTypers['worker_threads.BroadcastChannel#addEventListener'] = (_n) => ['*TnMessageEvent'];
687
+ r.constructors['worker_threads.Worker'] = (c) => {
688
+ use();
689
+ // The worker runs this program again: other files can't be loaded at runtime
690
+ if (isStringNode(c.nodes[0]) && /\.(m?[jt]s|tsx?)$/.test(String(c.nodes[0].text))) {
691
+ console.warn(`[TypeNative] new Worker('${c.nodes[0].text}') runs the current program; use new Worker(__filename) / new URL(import.meta.url) and branch on isMainThread`);
692
+ }
693
+ return `TnNewWorker(${c.args.join(', ')})`;
694
+ };
695
+ r.constructors['worker_threads.MessageChannel'] = (_c) => {
696
+ use();
697
+ return 'TnNewMessageChannel()';
698
+ };
699
+ r.constructors['worker_threads.BroadcastChannel'] = (c) => {
700
+ use();
701
+ return `TnNewBroadcastChannel(${c.args[0]})`;
702
+ };
703
+ const value = (name, goType, expr) => {
704
+ r.values[`worker_threads.${name}`] = (_c) => {
705
+ use();
706
+ return expr;
707
+ };
708
+ r.valueTypes[`worker_threads.${name}`] = goType;
709
+ };
710
+ value('isMainThread', 'bool', 'TnIsMainThread');
711
+ value('parentPort', '*TnMessagePort', 'TnParentPort');
712
+ value('workerData', 'interface{}', 'TnWorkerData');
713
+ value('threadId', 'float64', 'TnThreadID');
714
+ value('SHARE_ENV', 'string', '"TnShareEnv"');
715
+ value('resourceLimits', 'map[string]interface{}', 'map[string]interface{}{}');
716
+ r.functions['worker_threads.receiveMessageOnPort'] = (c) => {
717
+ use();
718
+ return `TnReceiveMessageOnPort(${c.args[0]})`;
719
+ };
720
+ r.functions['worker_threads.getEnvironmentData'] = (c) => {
721
+ use();
722
+ return `TnGetEnvironmentData(${c.args[0]})`;
723
+ };
724
+ r.functions['worker_threads.setEnvironmentData'] = (c) => {
725
+ use();
726
+ return `TnSetEnvironmentData(${c.args.join(', ')})`;
727
+ };
728
+ r.functions['worker_threads.markAsUntransferable'] = (_c) => '_ = 0';
729
+ r.functions['worker_threads.isMarkedAsUntransferable'] = (_c) => 'false';
730
+ setResults(r, 'worker_threads', 'receiveMessageOnPort=*TnReceivedMessage; getEnvironmentData=interface{}; isMarkedAsUntransferable=bool');
731
+ // __filename / __dirname: the running program
732
+ r.globals['__filename'] = 'globals.__filename';
733
+ r.globals['__dirname'] = 'globals.__dirname';
734
+ r.values['globals.__filename'] = (_c) => {
735
+ r.helper('nodeProcess');
736
+ return 'TnProcessExecPath()';
737
+ };
738
+ r.valueTypes['globals.__filename'] = 'string';
739
+ r.values['globals.__dirname'] = (_c) => {
740
+ r.helper('nodeProcess');
741
+ r.pkg('path/filepath');
742
+ return 'filepath.Dir(TnProcessExecPath())';
743
+ };
744
+ r.valueTypes['globals.__dirname'] = 'string';
745
+ }