typenative 0.1.2 → 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 (504) 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 +30 -21
  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 +98 -6
  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/parse-native.js +3 -2
  54. package/bin/parse-node.js +18 -2
  55. package/bin/transpiler.js +3529 -597
  56. package/bin/version.js +2 -0
  57. package/conformance.md +724 -258
  58. package/govendor/github.com/ncruces/go-sqlite3/LICENSE +21 -0
  59. package/govendor/github.com/ncruces/go-sqlite3/README.md +121 -0
  60. package/govendor/github.com/ncruces/go-sqlite3/backup.go +132 -0
  61. package/govendor/github.com/ncruces/go-sqlite3/blob.go +266 -0
  62. package/govendor/github.com/ncruces/go-sqlite3/config.go +397 -0
  63. package/govendor/github.com/ncruces/go-sqlite3/conn.go +540 -0
  64. package/govendor/github.com/ncruces/go-sqlite3/conn_127.go +93 -0
  65. package/govendor/github.com/ncruces/go-sqlite3/const.go +436 -0
  66. package/govendor/github.com/ncruces/go-sqlite3/context.go +222 -0
  67. package/govendor/github.com/ncruces/go-sqlite3/error.go +182 -0
  68. package/govendor/github.com/ncruces/go-sqlite3/ext.go +153 -0
  69. package/govendor/github.com/ncruces/go-sqlite3/func.go +309 -0
  70. package/govendor/github.com/ncruces/go-sqlite3/go.mod +3 -0
  71. package/govendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk.go +29 -0
  72. package/govendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk_other.go +13 -0
  73. package/govendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk_unix.go +57 -0
  74. package/govendor/github.com/ncruces/go-sqlite3/internal/errutil/error.go +41 -0
  75. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/alloc.go +128 -0
  76. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/const.go +122 -0
  77. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/error.go +77 -0
  78. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem.go +116 -0
  79. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem_other.go +34 -0
  80. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem_unix.go +87 -0
  81. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mem_windows.go +149 -0
  82. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mmap_unix.go +80 -0
  83. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/mmap_windows.go +129 -0
  84. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/sys_windows.go +60 -0
  85. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/wrap.go +82 -0
  86. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/wrap_sys.go +113 -0
  87. package/govendor/github.com/ncruces/go-sqlite3/internal/sqlite3_wrap/wrap_vfs.go +181 -0
  88. package/govendor/github.com/ncruces/go-sqlite3/internal/testenv/env.go +55 -0
  89. package/govendor/github.com/ncruces/go-sqlite3/internal/util/json.go +54 -0
  90. package/govendor/github.com/ncruces/go-sqlite3/internal/util/json_v2.go +54 -0
  91. package/govendor/github.com/ncruces/go-sqlite3/internal/util/math.go +29 -0
  92. package/govendor/github.com/ncruces/go-sqlite3/internal/util/page.go +5 -0
  93. package/govendor/github.com/ncruces/go-sqlite3/internal/util/parse.go +142 -0
  94. package/govendor/github.com/ncruces/go-sqlite3/internal/util/pointer.go +3 -0
  95. package/govendor/github.com/ncruces/go-sqlite3/internal/util/reflect.go +10 -0
  96. package/govendor/github.com/ncruces/go-sqlite3/json.go +100 -0
  97. package/govendor/github.com/ncruces/go-sqlite3/json_v2.go +116 -0
  98. package/govendor/github.com/ncruces/go-sqlite3/pointer.go +13 -0
  99. package/govendor/github.com/ncruces/go-sqlite3/quote.go +140 -0
  100. package/govendor/github.com/ncruces/go-sqlite3/stmt.go +692 -0
  101. package/govendor/github.com/ncruces/go-sqlite3/time.go +360 -0
  102. package/govendor/github.com/ncruces/go-sqlite3/txn.go +374 -0
  103. package/govendor/github.com/ncruces/go-sqlite3/value.go +212 -0
  104. package/govendor/github.com/ncruces/go-sqlite3/vfs/README.md +133 -0
  105. package/govendor/github.com/ncruces/go-sqlite3/vfs/api.go +239 -0
  106. package/govendor/github.com/ncruces/go-sqlite3/vfs/cksm.go +143 -0
  107. package/govendor/github.com/ncruces/go-sqlite3/vfs/const.go +256 -0
  108. package/govendor/github.com/ncruces/go-sqlite3/vfs/file.go +260 -0
  109. package/govendor/github.com/ncruces/go-sqlite3/vfs/filename.go +187 -0
  110. package/govendor/github.com/ncruces/go-sqlite3/vfs/lock.go +128 -0
  111. package/govendor/github.com/ncruces/go-sqlite3/vfs/lock_other.go +23 -0
  112. package/govendor/github.com/ncruces/go-sqlite3/vfs/map.go +63 -0
  113. package/govendor/github.com/ncruces/go-sqlite3/vfs/map_other.go +13 -0
  114. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_bsd.go +110 -0
  115. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_darwin.go +131 -0
  116. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_dotlk.go +140 -0
  117. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_f2fs_linux.go +56 -0
  118. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_linux.go +117 -0
  119. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_ofd.go +59 -0
  120. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std.go +50 -0
  121. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_alloc.go +19 -0
  122. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_atomic.go +9 -0
  123. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_rw.go +13 -0
  124. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_sync.go +9 -0
  125. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_std_temp.go +16 -0
  126. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_unix.go +108 -0
  127. package/govendor/github.com/ncruces/go-sqlite3/vfs/os_windows.go +180 -0
  128. package/govendor/github.com/ncruces/go-sqlite3/vfs/registry.go +48 -0
  129. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm.go +26 -0
  130. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_bsd.go +258 -0
  131. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_copy.go +90 -0
  132. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_dotlk.go +168 -0
  133. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_memlk.go +52 -0
  134. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_ofd.go +185 -0
  135. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_other.go +21 -0
  136. package/govendor/github.com/ncruces/go-sqlite3/vfs/shm_windows.go +124 -0
  137. package/govendor/github.com/ncruces/go-sqlite3/vfs/vfs.go +455 -0
  138. package/govendor/github.com/ncruces/go-sqlite3/vtab.go +677 -0
  139. package/govendor/github.com/ncruces/go-sqlite3/wrap.go +48 -0
  140. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/LICENSE +18 -0
  141. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/README.md +11 -0
  142. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/go.mod +3 -0
  143. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/libc.go +215 -0
  144. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/sqlite3.dat +0 -0
  145. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/sqlite3.go +157903 -0
  146. package/govendor/github.com/ncruces/go-sqlite3-wasm/v6/tools.sh +38 -0
  147. package/govendor/github.com/ncruces/julianday/LICENSE +21 -0
  148. package/govendor/github.com/ncruces/julianday/README.md +9 -0
  149. package/govendor/github.com/ncruces/julianday/go.mod +3 -0
  150. package/govendor/github.com/ncruces/julianday/julianday.go +124 -0
  151. package/govendor/golang.org/x/sys/LICENSE +27 -0
  152. package/govendor/golang.org/x/sys/PATENTS +22 -0
  153. package/govendor/golang.org/x/sys/go.mod +3 -0
  154. package/govendor/golang.org/x/sys/unix/README.md +184 -0
  155. package/govendor/golang.org/x/sys/unix/affinity_linux.go +189 -0
  156. package/govendor/golang.org/x/sys/unix/aliases.go +13 -0
  157. package/govendor/golang.org/x/sys/unix/asm_aix_ppc64.s +17 -0
  158. package/govendor/golang.org/x/sys/unix/asm_bsd_386.s +27 -0
  159. package/govendor/golang.org/x/sys/unix/asm_bsd_amd64.s +27 -0
  160. package/govendor/golang.org/x/sys/unix/asm_bsd_arm.s +27 -0
  161. package/govendor/golang.org/x/sys/unix/asm_bsd_arm64.s +27 -0
  162. package/govendor/golang.org/x/sys/unix/asm_bsd_ppc64.s +29 -0
  163. package/govendor/golang.org/x/sys/unix/asm_bsd_riscv64.s +27 -0
  164. package/govendor/golang.org/x/sys/unix/asm_linux_386.s +65 -0
  165. package/govendor/golang.org/x/sys/unix/asm_linux_amd64.s +57 -0
  166. package/govendor/golang.org/x/sys/unix/asm_linux_arm.s +56 -0
  167. package/govendor/golang.org/x/sys/unix/asm_linux_arm64.s +50 -0
  168. package/govendor/golang.org/x/sys/unix/asm_linux_loong64.s +51 -0
  169. package/govendor/golang.org/x/sys/unix/asm_linux_mips64x.s +54 -0
  170. package/govendor/golang.org/x/sys/unix/asm_linux_mipsx.s +52 -0
  171. package/govendor/golang.org/x/sys/unix/asm_linux_ppc64x.s +42 -0
  172. package/govendor/golang.org/x/sys/unix/asm_linux_riscv64.s +47 -0
  173. package/govendor/golang.org/x/sys/unix/asm_linux_s390x.s +54 -0
  174. package/govendor/golang.org/x/sys/unix/asm_openbsd_mips64.s +29 -0
  175. package/govendor/golang.org/x/sys/unix/asm_solaris_amd64.s +17 -0
  176. package/govendor/golang.org/x/sys/unix/asm_zos_s390x.s +382 -0
  177. package/govendor/golang.org/x/sys/unix/auxv.go +36 -0
  178. package/govendor/golang.org/x/sys/unix/auxv_unsupported.go +13 -0
  179. package/govendor/golang.org/x/sys/unix/bluetooth_linux.go +36 -0
  180. package/govendor/golang.org/x/sys/unix/bpxsvc_zos.go +657 -0
  181. package/govendor/golang.org/x/sys/unix/bpxsvc_zos.s +192 -0
  182. package/govendor/golang.org/x/sys/unix/cap_freebsd.go +195 -0
  183. package/govendor/golang.org/x/sys/unix/constants.go +13 -0
  184. package/govendor/golang.org/x/sys/unix/dev_aix_ppc.go +26 -0
  185. package/govendor/golang.org/x/sys/unix/dev_aix_ppc64.go +28 -0
  186. package/govendor/golang.org/x/sys/unix/dev_darwin.go +24 -0
  187. package/govendor/golang.org/x/sys/unix/dev_dragonfly.go +30 -0
  188. package/govendor/golang.org/x/sys/unix/dev_freebsd.go +30 -0
  189. package/govendor/golang.org/x/sys/unix/dev_linux.go +42 -0
  190. package/govendor/golang.org/x/sys/unix/dev_netbsd.go +29 -0
  191. package/govendor/golang.org/x/sys/unix/dev_openbsd.go +29 -0
  192. package/govendor/golang.org/x/sys/unix/dev_zos.go +28 -0
  193. package/govendor/golang.org/x/sys/unix/dirent.go +102 -0
  194. package/govendor/golang.org/x/sys/unix/endian_big.go +9 -0
  195. package/govendor/golang.org/x/sys/unix/endian_little.go +9 -0
  196. package/govendor/golang.org/x/sys/unix/env_unix.go +31 -0
  197. package/govendor/golang.org/x/sys/unix/fcntl.go +36 -0
  198. package/govendor/golang.org/x/sys/unix/fcntl_darwin.go +24 -0
  199. package/govendor/golang.org/x/sys/unix/fcntl_linux_32bit.go +13 -0
  200. package/govendor/golang.org/x/sys/unix/fdset.go +27 -0
  201. package/govendor/golang.org/x/sys/unix/gccgo.go +59 -0
  202. package/govendor/golang.org/x/sys/unix/gccgo_c.c +44 -0
  203. package/govendor/golang.org/x/sys/unix/gccgo_linux_amd64.go +20 -0
  204. package/govendor/golang.org/x/sys/unix/ifreq_linux.go +145 -0
  205. package/govendor/golang.org/x/sys/unix/ioctl_linux.go +341 -0
  206. package/govendor/golang.org/x/sys/unix/ioctl_signed.go +74 -0
  207. package/govendor/golang.org/x/sys/unix/ioctl_unsigned.go +74 -0
  208. package/govendor/golang.org/x/sys/unix/ioctl_zos.go +71 -0
  209. package/govendor/golang.org/x/sys/unix/mkall.sh +250 -0
  210. package/govendor/golang.org/x/sys/unix/mkerrors.sh +807 -0
  211. package/govendor/golang.org/x/sys/unix/mmap_nomremap.go +13 -0
  212. package/govendor/golang.org/x/sys/unix/mremap.go +57 -0
  213. package/govendor/golang.org/x/sys/unix/pagesize_unix.go +15 -0
  214. package/govendor/golang.org/x/sys/unix/pledge_openbsd.go +111 -0
  215. package/govendor/golang.org/x/sys/unix/ptrace_darwin.go +11 -0
  216. package/govendor/golang.org/x/sys/unix/ptrace_ios.go +11 -0
  217. package/govendor/golang.org/x/sys/unix/race.go +30 -0
  218. package/govendor/golang.org/x/sys/unix/race0.go +25 -0
  219. package/govendor/golang.org/x/sys/unix/readdirent_getdents.go +12 -0
  220. package/govendor/golang.org/x/sys/unix/readdirent_getdirentries.go +19 -0
  221. package/govendor/golang.org/x/sys/unix/readv_unix.go +103 -0
  222. package/govendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go +16 -0
  223. package/govendor/golang.org/x/sys/unix/sockcmsg_linux.go +85 -0
  224. package/govendor/golang.org/x/sys/unix/sockcmsg_unix.go +106 -0
  225. package/govendor/golang.org/x/sys/unix/sockcmsg_unix_other.go +46 -0
  226. package/govendor/golang.org/x/sys/unix/sockcmsg_zos.go +58 -0
  227. package/govendor/golang.org/x/sys/unix/symaddr_zos_s390x.s +75 -0
  228. package/govendor/golang.org/x/sys/unix/syscall.go +86 -0
  229. package/govendor/golang.org/x/sys/unix/syscall_aix.go +582 -0
  230. package/govendor/golang.org/x/sys/unix/syscall_aix_ppc.go +52 -0
  231. package/govendor/golang.org/x/sys/unix/syscall_aix_ppc64.go +83 -0
  232. package/govendor/golang.org/x/sys/unix/syscall_bsd.go +609 -0
  233. package/govendor/golang.org/x/sys/unix/syscall_darwin.go +711 -0
  234. package/govendor/golang.org/x/sys/unix/syscall_darwin_amd64.go +50 -0
  235. package/govendor/golang.org/x/sys/unix/syscall_darwin_arm64.go +50 -0
  236. package/govendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go +26 -0
  237. package/govendor/golang.org/x/sys/unix/syscall_dragonfly.go +359 -0
  238. package/govendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go +56 -0
  239. package/govendor/golang.org/x/sys/unix/syscall_freebsd.go +455 -0
  240. package/govendor/golang.org/x/sys/unix/syscall_freebsd_386.go +64 -0
  241. package/govendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go +64 -0
  242. package/govendor/golang.org/x/sys/unix/syscall_freebsd_arm.go +60 -0
  243. package/govendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go +60 -0
  244. package/govendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go +60 -0
  245. package/govendor/golang.org/x/sys/unix/syscall_hurd.go +30 -0
  246. package/govendor/golang.org/x/sys/unix/syscall_hurd_386.go +28 -0
  247. package/govendor/golang.org/x/sys/unix/syscall_illumos.go +78 -0
  248. package/govendor/golang.org/x/sys/unix/syscall_linux.go +2574 -0
  249. package/govendor/golang.org/x/sys/unix/syscall_linux_386.go +313 -0
  250. package/govendor/golang.org/x/sys/unix/syscall_linux_alarm.go +12 -0
  251. package/govendor/golang.org/x/sys/unix/syscall_linux_amd64.go +144 -0
  252. package/govendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go +12 -0
  253. package/govendor/golang.org/x/sys/unix/syscall_linux_arm.go +218 -0
  254. package/govendor/golang.org/x/sys/unix/syscall_linux_arm64.go +188 -0
  255. package/govendor/golang.org/x/sys/unix/syscall_linux_gc.go +14 -0
  256. package/govendor/golang.org/x/sys/unix/syscall_linux_gc_386.go +16 -0
  257. package/govendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go +13 -0
  258. package/govendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go +30 -0
  259. package/govendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go +20 -0
  260. package/govendor/golang.org/x/sys/unix/syscall_linux_loong64.go +220 -0
  261. package/govendor/golang.org/x/sys/unix/syscall_linux_mips64x.go +187 -0
  262. package/govendor/golang.org/x/sys/unix/syscall_linux_mipsx.go +173 -0
  263. package/govendor/golang.org/x/sys/unix/syscall_linux_ppc.go +203 -0
  264. package/govendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go +114 -0
  265. package/govendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +193 -0
  266. package/govendor/golang.org/x/sys/unix/syscall_linux_s390x.go +295 -0
  267. package/govendor/golang.org/x/sys/unix/syscall_linux_sparc64.go +111 -0
  268. package/govendor/golang.org/x/sys/unix/syscall_netbsd.go +388 -0
  269. package/govendor/golang.org/x/sys/unix/syscall_netbsd_386.go +37 -0
  270. package/govendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go +37 -0
  271. package/govendor/golang.org/x/sys/unix/syscall_netbsd_arm.go +37 -0
  272. package/govendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go +37 -0
  273. package/govendor/golang.org/x/sys/unix/syscall_openbsd.go +346 -0
  274. package/govendor/golang.org/x/sys/unix/syscall_openbsd_386.go +41 -0
  275. package/govendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go +41 -0
  276. package/govendor/golang.org/x/sys/unix/syscall_openbsd_arm.go +41 -0
  277. package/govendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go +41 -0
  278. package/govendor/golang.org/x/sys/unix/syscall_openbsd_libc.go +26 -0
  279. package/govendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go +39 -0
  280. package/govendor/golang.org/x/sys/unix/syscall_openbsd_ppc64.go +41 -0
  281. package/govendor/golang.org/x/sys/unix/syscall_openbsd_riscv64.go +41 -0
  282. package/govendor/golang.org/x/sys/unix/syscall_solaris.go +1183 -0
  283. package/govendor/golang.org/x/sys/unix/syscall_solaris_amd64.go +27 -0
  284. package/govendor/golang.org/x/sys/unix/syscall_unix.go +619 -0
  285. package/govendor/golang.org/x/sys/unix/syscall_unix_gc.go +14 -0
  286. package/govendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go +22 -0
  287. package/govendor/golang.org/x/sys/unix/syscall_zos_s390x.go +3213 -0
  288. package/govendor/golang.org/x/sys/unix/sysvshm_linux.go +20 -0
  289. package/govendor/golang.org/x/sys/unix/sysvshm_unix.go +51 -0
  290. package/govendor/golang.org/x/sys/unix/sysvshm_unix_other.go +13 -0
  291. package/govendor/golang.org/x/sys/unix/timestruct.go +76 -0
  292. package/govendor/golang.org/x/sys/unix/unveil_openbsd.go +51 -0
  293. package/govendor/golang.org/x/sys/unix/vgetrandom_linux.go +13 -0
  294. package/govendor/golang.org/x/sys/unix/vgetrandom_unsupported.go +11 -0
  295. package/govendor/golang.org/x/sys/unix/xattr_bsd.go +280 -0
  296. package/govendor/golang.org/x/sys/unix/zerrors_aix_ppc.go +1384 -0
  297. package/govendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go +1385 -0
  298. package/govendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +1922 -0
  299. package/govendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +1922 -0
  300. package/govendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go +1737 -0
  301. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_386.go +2042 -0
  302. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go +2039 -0
  303. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go +2033 -0
  304. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go +2033 -0
  305. package/govendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go +2147 -0
  306. package/govendor/golang.org/x/sys/unix/zerrors_linux.go +4209 -0
  307. package/govendor/golang.org/x/sys/unix/zerrors_linux_386.go +882 -0
  308. package/govendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +882 -0
  309. package/govendor/golang.org/x/sys/unix/zerrors_linux_arm.go +887 -0
  310. package/govendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +884 -0
  311. package/govendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +874 -0
  312. package/govendor/golang.org/x/sys/unix/zerrors_linux_mips.go +888 -0
  313. package/govendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +888 -0
  314. package/govendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +888 -0
  315. package/govendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +888 -0
  316. package/govendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +940 -0
  317. package/govendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +944 -0
  318. package/govendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +944 -0
  319. package/govendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +884 -0
  320. package/govendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +943 -0
  321. package/govendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +992 -0
  322. package/govendor/golang.org/x/sys/unix/zerrors_netbsd_386.go +1779 -0
  323. package/govendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go +1769 -0
  324. package/govendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go +1758 -0
  325. package/govendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go +1769 -0
  326. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_386.go +1905 -0
  327. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go +1905 -0
  328. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go +1905 -0
  329. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go +1905 -0
  330. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go +1905 -0
  331. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_ppc64.go +1904 -0
  332. package/govendor/golang.org/x/sys/unix/zerrors_openbsd_riscv64.go +1903 -0
  333. package/govendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go +1556 -0
  334. package/govendor/golang.org/x/sys/unix/zerrors_zos_s390x.go +990 -0
  335. package/govendor/golang.org/x/sys/unix/zptrace_armnn_linux.go +40 -0
  336. package/govendor/golang.org/x/sys/unix/zptrace_linux_arm64.go +17 -0
  337. package/govendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go +49 -0
  338. package/govendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go +49 -0
  339. package/govendor/golang.org/x/sys/unix/zptrace_x86_linux.go +79 -0
  340. package/govendor/golang.org/x/sys/unix/zsymaddr_zos_s390x.s +364 -0
  341. package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go +1461 -0
  342. package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go +1420 -0
  343. package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go +1188 -0
  344. package/govendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go +1069 -0
  345. package/govendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +2728 -0
  346. package/govendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +799 -0
  347. package/govendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +2728 -0
  348. package/govendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +799 -0
  349. package/govendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go +1666 -0
  350. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go +1886 -0
  351. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go +1886 -0
  352. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go +1886 -0
  353. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go +1886 -0
  354. package/govendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go +1886 -0
  355. package/govendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go +101 -0
  356. package/govendor/golang.org/x/sys/unix/zsyscall_linux.go +2267 -0
  357. package/govendor/golang.org/x/sys/unix/zsyscall_linux_386.go +469 -0
  358. package/govendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go +636 -0
  359. package/govendor/golang.org/x/sys/unix/zsyscall_linux_arm.go +584 -0
  360. package/govendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go +535 -0
  361. package/govendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go +469 -0
  362. package/govendor/golang.org/x/sys/unix/zsyscall_linux_mips.go +636 -0
  363. package/govendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go +630 -0
  364. package/govendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go +619 -0
  365. package/govendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go +636 -0
  366. package/govendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go +641 -0
  367. package/govendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go +687 -0
  368. package/govendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go +687 -0
  369. package/govendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go +531 -0
  370. package/govendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go +478 -0
  371. package/govendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go +631 -0
  372. package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go +1848 -0
  373. package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go +1848 -0
  374. package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go +1848 -0
  375. package/govendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go +1848 -0
  376. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +2407 -0
  377. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s +719 -0
  378. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +2407 -0
  379. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s +719 -0
  380. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +2407 -0
  381. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s +719 -0
  382. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +2407 -0
  383. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s +719 -0
  384. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go +2407 -0
  385. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s +719 -0
  386. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go +2407 -0
  387. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s +862 -0
  388. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go +2407 -0
  389. package/govendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s +719 -0
  390. package/govendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +2217 -0
  391. package/govendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go +3458 -0
  392. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go +280 -0
  393. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go +280 -0
  394. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go +280 -0
  395. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go +280 -0
  396. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go +280 -0
  397. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_ppc64.go +280 -0
  398. package/govendor/golang.org/x/sys/unix/zsysctl_openbsd_riscv64.go +281 -0
  399. package/govendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go +439 -0
  400. package/govendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go +437 -0
  401. package/govendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go +316 -0
  402. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go +393 -0
  403. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go +393 -0
  404. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go +393 -0
  405. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go +393 -0
  406. package/govendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go +393 -0
  407. package/govendor/golang.org/x/sys/unix/zsysnum_linux_386.go +470 -0
  408. package/govendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +394 -0
  409. package/govendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +434 -0
  410. package/govendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +337 -0
  411. package/govendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +334 -0
  412. package/govendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +454 -0
  413. package/govendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +384 -0
  414. package/govendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +384 -0
  415. package/govendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +454 -0
  416. package/govendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +461 -0
  417. package/govendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +433 -0
  418. package/govendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +433 -0
  419. package/govendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +338 -0
  420. package/govendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +399 -0
  421. package/govendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +413 -0
  422. package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go +274 -0
  423. package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go +274 -0
  424. package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go +274 -0
  425. package/govendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go +274 -0
  426. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go +219 -0
  427. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go +219 -0
  428. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go +219 -0
  429. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go +218 -0
  430. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go +221 -0
  431. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_ppc64.go +217 -0
  432. package/govendor/golang.org/x/sys/unix/zsysnum_openbsd_riscv64.go +218 -0
  433. package/govendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go +2852 -0
  434. package/govendor/golang.org/x/sys/unix/ztypes_aix_ppc.go +353 -0
  435. package/govendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go +357 -0
  436. package/govendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +878 -0
  437. package/govendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +878 -0
  438. package/govendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go +473 -0
  439. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_386.go +651 -0
  440. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go +656 -0
  441. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go +642 -0
  442. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go +636 -0
  443. package/govendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go +638 -0
  444. package/govendor/golang.org/x/sys/unix/ztypes_linux.go +6547 -0
  445. package/govendor/golang.org/x/sys/unix/ztypes_linux_386.go +747 -0
  446. package/govendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +761 -0
  447. package/govendor/golang.org/x/sys/unix/ztypes_linux_arm.go +741 -0
  448. package/govendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +740 -0
  449. package/govendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +741 -0
  450. package/govendor/golang.org/x/sys/unix/ztypes_linux_mips.go +746 -0
  451. package/govendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +743 -0
  452. package/govendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +743 -0
  453. package/govendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +746 -0
  454. package/govendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +754 -0
  455. package/govendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +749 -0
  456. package/govendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +749 -0
  457. package/govendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +828 -0
  458. package/govendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +763 -0
  459. package/govendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +744 -0
  460. package/govendor/golang.org/x/sys/unix/ztypes_netbsd_386.go +585 -0
  461. package/govendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go +593 -0
  462. package/govendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go +590 -0
  463. package/govendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go +593 -0
  464. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_386.go +568 -0
  465. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go +568 -0
  466. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go +575 -0
  467. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go +568 -0
  468. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go +568 -0
  469. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_ppc64.go +570 -0
  470. package/govendor/golang.org/x/sys/unix/ztypes_openbsd_riscv64.go +570 -0
  471. package/govendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go +516 -0
  472. package/govendor/golang.org/x/sys/unix/ztypes_zos_s390x.go +552 -0
  473. package/govendor/golang.org/x/sys/windows/aliases.go +13 -0
  474. package/govendor/golang.org/x/sys/windows/dll_windows.go +380 -0
  475. package/govendor/golang.org/x/sys/windows/env_windows.go +57 -0
  476. package/govendor/golang.org/x/sys/windows/eventlog.go +20 -0
  477. package/govendor/golang.org/x/sys/windows/exec_windows.go +248 -0
  478. package/govendor/golang.org/x/sys/windows/memory_windows.go +48 -0
  479. package/govendor/golang.org/x/sys/windows/mkerrors.bash +70 -0
  480. package/govendor/golang.org/x/sys/windows/mkknownfolderids.bash +27 -0
  481. package/govendor/golang.org/x/sys/windows/mksyscall.go +9 -0
  482. package/govendor/golang.org/x/sys/windows/race.go +30 -0
  483. package/govendor/golang.org/x/sys/windows/race0.go +25 -0
  484. package/govendor/golang.org/x/sys/windows/security_windows.go +1537 -0
  485. package/govendor/golang.org/x/sys/windows/service.go +257 -0
  486. package/govendor/golang.org/x/sys/windows/setupapi_windows.go +1425 -0
  487. package/govendor/golang.org/x/sys/windows/str.go +22 -0
  488. package/govendor/golang.org/x/sys/windows/syscall.go +104 -0
  489. package/govendor/golang.org/x/sys/windows/syscall_windows.go +1952 -0
  490. package/govendor/golang.org/x/sys/windows/types_windows.go +4058 -0
  491. package/govendor/golang.org/x/sys/windows/types_windows_386.go +35 -0
  492. package/govendor/golang.org/x/sys/windows/types_windows_amd64.go +34 -0
  493. package/govendor/golang.org/x/sys/windows/types_windows_arm.go +35 -0
  494. package/govendor/golang.org/x/sys/windows/types_windows_arm64.go +34 -0
  495. package/govendor/golang.org/x/sys/windows/zerrors_windows.go +9468 -0
  496. package/govendor/golang.org/x/sys/windows/zknownfolderids_windows.go +149 -0
  497. package/govendor/golang.org/x/sys/windows/zsyscall_windows.go +4828 -0
  498. package/govendor/manifest.txt +7 -0
  499. package/package.json +6 -1
  500. package/tsparser/main.go +37 -3
  501. package/tsparser/tsparser.exe +2 -2
  502. package/types/typenative-go.d.ts +15159 -5
  503. package/types/typenative-npm.d.ts +2637 -30
  504. package/types/typenative.d.ts +1092 -56
package/bin/node/fs.js ADDED
@@ -0,0 +1,998 @@
1
+ // node:fs — the synchronous file system API. Errors are Node's system errors
2
+ // (err.code 'ENOENT', err.syscall, err.path, Node's message format).
3
+ import { defineClass, defineHelper, defineModule, setResults, encodingOf, getOption, optionIsTrue, isObjectLiteral, isStringNode } from './registry.js';
4
+ const fsErrorsHelper = `// Node-style system errors from Go errors: code, errno, syscall, path
5
+ var tnErrnoCodes = map[string]float64{
6
+ "EPERM": -1, "ENOENT": -2, "EIO": -5, "EBADF": -9, "EACCES": -13, "EBUSY": -16, "EEXIST": -17,
7
+ "EXDEV": -18, "ENOTDIR": -20, "EISDIR": -21, "EINVAL": -22, "EMFILE": -24, "ENOSPC": -28,
8
+ "ENOTEMPTY": -39, "ELOOP": -40,
9
+ }
10
+
11
+ var tnErrnoDescriptions = map[string]string{
12
+ "EPERM": "operation not permitted", "ENOENT": "no such file or directory", "EIO": "i/o error",
13
+ "EBADF": "bad file descriptor", "EACCES": "permission denied", "EBUSY": "resource busy or locked",
14
+ "EEXIST": "file already exists", "EXDEV": "cross-device link not permitted", "ENOTDIR": "not a directory",
15
+ "EISDIR": "illegal operation on a directory", "EINVAL": "invalid argument", "EMFILE": "too many open files",
16
+ "ENOSPC": "no space left on device", "ENOTEMPTY": "directory not empty", "ELOOP": "too many symbolic links encountered",
17
+ }
18
+
19
+ func tnErrnoCode(err error) string {
20
+ msg := strings.ToLower(err.Error())
21
+ switch {
22
+ case strings.Contains(msg, "not a directory"):
23
+ return "ENOTDIR"
24
+ case strings.Contains(msg, "is a directory") || strings.Contains(msg, "incorrect function"):
25
+ return "EISDIR"
26
+ case strings.Contains(msg, "directory not empty") || strings.Contains(msg, "directory is not empty"):
27
+ return "ENOTEMPTY"
28
+ case errors.Is(err, fs.ErrNotExist):
29
+ return "ENOENT"
30
+ case errors.Is(err, fs.ErrExist):
31
+ return "EEXIST"
32
+ case strings.Contains(msg, "operation not permitted"):
33
+ return "EPERM"
34
+ case errors.Is(err, fs.ErrPermission):
35
+ return "EACCES"
36
+ case strings.Contains(msg, "bad file descriptor") || errors.Is(err, fs.ErrClosed):
37
+ return "EBADF"
38
+ case strings.Contains(msg, "too many open files"):
39
+ return "EMFILE"
40
+ case strings.Contains(msg, "invalid argument"):
41
+ return "EINVAL"
42
+ case strings.Contains(msg, "cross-device") || strings.Contains(msg, "different disk drive"):
43
+ return "EXDEV"
44
+ case strings.Contains(msg, "being used by another process"):
45
+ return "EBUSY"
46
+ case strings.Contains(msg, "too many levels of symbolic links"):
47
+ return "ELOOP"
48
+ }
49
+ return "EIO"
50
+ }
51
+
52
+ // ENOENT: no such file or directory, open 'x' (dest: rename 'a' -> 'b')
53
+ func TnSysError(err error, syscall string, path string, dest ...string) *TnError {
54
+ code := tnErrnoCode(err)
55
+ msg := code + ": " + tnErrnoDescriptions[code] + ", " + syscall
56
+ if path != "" {
57
+ msg += " '" + path + "'"
58
+ }
59
+ if len(dest) > 0 {
60
+ msg += " -> '" + dest[0] + "'"
61
+ }
62
+ e := TnNodeError("Error", code, msg)
63
+ e.props["errno"] = tnErrnoCodes[code]
64
+ e.props["syscall"] = syscall
65
+ if path != "" {
66
+ e.props["path"] = path
67
+ }
68
+ if len(dest) > 0 {
69
+ e.props["dest"] = dest[0]
70
+ }
71
+ return e
72
+ }
73
+
74
+ func tnFsCheck(err error, syscall string, path string, dest ...string) {
75
+ if err != nil {
76
+ panic(TnSysError(err, syscall, path, dest...))
77
+ }
78
+ }`;
79
+ const fsHelper = `// node:fs (sync)
80
+ func TnReadFileBytes(path string) []byte {
81
+ data, err := os.ReadFile(path)
82
+ if err != nil {
83
+ if tnErrnoCode(err) == "EISDIR" {
84
+ panic(TnSysError(err, "read", ""))
85
+ }
86
+ tnFsCheck(err, "open", path)
87
+ }
88
+ return data
89
+ }
90
+
91
+ func TnReadFileString(path string, enc string) string {
92
+ return TnBufferToString(TnReadFileBytes(path), enc)
93
+ }
94
+
95
+ // File contents from a string (in an encoding), a Buffer or any value
96
+ func TnFsData(v interface{}, enc string) []byte {
97
+ switch x := v.(type) {
98
+ case string:
99
+ return TnBufferFromString(x, enc)
100
+ case []byte:
101
+ return x
102
+ }
103
+ return []byte(fmt.Sprint(v))
104
+ }
105
+
106
+ func tnOpenFlags(flag string) int {
107
+ switch flag {
108
+ case "r+", "rs+":
109
+ return os.O_RDWR
110
+ case "w":
111
+ return os.O_WRONLY | os.O_CREATE | os.O_TRUNC
112
+ case "wx", "xw":
113
+ return os.O_WRONLY | os.O_CREATE | os.O_EXCL
114
+ case "w+":
115
+ return os.O_RDWR | os.O_CREATE | os.O_TRUNC
116
+ case "wx+", "xw+":
117
+ return os.O_RDWR | os.O_CREATE | os.O_EXCL
118
+ case "a", "as":
119
+ return os.O_WRONLY | os.O_CREATE | os.O_APPEND
120
+ case "ax", "xa":
121
+ return os.O_WRONLY | os.O_CREATE | os.O_APPEND | os.O_EXCL
122
+ case "a+", "as+":
123
+ return os.O_RDWR | os.O_CREATE | os.O_APPEND
124
+ case "ax+", "xa+":
125
+ return os.O_RDWR | os.O_CREATE | os.O_APPEND | os.O_EXCL
126
+ }
127
+ return os.O_RDONLY
128
+ }
129
+
130
+ func TnWriteFile(path string, data []byte, flag string) {
131
+ if flag == "" {
132
+ flag = "w"
133
+ }
134
+ f, err := os.OpenFile(path, tnOpenFlags(flag), 0o666)
135
+ tnFsCheck(err, "open", path)
136
+ defer f.Close()
137
+ _, err = f.Write(data)
138
+ tnFsCheck(err, "write", path)
139
+ }
140
+
141
+ func TnMkdir(path string, recursive bool) {
142
+ if recursive {
143
+ if info, err := os.Stat(path); err == nil && !info.IsDir() {
144
+ panic(TnSysError(fs.ErrExist, "mkdir", path))
145
+ }
146
+ tnFsCheck(os.MkdirAll(path, 0o777), "mkdir", path)
147
+ return
148
+ }
149
+ tnFsCheck(os.Mkdir(path, 0o777), "mkdir", path)
150
+ }
151
+
152
+ type TnDirent struct {
153
+ name string
154
+ parentPath string
155
+ path string
156
+ mode fs.FileMode
157
+ }
158
+
159
+ func (d *TnDirent) isFile() bool { return d.mode.IsRegular() }
160
+ func (d *TnDirent) isDirectory() bool { return d.mode.IsDir() }
161
+ func (d *TnDirent) isSymbolicLink() bool { return d.mode&fs.ModeSymlink != 0 }
162
+ func (d *TnDirent) isFIFO() bool { return d.mode&fs.ModeNamedPipe != 0 }
163
+ func (d *TnDirent) isSocket() bool { return d.mode&fs.ModeSocket != 0 }
164
+ func (d *TnDirent) isBlockDevice() bool { return d.mode&fs.ModeDevice != 0 && d.mode&fs.ModeCharDevice == 0 }
165
+ func (d *TnDirent) isCharacterDevice() bool { return d.mode&fs.ModeCharDevice != 0 }
166
+
167
+ func tnReadDirEntries(dir string, recursive bool) []*TnDirent {
168
+ entries, err := os.ReadDir(dir)
169
+ tnFsCheck(err, "scandir", dir)
170
+ out := []*TnDirent{}
171
+ for _, e := range entries {
172
+ out = append(out, &TnDirent{name: e.Name(), parentPath: dir, path: dir, mode: e.Type()})
173
+ if recursive && e.IsDir() {
174
+ for _, child := range tnReadDirEntries(filepath.Join(dir, e.Name()), true) {
175
+ out = append(out, child)
176
+ }
177
+ }
178
+ }
179
+ return out
180
+ }
181
+
182
+ func TnReadDirents(dir string, recursive bool) []*TnDirent {
183
+ return tnReadDirEntries(dir, recursive)
184
+ }
185
+
186
+ // readdirSync names; recursive names are relative to dir
187
+ func TnReadDirNames(dir string, recursive bool) []string {
188
+ names := []string{}
189
+ for _, e := range tnReadDirEntries(dir, recursive) {
190
+ rel, err := filepath.Rel(dir, filepath.Join(e.parentPath, e.name))
191
+ if err != nil {
192
+ rel = e.name
193
+ }
194
+ names = append(names, rel)
195
+ }
196
+ return names
197
+ }
198
+
199
+ type TnStats struct {
200
+ dev float64
201
+ ino float64
202
+ mode float64
203
+ nlink float64
204
+ uid float64
205
+ gid float64
206
+ rdev float64
207
+ size float64
208
+ blksize float64
209
+ blocks float64
210
+ atimeMs float64
211
+ mtimeMs float64
212
+ ctimeMs float64
213
+ birthtimeMs float64
214
+ atime time.Time
215
+ mtime time.Time
216
+ ctime time.Time
217
+ birthtime time.Time
218
+ fileMode fs.FileMode
219
+ }
220
+
221
+ func (s *TnStats) isFile() bool { return s.fileMode.IsRegular() }
222
+ func (s *TnStats) isDirectory() bool { return s.fileMode.IsDir() }
223
+ func (s *TnStats) isSymbolicLink() bool { return s.fileMode&fs.ModeSymlink != 0 }
224
+ func (s *TnStats) isFIFO() bool { return s.fileMode&fs.ModeNamedPipe != 0 }
225
+ func (s *TnStats) isSocket() bool { return s.fileMode&fs.ModeSocket != 0 }
226
+ func (s *TnStats) isBlockDevice() bool { return s.fileMode&fs.ModeDevice != 0 && s.fileMode&fs.ModeCharDevice == 0 }
227
+ func (s *TnStats) isCharacterDevice() bool { return s.fileMode&fs.ModeCharDevice != 0 }
228
+
229
+ // Node's st_mode: file type bits | permission bits
230
+ func tnStatMode(m fs.FileMode) float64 {
231
+ mode := uint32(m.Perm())
232
+ switch {
233
+ case m.IsDir():
234
+ mode |= 0o040000
235
+ case m&fs.ModeSymlink != 0:
236
+ mode |= 0o120000
237
+ case m&fs.ModeNamedPipe != 0:
238
+ mode |= 0o010000
239
+ case m&fs.ModeSocket != 0:
240
+ mode |= 0o140000
241
+ case m&fs.ModeCharDevice != 0:
242
+ mode |= 0o020000
243
+ case m&fs.ModeDevice != 0:
244
+ mode |= 0o060000
245
+ default:
246
+ mode |= 0o100000
247
+ }
248
+ if m&fs.ModeSetuid != 0 {
249
+ mode |= 0o4000
250
+ }
251
+ if m&fs.ModeSetgid != 0 {
252
+ mode |= 0o2000
253
+ }
254
+ if m&fs.ModeSticky != 0 {
255
+ mode |= 0o1000
256
+ }
257
+ return float64(mode)
258
+ }
259
+
260
+ // Stats from a FileInfo (Go exposes the modification time portably; the
261
+ // other timestamps report it too)
262
+ func tnStatsOf(info fs.FileInfo) *TnStats {
263
+ mtime := info.ModTime()
264
+ ms := float64(mtime.UnixNano()) / 1e6
265
+ return &TnStats{
266
+ mode: tnStatMode(info.Mode()), nlink: 1, size: float64(info.Size()), blksize: 4096,
267
+ blocks: math.Ceil(float64(info.Size()) / 512),
268
+ atimeMs: ms, mtimeMs: ms, ctimeMs: ms, birthtimeMs: ms,
269
+ atime: mtime, mtime: mtime, ctime: mtime, birthtime: mtime, fileMode: info.Mode(),
270
+ }
271
+ }
272
+
273
+ func TnStat(path string, lstat bool, throwIfNoEntry bool) *TnStats {
274
+ var info fs.FileInfo
275
+ var err error
276
+ syscall := "stat"
277
+ if lstat {
278
+ info, err = os.Lstat(path)
279
+ syscall = "lstat"
280
+ } else {
281
+ info, err = os.Stat(path)
282
+ }
283
+ if err != nil {
284
+ if !throwIfNoEntry && tnErrnoCode(err) == "ENOENT" {
285
+ return nil
286
+ }
287
+ panic(TnSysError(err, syscall, path))
288
+ }
289
+ return tnStatsOf(info)
290
+ }
291
+
292
+ func TnExists(path string) bool {
293
+ _, err := os.Stat(path)
294
+ return err == nil
295
+ }
296
+
297
+ func TnRename(from string, to string) {
298
+ tnFsCheck(os.Rename(from, to), "rename", from, to)
299
+ }
300
+
301
+ // rmSync(path, { recursive, force })
302
+ func TnRm(path string, recursive bool, force bool) {
303
+ info, err := os.Lstat(path)
304
+ if err != nil {
305
+ if force && tnErrnoCode(err) == "ENOENT" {
306
+ return
307
+ }
308
+ panic(TnSysError(err, "rm", path))
309
+ }
310
+ if info.IsDir() {
311
+ if !recursive {
312
+ panic(TnNodeError("SystemError", "ERR_FS_EISDIR", "Path is a directory: rm returned EISDIR (is a directory) "+path))
313
+ }
314
+ tnFsCheck(os.RemoveAll(path), "rm", path)
315
+ return
316
+ }
317
+ tnFsCheck(os.Remove(path), "rm", path)
318
+ }
319
+
320
+ func TnRmdir(path string, recursive bool) {
321
+ if recursive {
322
+ tnFsCheck(os.RemoveAll(path), "rmdir", path)
323
+ return
324
+ }
325
+ info, err := os.Stat(path)
326
+ tnFsCheck(err, "rmdir", path)
327
+ if !info.IsDir() {
328
+ panic(TnSysError(errors.New("not a directory"), "rmdir", path))
329
+ }
330
+ tnFsCheck(os.Remove(path), "rmdir", path)
331
+ }
332
+
333
+ func TnUnlink(path string) {
334
+ info, err := os.Lstat(path)
335
+ tnFsCheck(err, "unlink", path)
336
+ if info.IsDir() {
337
+ panic(TnSysError(errors.New("operation not permitted"), "unlink", path))
338
+ }
339
+ tnFsCheck(os.Remove(path), "unlink", path)
340
+ }
341
+
342
+ // copyFileSync(src, dest, mode): mode 1 (COPYFILE_EXCL) fails if dest exists
343
+ func TnCopyFile(src string, dst string, mode float64) {
344
+ in, err := os.Open(src)
345
+ tnFsCheck(err, "copyfile", src, dst)
346
+ defer in.Close()
347
+ flags := os.O_WRONLY | os.O_CREATE | os.O_TRUNC
348
+ if int(mode)&1 != 0 {
349
+ flags = os.O_WRONLY | os.O_CREATE | os.O_EXCL
350
+ }
351
+ info, _ := in.Stat()
352
+ perm := fs.FileMode(0o666)
353
+ if info != nil {
354
+ perm = info.Mode().Perm()
355
+ }
356
+ out, err := os.OpenFile(dst, flags, perm)
357
+ tnFsCheck(err, "copyfile", src, dst)
358
+ defer out.Close()
359
+ _, err = io.Copy(out, in)
360
+ tnFsCheck(err, "copyfile", src, dst)
361
+ }
362
+
363
+ // cpSync(src, dest, { recursive, force, errorOnExist })
364
+ func TnCp(src string, dst string, recursive bool, force bool) {
365
+ info, err := os.Stat(src)
366
+ tnFsCheck(err, "cp", src)
367
+ if info.IsDir() {
368
+ if !recursive {
369
+ panic(TnNodeError("SystemError", "ERR_FS_EISDIR", "Recursive option is required to copy a directory: cp returned EISDIR ("+src+" is a directory (not copied)) "+src))
370
+ }
371
+ tnFsCheck(os.MkdirAll(dst, info.Mode().Perm()|0o700), "cp", dst)
372
+ entries, err := os.ReadDir(src)
373
+ tnFsCheck(err, "cp", src)
374
+ for _, e := range entries {
375
+ TnCp(filepath.Join(src, e.Name()), filepath.Join(dst, e.Name()), true, force)
376
+ }
377
+ return
378
+ }
379
+ if !force && TnExists(dst) {
380
+ return
381
+ }
382
+ TnCopyFile(src, dst, 0)
383
+ }
384
+
385
+ func TnRealpath(path string) string {
386
+ abs, err := filepath.Abs(path)
387
+ tnFsCheck(err, "realpath", path)
388
+ real, err := filepath.EvalSymlinks(abs)
389
+ tnFsCheck(err, "realpath", path)
390
+ return real
391
+ }
392
+
393
+ func TnMkdtemp(prefix string) string {
394
+ dir, base := filepath.Split(prefix)
395
+ if dir == "" {
396
+ dir = "."
397
+ }
398
+ created, err := os.MkdirTemp(dir, base+"*")
399
+ tnFsCheck(err, "mkdtemp", prefix+"XXXXXX")
400
+ return created
401
+ }
402
+
403
+ func TnTruncate(path string, length float64) {
404
+ tnFsCheck(os.Truncate(path, int64(length)), "open", path)
405
+ }
406
+
407
+ func tnFileMode(mode interface{}) fs.FileMode {
408
+ switch m := mode.(type) {
409
+ case float64:
410
+ return fs.FileMode(int(m))
411
+ case string:
412
+ n, _ := strconv.ParseInt(m, 8, 32)
413
+ return fs.FileMode(n)
414
+ }
415
+ return 0o666
416
+ }
417
+
418
+ func TnChmod(path string, mode interface{}) {
419
+ tnFsCheck(os.Chmod(path, tnFileMode(mode)), "chmod", path)
420
+ }
421
+
422
+ func tnTimeArg(v interface{}) time.Time {
423
+ switch t := v.(type) {
424
+ case time.Time:
425
+ return t
426
+ case float64:
427
+ return time.Unix(0, int64(t*1e9))
428
+ case string:
429
+ f, _ := strconv.ParseFloat(t, 64)
430
+ return time.Unix(0, int64(f*1e9))
431
+ }
432
+ return time.Now()
433
+ }
434
+
435
+ func TnUtimes(path string, atime interface{}, mtime interface{}) {
436
+ tnFsCheck(os.Chtimes(path, tnTimeArg(atime), tnTimeArg(mtime)), "utime", path)
437
+ }
438
+
439
+ func TnSymlink(target string, path string) {
440
+ tnFsCheck(os.Symlink(target, path), "symlink", target, path)
441
+ }
442
+
443
+ func TnReadlink(path string) string {
444
+ target, err := os.Readlink(path)
445
+ tnFsCheck(err, "readlink", path)
446
+ return target
447
+ }
448
+
449
+ func TnLink(existing string, path string) {
450
+ tnFsCheck(os.Link(existing, path), "link", existing, path)
451
+ }
452
+
453
+ // accessSync(path, mode): F_OK 0, R_OK 4, W_OK 2, X_OK 1
454
+ func TnAccess(path string, mode float64) {
455
+ info, err := os.Stat(path)
456
+ tnFsCheck(err, "access", path)
457
+ perm := info.Mode().Perm()
458
+ m := int(mode)
459
+ if runtime.GOOS == "windows" {
460
+ if m&2 != 0 && perm&0o200 == 0 {
461
+ panic(TnSysError(fs.ErrPermission, "access", path))
462
+ }
463
+ return
464
+ }
465
+ if (m&4 != 0 && perm&0o444 == 0) || (m&2 != 0 && perm&0o222 == 0) || (m&1 != 0 && perm&0o111 == 0) {
466
+ panic(TnSysError(fs.ErrPermission, "access", path))
467
+ }
468
+ }
469
+
470
+ // File descriptors: Node-style integers mapped to Go files
471
+ var tnFds = map[int]*os.File{}
472
+ var tnNextFd = 3
473
+ var tnFdsMu sync.Mutex
474
+
475
+ func tnFile(fd float64) *os.File {
476
+ tnFdsMu.Lock()
477
+ defer tnFdsMu.Unlock()
478
+ switch int(fd) {
479
+ case 0:
480
+ return os.Stdin
481
+ case 1:
482
+ return os.Stdout
483
+ case 2:
484
+ return os.Stderr
485
+ }
486
+ f, ok := tnFds[int(fd)]
487
+ if !ok {
488
+ panic(TnSysError(fs.ErrClosed, "fstat", ""))
489
+ }
490
+ return f
491
+ }
492
+
493
+ func TnOpen(path string, flags interface{}, mode ...interface{}) float64 {
494
+ flag := "r"
495
+ if s, ok := flags.(string); ok && s != "" {
496
+ flag = s
497
+ }
498
+ perm := fs.FileMode(0o666)
499
+ if len(mode) > 0 && mode[0] != nil {
500
+ perm = tnFileMode(mode[0])
501
+ }
502
+ f, err := os.OpenFile(path, tnOpenFlags(flag), perm)
503
+ tnFsCheck(err, "open", path)
504
+ tnFdsMu.Lock()
505
+ defer tnFdsMu.Unlock()
506
+ fd := tnNextFd
507
+ tnNextFd++
508
+ tnFds[fd] = f
509
+ return float64(fd)
510
+ }
511
+
512
+ func TnClose(fd float64) {
513
+ f := tnFile(fd)
514
+ tnFdsMu.Lock()
515
+ delete(tnFds, int(fd))
516
+ tnFdsMu.Unlock()
517
+ tnFsCheck(f.Close(), "close", "")
518
+ }
519
+
520
+ // readSync(fd, buffer, offset?, length?, position?) → bytes read (0 at EOF)
521
+ func TnReadSync(fd float64, buf []byte, args ...interface{}) float64 {
522
+ f := tnFile(fd)
523
+ offset, length := 0, len(buf)
524
+ position := int64(-1)
525
+ nums := []float64{}
526
+ for _, a := range args {
527
+ if n, ok := a.(float64); ok {
528
+ nums = append(nums, n)
529
+ } else if a != nil {
530
+ if p, ok := TnGet(a, "position").(float64); ok {
531
+ position = int64(p)
532
+ }
533
+ if o, ok := TnGet(a, "offset").(float64); ok {
534
+ offset = int(o)
535
+ }
536
+ if l, ok := TnGet(a, "length").(float64); ok {
537
+ length = int(l)
538
+ }
539
+ }
540
+ }
541
+ if len(nums) > 0 {
542
+ offset = int(nums[0])
543
+ length = len(buf) - offset
544
+ }
545
+ if len(nums) > 1 {
546
+ length = int(nums[1])
547
+ }
548
+ if len(nums) > 2 && nums[2] >= 0 {
549
+ position = int64(nums[2])
550
+ }
551
+ if offset+length > len(buf) {
552
+ length = len(buf) - offset
553
+ }
554
+ var n int
555
+ var err error
556
+ if position >= 0 {
557
+ n, err = f.ReadAt(buf[offset:offset+length], position)
558
+ } else {
559
+ n, err = f.Read(buf[offset : offset+length])
560
+ }
561
+ if err != nil && err != io.EOF {
562
+ panic(TnSysError(err, "read", ""))
563
+ }
564
+ return float64(n)
565
+ }
566
+
567
+ // writeSync(fd, string | Buffer, …) → bytes written
568
+ func TnWriteSync(fd float64, data interface{}, args ...interface{}) float64 {
569
+ f := tnFile(fd)
570
+ var b []byte
571
+ switch x := data.(type) {
572
+ case string:
573
+ b = []byte(x)
574
+ if len(args) > 0 {
575
+ if pos, ok := args[0].(float64); ok {
576
+ n, err := f.WriteAt(b, int64(pos))
577
+ tnFsCheck(err, "write", "")
578
+ return float64(n)
579
+ }
580
+ }
581
+ case []byte:
582
+ b = x
583
+ nums := []float64{}
584
+ for _, a := range args {
585
+ if n, ok := a.(float64); ok {
586
+ nums = append(nums, n)
587
+ }
588
+ }
589
+ if len(nums) > 0 {
590
+ end := len(b)
591
+ if len(nums) > 1 && int(nums[0]+nums[1]) < end {
592
+ end = int(nums[0] + nums[1])
593
+ }
594
+ b = b[int(nums[0]):end]
595
+ }
596
+ if len(nums) > 2 {
597
+ n, err := f.WriteAt(b, int64(nums[2]))
598
+ tnFsCheck(err, "write", "")
599
+ return float64(n)
600
+ }
601
+ default:
602
+ b = []byte(fmt.Sprint(x))
603
+ }
604
+ n, err := f.Write(b)
605
+ tnFsCheck(err, "write", "")
606
+ return float64(n)
607
+ }
608
+
609
+ func TnFstat(fd float64) *TnStats {
610
+ info, err := tnFile(fd).Stat()
611
+ tnFsCheck(err, "fstat", "")
612
+ return tnStatsOf(info)
613
+ }
614
+
615
+ func TnFsync(fd float64) {
616
+ tnFsCheck(tnFile(fd).Sync(), "fsync", "")
617
+ }
618
+
619
+ func TnFtruncate(fd float64, length float64) {
620
+ tnFsCheck(tnFile(fd).Truncate(int64(length)), "ftruncate", "")
621
+ }`;
622
+ // Go expression of a file-content argument
623
+ function dataArg(call, index, enc) {
624
+ const type = call.types[index];
625
+ if (type === '[]byte')
626
+ return call.args[index];
627
+ if (type === 'string' && (enc === '' || enc === 'utf8' || enc === 'utf-8'))
628
+ return `[]byte(${call.args[index]})`;
629
+ return `TnFsData(${call.args[index]}, ${JSON.stringify(enc)})`;
630
+ }
631
+ // The `flag` option of writeFileSync
632
+ function flagArg(node) {
633
+ const flag = getOption(node, 'flag');
634
+ return flag && isStringNode(flag) ? JSON.stringify(String(flag.text)) : '""';
635
+ }
636
+ // The result type of readFileSync-like calls: a string when an encoding is given
637
+ export function readResultType(call, index) {
638
+ const node = call.nodes[index];
639
+ if (!node || node.kind === 'NullKeyword')
640
+ return '[]byte';
641
+ if (isStringNode(node))
642
+ return 'string';
643
+ if (isObjectLiteral(node))
644
+ return encodingOf(node) ? 'string' : '[]byte';
645
+ return call.types[index] === 'string' ? 'string' : '[]byte';
646
+ }
647
+ const FS_CONSTANTS = {
648
+ F_OK: 0,
649
+ R_OK: 4,
650
+ W_OK: 2,
651
+ X_OK: 1,
652
+ COPYFILE_EXCL: 1,
653
+ COPYFILE_FICLONE: 2,
654
+ COPYFILE_FICLONE_FORCE: 4,
655
+ O_RDONLY: 0,
656
+ O_WRONLY: 1,
657
+ O_RDWR: 2,
658
+ S_IFMT: 0o170000,
659
+ S_IFREG: 0o100000,
660
+ S_IFDIR: 0o040000,
661
+ S_IFLNK: 0o120000
662
+ };
663
+ export function registerFs(r) {
664
+ defineModule(r, 'fs');
665
+ defineHelper(r, 'fsErrors', ['errors', 'io/fs', 'strings'], ['error'], fsErrorsHelper);
666
+ defineHelper(r, 'nodeFs', ['errors', 'fmt', 'io', 'io/fs', 'math', 'os', 'path/filepath', 'runtime', 'strconv', 'strings', 'sync', 'time'], ['fsErrors', 'buffer', 'dynamic'], fsHelper);
667
+ defineClass(r, 'fs.Stats', '*TnStats', 'class', 'isFile=bool; isDirectory=bool; isSymbolicLink=bool; isFIFO=bool; isSocket=bool; isBlockDevice=bool; isCharacterDevice=bool', 'dev=float64; ino=float64; mode=float64; nlink=float64; uid=float64; gid=float64; rdev=float64; size=float64; blksize=float64; blocks=float64; atimeMs=float64; mtimeMs=float64; ctimeMs=float64; birthtimeMs=float64; atime=time.Time; mtime=time.Time; ctime=time.Time; birthtime=time.Time', '', '');
668
+ defineClass(r, 'fs.Dirent', '*TnDirent', 'class', 'isFile=bool; isDirectory=bool; isSymbolicLink=bool; isFIFO=bool; isSocket=bool; isBlockDevice=bool; isCharacterDevice=bool', 'name=string; parentPath=string; path=string', '', '');
669
+ const use = () => r.helper('nodeFs');
670
+ const fn = (name, result, emit) => {
671
+ r.functions[`fs.${name}`] = (call) => {
672
+ use();
673
+ return emit(call);
674
+ };
675
+ r.results[`fs.${name}`] = result;
676
+ };
677
+ fn('readFileSync', '', (c) => {
678
+ const enc = encodingOf(c.nodes[1]);
679
+ if (readResultType(c, 1) === 'string') {
680
+ const encExpr = enc ? JSON.stringify(enc) : c.types[1] === 'string' ? c.args[1] : '""';
681
+ return `TnReadFileString(${c.args[0]}, ${encExpr})`;
682
+ }
683
+ return `TnReadFileBytes(${c.args[0]})`;
684
+ });
685
+ r.typers['fs.readFileSync'] = (c) => readResultType(c, 1);
686
+ fn('writeFileSync', '', (c) => `TnWriteFile(${c.args[0]}, ${dataArg(c, 1, encodingOf(c.nodes[2]))}, ${flagArg(c.nodes[2])})`);
687
+ fn('appendFileSync', '', (c) => `TnWriteFile(${c.args[0]}, ${dataArg(c, 1, encodingOf(c.nodes[2]))}, "a")`);
688
+ fn('existsSync', 'bool', (c) => `TnExists(${c.args[0]})`);
689
+ fn('mkdirSync', '', (c) => `TnMkdir(${c.args[0]}, ${optionIsTrue(c.nodes[1], 'recursive')})`);
690
+ fn('readdirSync', '', (c) => {
691
+ const recursive = optionIsTrue(c.nodes[1], 'recursive');
692
+ if (optionIsTrue(c.nodes[1], 'withFileTypes'))
693
+ return `TnReadDirents(${c.args[0]}, ${recursive})`;
694
+ return `TnReadDirNames(${c.args[0]}, ${recursive})`;
695
+ });
696
+ r.typers['fs.readdirSync'] = (c) => (optionIsTrue(c.nodes[1], 'withFileTypes') ? '[]*TnDirent' : '[]string');
697
+ const stat = (lstat) => (c) => {
698
+ const option = getOption(c.nodes[1], 'throwIfNoEntry');
699
+ const throwIfNoEntry = option && option.kind === 'FalseKeyword' ? 'false' : 'true';
700
+ return `TnStat(${c.args[0]}, ${lstat}, ${throwIfNoEntry})`;
701
+ };
702
+ fn('statSync', '*TnStats', stat(false));
703
+ fn('lstatSync', '*TnStats', stat(true));
704
+ fn('fstatSync', '*TnStats', (c) => `TnFstat(${c.args[0]})`);
705
+ fn('renameSync', '', (c) => `TnRename(${c.args[0]}, ${c.args[1]})`);
706
+ fn('rmSync', '', (c) => `TnRm(${c.args[0]}, ${optionIsTrue(c.nodes[1], 'recursive')}, ${optionIsTrue(c.nodes[1], 'force')})`);
707
+ fn('rmdirSync', '', (c) => `TnRmdir(${c.args[0]}, ${optionIsTrue(c.nodes[1], 'recursive')})`);
708
+ fn('unlinkSync', '', (c) => `TnUnlink(${c.args[0]})`);
709
+ fn('copyFileSync', '', (c) => `TnCopyFile(${c.args[0]}, ${c.args[1]}, ${c.args[2] ?? '0'})`);
710
+ fn('cpSync', '', (c) => {
711
+ const force = getOption(c.nodes[2], 'force');
712
+ return `TnCp(${c.args[0]}, ${c.args[1]}, ${optionIsTrue(c.nodes[2], 'recursive')}, ${force && force.kind === 'FalseKeyword' ? 'false' : 'true'})`;
713
+ });
714
+ fn('realpathSync', 'string', (c) => `TnRealpath(${c.args[0]})`);
715
+ fn('realpathSync.native', 'string', (c) => `TnRealpath(${c.args[0]})`);
716
+ r.objects['fs.realpathSync'] = true;
717
+ fn('mkdtempSync', 'string', (c) => `TnMkdtemp(${c.args[0]})`);
718
+ fn('truncateSync', '', (c) => `TnTruncate(${c.args[0]}, ${c.args[1] ?? '0'})`);
719
+ fn('chmodSync', '', (c) => `TnChmod(${c.args[0]}, ${c.args[1]})`);
720
+ fn('utimesSync', '', (c) => `TnUtimes(${c.args[0]}, ${c.args[1]}, ${c.args[2]})`);
721
+ fn('symlinkSync', '', (c) => `TnSymlink(${c.args[0]}, ${c.args[1]})`);
722
+ fn('readlinkSync', 'string', (c) => `TnReadlink(${c.args[0]})`);
723
+ fn('linkSync', '', (c) => `TnLink(${c.args[0]}, ${c.args[1]})`);
724
+ fn('accessSync', '', (c) => `TnAccess(${c.args[0]}, ${c.args[1] ?? '0'})`);
725
+ fn('openSync', 'float64', (c) => `TnOpen(${c.args[0]}, ${c.args[1] ?? '"r"'}${c.args[2] ? `, ${c.args[2]}` : ''})`);
726
+ fn('closeSync', '', (c) => `TnClose(${c.args[0]})`);
727
+ fn('readSync', 'float64', (c) => `TnReadSync(${c.args.join(', ')})`);
728
+ fn('writeSync', 'float64', (c) => `TnWriteSync(${c.args.join(', ')})`);
729
+ fn('fsyncSync', '', (c) => `TnFsync(${c.args[0]})`);
730
+ fn('ftruncateSync', '', (c) => `TnFtruncate(${c.args[0]}, ${c.args[1] ?? '0'})`);
731
+ setResults(r, 'fs', '');
732
+ r.objects['fs.constants'] = true;
733
+ for (const name of Object.keys(FS_CONSTANTS)) {
734
+ const value = FS_CONSTANTS[name];
735
+ r.values[`fs.constants.${name}`] = (_c) => `float64(${value})`;
736
+ r.valueTypes[`fs.constants.${name}`] = 'float64';
737
+ r.values[`fs.${name}`] = r.values[`fs.constants.${name}`];
738
+ r.valueTypes[`fs.${name}`] = 'float64';
739
+ }
740
+ registerFsAsync(r);
741
+ }
742
+ const fsAsyncHelper = `// fs callbacks and promises: the work runs on a goroutine; callbacks run on
743
+ // the event loop, which stays alive until they have
744
+ func tnFsRun[T any](work func() T) (result T, err *TnError) {
745
+ defer func() {
746
+ if rec := recover(); rec != nil {
747
+ if e, ok := rec.(*TnError); ok {
748
+ err = e
749
+ } else {
750
+ err = TnNewError(fmt.Sprint(rec))
751
+ }
752
+ }
753
+ }()
754
+ result = work()
755
+ return
756
+ }
757
+
758
+ func TnFsCallback[T any](work func() T, cb interface{}) {
759
+ TnLoopRef()
760
+ ctx := TnAsyncSnapshot()
761
+ go func() {
762
+ result, err := tnFsRun(work)
763
+ TnLoopPost(func() {
764
+ defer TnLoopUnref()
765
+ TnAsyncRun(ctx, func() {
766
+ if err != nil {
767
+ TnInvoke(cb, err)
768
+ } else {
769
+ TnInvoke(cb, nil, result)
770
+ }
771
+ })
772
+ })
773
+ }()
774
+ }
775
+
776
+ func TnFsCallbackVoid(work func(), cb interface{}) {
777
+ TnFsCallback(func() bool { work(); return true }, func(err *TnError, _ bool) { TnInvoke(cb, err) })
778
+ }
779
+
780
+ func TnFsPromise[T any](work func() T) chan T {
781
+ ch := make(chan T, 1)
782
+ TnLoopRef()
783
+ go func() {
784
+ defer TnLoopUnref()
785
+ result, err := tnFsRun(work)
786
+ if err != nil {
787
+ TnReject(ch, err)
788
+ return
789
+ }
790
+ ch <- result
791
+ }()
792
+ return ch
793
+ }
794
+
795
+ func TnFsPromiseVoid(work func()) chan struct{} {
796
+ return TnFsPromise(func() struct{} { work(); return struct{}{} })
797
+ }
798
+
799
+ // fs.exists(path, cb(exists)) (deprecated): no error argument
800
+ func TnFsExists(path string, cb interface{}) {
801
+ TnLoopRef()
802
+ ctx := TnAsyncSnapshot()
803
+ go func() {
804
+ exists := TnExists(path)
805
+ TnLoopPost(func() {
806
+ defer TnLoopUnref()
807
+ TnAsyncRun(ctx, func() { TnInvoke(cb, exists) })
808
+ })
809
+ }()
810
+ }
811
+
812
+ // fs/promises FileHandle
813
+ type TnFileHandle struct {
814
+ fd float64
815
+ }
816
+
817
+ type TnFsReadResult struct {
818
+ bytesRead float64
819
+ buffer []byte
820
+ }
821
+
822
+ type TnFsWriteResult struct {
823
+ bytesWritten float64
824
+ buffer interface{}
825
+ }
826
+
827
+ func TnOpenHandle(path string, flags interface{}, mode ...interface{}) *TnFileHandle {
828
+ return &TnFileHandle{fd: TnOpen(path, flags, mode...)}
829
+ }
830
+
831
+ func (h *TnFileHandle) Get_fd() float64 { return h.fd }
832
+
833
+ func (h *TnFileHandle) readAll() []byte {
834
+ f := tnFile(h.fd)
835
+ data, err := io.ReadAll(f)
836
+ tnFsCheck(err, "read", "")
837
+ return data
838
+ }
839
+
840
+ func (h *TnFileHandle) readFileBytes(options ...interface{}) chan []byte {
841
+ return TnFsPromise(func() []byte { return h.readAll() })
842
+ }
843
+
844
+ func (h *TnFileHandle) readFileString(enc string) chan string {
845
+ return TnFsPromise(func() string { return TnBufferToString(h.readAll(), enc) })
846
+ }
847
+
848
+ func (h *TnFileHandle) writeFile(data interface{}, options ...interface{}) chan struct{} {
849
+ return TnFsPromiseVoid(func() { TnWriteSync(h.fd, data) })
850
+ }
851
+
852
+ func (h *TnFileHandle) appendFile(data interface{}, options ...interface{}) chan struct{} {
853
+ return TnFsPromiseVoid(func() { TnWriteSync(h.fd, data) })
854
+ }
855
+
856
+ func (h *TnFileHandle) read(buf []byte, args ...interface{}) chan *TnFsReadResult {
857
+ return TnFsPromise(func() *TnFsReadResult {
858
+ return &TnFsReadResult{bytesRead: TnReadSync(h.fd, buf, args...), buffer: buf}
859
+ })
860
+ }
861
+
862
+ func (h *TnFileHandle) write(data interface{}, args ...interface{}) chan *TnFsWriteResult {
863
+ return TnFsPromise(func() *TnFsWriteResult {
864
+ return &TnFsWriteResult{bytesWritten: TnWriteSync(h.fd, data, args...), buffer: data}
865
+ })
866
+ }
867
+
868
+ func (h *TnFileHandle) stat(options ...interface{}) chan *TnStats {
869
+ return TnFsPromise(func() *TnStats { return TnFstat(h.fd) })
870
+ }
871
+
872
+ func (h *TnFileHandle) truncate(length ...float64) chan struct{} {
873
+ n := 0.0
874
+ if len(length) > 0 {
875
+ n = length[0]
876
+ }
877
+ return TnFsPromiseVoid(func() { TnFtruncate(h.fd, n) })
878
+ }
879
+
880
+ func (h *TnFileHandle) sync() chan struct{} {
881
+ return TnFsPromiseVoid(func() { TnFsync(h.fd) })
882
+ }
883
+
884
+ func (h *TnFileHandle) close() chan struct{} {
885
+ return TnFsPromiseVoid(func() { TnClose(h.fd) })
886
+ }`;
887
+ // Async names → their sync emitters
888
+ const FS_ASYNC = [
889
+ 'readFile',
890
+ 'writeFile',
891
+ 'appendFile',
892
+ 'mkdir',
893
+ 'readdir',
894
+ 'stat',
895
+ 'lstat',
896
+ 'unlink',
897
+ 'rm',
898
+ 'rmdir',
899
+ 'rename',
900
+ 'copyFile',
901
+ 'cp',
902
+ 'access',
903
+ 'realpath',
904
+ 'mkdtemp',
905
+ 'truncate',
906
+ 'chmod',
907
+ 'utimes',
908
+ 'symlink',
909
+ 'readlink',
910
+ 'link'
911
+ ];
912
+ // The call without its trailing callback
913
+ function withoutCallback(call) {
914
+ let end = call.nodes.length;
915
+ if (end > 0 && (call.nodes[end - 1].kind === 'ArrowFunction' || call.nodes[end - 1].kind === 'FunctionExpression' || call.types[end - 1].startsWith('func('))) {
916
+ end--;
917
+ }
918
+ return { args: call.args.slice(0, end), nodes: call.nodes.slice(0, end), types: call.types.slice(0, end), recv: call.recv };
919
+ }
920
+ // The Go result type of a sync fs function for these arguments ('' = none)
921
+ function syncResultType(r, syncKey, call) {
922
+ const typer = r.typers[syncKey];
923
+ if (typer)
924
+ return typer(call);
925
+ return r.results[syncKey] ?? '';
926
+ }
927
+ function registerFsAsync(r) {
928
+ defineModule(r, 'fs/promises');
929
+ r.namespaces['fs.promises'] = 'fs/promises';
930
+ defineHelper(r, 'nodeFsAsync', ['fmt', 'io'], ['nodeFs', 'eventLoop', 'promise', 'nodeInvoke'], fsAsyncHelper);
931
+ defineClass(r, 'fs/promises.FileHandle', '*TnFileHandle', 'class', 'writeFile=chan struct{}; appendFile=chan struct{}; read=chan *TnFsReadResult; write=chan *TnFsWriteResult; stat=chan *TnStats; truncate=chan struct{}; sync=chan struct{}; close=chan struct{}', '', 'fd=float64', '');
932
+ defineClass(r, 'fs.ReadResult', '*TnFsReadResult', 'class', '', 'bytesRead=float64; buffer=[]byte', '', '');
933
+ defineClass(r, 'fs.WriteResult', '*TnFsWriteResult', 'class', '', 'bytesWritten=float64; buffer=interface{}', '', '');
934
+ r.methods['fs/promises.FileHandle#readFile'] = (c) => {
935
+ const enc = encodingOf(c.nodes[0]);
936
+ if (enc)
937
+ return `${c.recv}.readFileString(${JSON.stringify(enc)})`;
938
+ if (c.types[0] === 'string')
939
+ return `${c.recv}.readFileString(${c.args[0]})`;
940
+ return `${c.recv}.readFileBytes()`;
941
+ };
942
+ r.typers['fs/promises.FileHandle#readFile'] = (c) => (encodingOf(c.nodes[0]) || c.types[0] === 'string' ? 'chan string' : 'chan []byte');
943
+ for (const name of FS_ASYNC) {
944
+ const syncKey = `fs.${name}Sync`;
945
+ // Callback form: fs.readFile(path, [options], (err, data) => …)
946
+ r.functions[`fs.${name}`] = (call) => {
947
+ r.helper('nodeFsAsync');
948
+ const sub = withoutCallback(call);
949
+ const expr = r.functions[syncKey](sub);
950
+ const type = syncResultType(r, syncKey, sub);
951
+ const cb = sub.args.length < call.args.length ? call.args[call.args.length - 1] : 'nil';
952
+ if (!type)
953
+ return `TnFsCallbackVoid(func() { ${expr} }, ${cb})`;
954
+ return `TnFsCallback(func() ${type} { return ${expr} }, ${cb})`;
955
+ };
956
+ r.results[`fs.${name}`] = '';
957
+ r.paramTypers[`fs.${name}`] = (nodes) => {
958
+ const sub = { args: [], nodes: nodes.slice(0, nodes.length - 1), types: [], recv: '' };
959
+ const types = [];
960
+ for (const n of sub.nodes)
961
+ types.push(r.typeOf(n));
962
+ sub.types = types;
963
+ const type = syncResultType(r, syncKey, sub);
964
+ return type ? ['*TnError', type] : ['*TnError'];
965
+ };
966
+ // Promise form: fs/promises / fs.promises
967
+ r.functions[`fs/promises.${name}`] = (call) => {
968
+ r.helper('nodeFsAsync');
969
+ const expr = r.functions[syncKey](call);
970
+ const type = syncResultType(r, syncKey, call);
971
+ if (!type)
972
+ return `TnFsPromiseVoid(func() { ${expr} })`;
973
+ return `TnFsPromise(func() ${type} { return ${expr} })`;
974
+ };
975
+ r.typers[`fs/promises.${name}`] = (call) => {
976
+ const type = syncResultType(r, syncKey, call);
977
+ return type ? `chan ${type}` : 'chan struct{}';
978
+ };
979
+ }
980
+ r.functions['fs.exists'] = (call) => {
981
+ r.helper('nodeFsAsync');
982
+ return `TnFsExists(${call.args[0]}, ${call.args[1]})`;
983
+ };
984
+ r.paramTypers['fs.exists'] = (_n) => ['bool'];
985
+ r.functions['fs/promises.open'] = (call) => {
986
+ r.helper('nodeFsAsync');
987
+ return `TnFsPromise(func() *TnFileHandle { return TnOpenHandle(${call.args[0]}, ${call.args[1] ?? '"r"'}${call.args[2] ? `, ${call.args[2]}` : ''}) })`;
988
+ };
989
+ r.results['fs/promises.open'] = 'chan *TnFileHandle';
990
+ r.objects['fs/promises.constants'] = true;
991
+ for (const key of Object.keys(r.values)) {
992
+ if (key.startsWith('fs.constants.')) {
993
+ const name = key.slice('fs.constants.'.length);
994
+ r.values[`fs/promises.constants.${name}`] = r.values[key];
995
+ r.valueTypes[`fs/promises.constants.${name}`] = r.valueTypes[key];
996
+ }
997
+ }
998
+ }