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,128 @@
1
+ //go:build linux || darwin || windows || freebsd || openbsd || netbsd || dragonfly || illumos || sqlite3_flock || sqlite3_dotlk
2
+
3
+ package vfs
4
+
5
+ import "github.com/ncruces/go-sqlite3/internal/errutil"
6
+
7
+ // SupportsFileLocking is false on platforms that do not support file locking.
8
+ // To open a database file on those platforms,
9
+ // you need to use the [nolock] or [immutable] URI parameters.
10
+ //
11
+ // [nolock]: https://sqlite.org/uri.html#urinolock
12
+ // [immutable]: https://sqlite.org/uri.html#uriimmutable
13
+ const SupportsFileLocking = true
14
+
15
+ const (
16
+ _PENDING_BYTE = 0x40000000
17
+ _RESERVED_BYTE = (_PENDING_BYTE + 1)
18
+ _SHARED_FIRST = (_PENDING_BYTE + 2)
19
+ _SHARED_SIZE = 510
20
+ )
21
+
22
+ func (f *vfsFile) Lock(lock LockLevel) error {
23
+ switch {
24
+ case lock != LOCK_SHARED && lock != LOCK_RESERVED && lock != LOCK_EXCLUSIVE:
25
+ // Argument check. SQLite never explicitly requests a pending lock.
26
+ panic(errutil.AssertErr())
27
+ case f.lock < LOCK_NONE || f.lock > LOCK_EXCLUSIVE:
28
+ // Connection state check.
29
+ panic(errutil.AssertErr())
30
+ case f.lock == LOCK_NONE && lock > LOCK_SHARED:
31
+ // We never move from unlocked to anything higher than a shared lock.
32
+ panic(errutil.AssertErr())
33
+ case f.lock != LOCK_SHARED && lock == LOCK_RESERVED:
34
+ // A shared lock is always held when a reserved lock is requested.
35
+ panic(errutil.AssertErr())
36
+ }
37
+
38
+ // If we already have an equal or more restrictive lock, do nothing.
39
+ if f.lock >= lock {
40
+ return nil
41
+ }
42
+
43
+ // Do not allow any kind of write-lock on a read-only database.
44
+ if lock >= LOCK_RESERVED && f.flags&OPEN_READONLY != 0 {
45
+ return _IOERR_LOCK
46
+ }
47
+
48
+ switch lock {
49
+ case LOCK_SHARED:
50
+ // Must be unlocked to get SHARED.
51
+ if f.lock != LOCK_NONE {
52
+ panic(errutil.AssertErr())
53
+ }
54
+ if err := osGetSharedLock(f.File); err != nil {
55
+ return err
56
+ }
57
+ f.lock = LOCK_SHARED
58
+ return nil
59
+
60
+ case LOCK_RESERVED:
61
+ // Must be SHARED to get RESERVED.
62
+ if f.lock != LOCK_SHARED {
63
+ panic(errutil.AssertErr())
64
+ }
65
+ if err := osGetReservedLock(f.File); err != nil {
66
+ return err
67
+ }
68
+ f.lock = LOCK_RESERVED
69
+ return nil
70
+
71
+ case LOCK_EXCLUSIVE:
72
+ // Must be SHARED, RESERVED or PENDING to get EXCLUSIVE.
73
+ if f.lock <= LOCK_NONE || f.lock >= LOCK_EXCLUSIVE {
74
+ panic(errutil.AssertErr())
75
+ }
76
+ if err := osGetExclusiveLock(f.File, &f.lock); err != nil {
77
+ return err
78
+ }
79
+ f.lock = LOCK_EXCLUSIVE
80
+ return nil
81
+
82
+ default:
83
+ panic(errutil.AssertErr())
84
+ }
85
+ }
86
+
87
+ func (f *vfsFile) Unlock(lock LockLevel) error {
88
+ switch {
89
+ case lock != LOCK_NONE && lock != LOCK_SHARED:
90
+ // Argument check.
91
+ panic(errutil.AssertErr())
92
+ case f.lock < LOCK_NONE || f.lock > LOCK_EXCLUSIVE:
93
+ // Connection state check.
94
+ panic(errutil.AssertErr())
95
+ }
96
+
97
+ // If we don't have a more restrictive lock, do nothing.
98
+ if f.lock <= lock {
99
+ return nil
100
+ }
101
+
102
+ switch lock {
103
+ case LOCK_SHARED:
104
+ err := osDowngradeLock(f.File, f.lock)
105
+ f.lock = LOCK_SHARED
106
+ return err
107
+
108
+ case LOCK_NONE:
109
+ err := osReleaseLock(f.File, f.lock)
110
+ f.lock = LOCK_NONE
111
+ return err
112
+
113
+ default:
114
+ panic(errutil.AssertErr())
115
+ }
116
+ }
117
+
118
+ func (f *vfsFile) CheckReservedLock() (bool, error) {
119
+ // Connection state check.
120
+ if f.lock < LOCK_NONE || f.lock > LOCK_EXCLUSIVE {
121
+ panic(errutil.AssertErr())
122
+ }
123
+
124
+ if f.lock >= LOCK_RESERVED {
125
+ return true, nil
126
+ }
127
+ return osCheckReservedLock(f.File)
128
+ }
@@ -0,0 +1,23 @@
1
+ //go:build !(linux || darwin || windows || freebsd || openbsd || netbsd || dragonfly || illumos || sqlite3_flock || sqlite3_dotlk)
2
+
3
+ package vfs
4
+
5
+ // SupportsFileLocking is false on platforms that do not support file locking.
6
+ // To open a database file on those platforms,
7
+ // you need to use the [nolock] or [immutable] URI parameters.
8
+ //
9
+ // [nolock]: https://sqlite.org/uri.html#urinolock
10
+ // [immutable]: https://sqlite.org/uri.html#uriimmutable
11
+ const SupportsFileLocking = false
12
+
13
+ func (f *vfsFile) Lock(LockLevel) error {
14
+ return _IOERR_LOCK
15
+ }
16
+
17
+ func (f *vfsFile) Unlock(LockLevel) error {
18
+ return _IOERR_UNLOCK
19
+ }
20
+
21
+ func (f *vfsFile) CheckReservedLock() (bool, error) {
22
+ return false, _IOERR_CHECKRESERVEDLOCK
23
+ }
@@ -0,0 +1,63 @@
1
+ //go:build linux || darwin || freebsd
2
+
3
+ package vfs
4
+
5
+ import (
6
+ "os"
7
+
8
+ "github.com/ncruces/go-sqlite3/internal/sqlite3_wrap"
9
+ )
10
+
11
+ func (f *vfsFile) MemoryMapper() MemoryMapper { return f.mmap }
12
+
13
+ // NewMemoryMapper returns a memory mapper for the given file.
14
+ // It will return nil if file mapping is not supported,
15
+ // or not appropriate for the given flags.
16
+ // Only databases use memory mapping.
17
+ func NewMemoryMapper(file *os.File, flags OpenFlag) MemoryMapper {
18
+ if flags&(OPEN_MAIN_DB|OPEN_TEMP_DB|OPEN_TRANSIENT_DB) == 0 || flags&OPEN_MEMORY != 0 {
19
+ return nil
20
+ }
21
+ return &vfsMapper{File: file}
22
+ }
23
+
24
+ type vfsMapper struct {
25
+ *os.File
26
+ mmap *sqlite3_wrap.MappedRegion
27
+ size int32
28
+ }
29
+
30
+ func (m *vfsMapper) mmapSize(wrp *sqlite3_wrap.Wrapper, p ptr_t) {
31
+ size := int64(wrp.Read64(p))
32
+ wrp.Write64(p, uint64(m.size))
33
+ if size >= 0 && m.mmap == nil {
34
+ m.size = int32(min(size, 1024*1024*1024))
35
+ }
36
+ }
37
+
38
+ func (m *vfsMapper) fetch(wrp *sqlite3_wrap.Wrapper, iOfst int64, iAmt int32, pp ptr_t) error {
39
+ var ptr ptr_t
40
+ if iOfst+int64(iAmt)+256 <= int64(m.size) {
41
+ if m.mmap == nil {
42
+ var err error
43
+ m.mmap, err = wrp.MapRegion(m.File, 0, m.size, true)
44
+ if err != nil {
45
+ return err
46
+ }
47
+ }
48
+ if m.mmap != nil {
49
+ ptr = m.mmap.Ptr + ptr_t(iOfst)
50
+ }
51
+ }
52
+ wrp.Write32(pp, uint32(ptr))
53
+ return nil
54
+ }
55
+
56
+ func (m *vfsMapper) Close() error {
57
+ c := m.mmap
58
+ if c == nil {
59
+ return nil
60
+ }
61
+ m.mmap = nil
62
+ return c.Unmap()
63
+ }
@@ -0,0 +1,13 @@
1
+ //go:build !(linux || darwin || freebsd)
2
+
3
+ package vfs
4
+
5
+ import "os"
6
+
7
+ // NewMemoryMapper returns a memory mapper for the given file.
8
+ // It will return nil if file mapping is not supported,
9
+ // or not appropriate for the given flags.
10
+ // Only databases use memory mapping.
11
+ func NewMemoryMapper(file *os.File, flags OpenFlag) MemoryMapper {
12
+ return nil
13
+ }
@@ -0,0 +1,110 @@
1
+ //go:build ((freebsd || openbsd || netbsd || dragonfly || illumos) && !sqlite3_dotlk) || sqlite3_flock
2
+
3
+ package vfs
4
+
5
+ import (
6
+ "os"
7
+
8
+ "golang.org/x/sys/unix"
9
+ )
10
+
11
+ func osGetSharedLock(file *os.File) error {
12
+ return osFlock(file, unix.LOCK_SH|unix.LOCK_NB, _IOERR_RDLOCK)
13
+ }
14
+
15
+ func osGetReservedLock(file *os.File) error {
16
+ err := osFlock(file, unix.LOCK_EX|unix.LOCK_NB, _IOERR_LOCK)
17
+ if err == _BUSY {
18
+ // The documentation states that a lock is upgraded by
19
+ // releasing the previous lock, then acquiring the new lock.
20
+ // Going over the source code of various BSDs, though,
21
+ // with LOCK_NB, the lock is not released,
22
+ // and EAGAIN is returned holding the shared lock.
23
+ // Still, if we're already in a transaction, we want to abort it,
24
+ // so return BUSY_SNAPSHOT here. If there's no transaction active,
25
+ // SQLite will change this back to SQLITE_BUSY,
26
+ // and invoke the busy handler if appropriate.
27
+ return _BUSY_SNAPSHOT
28
+ }
29
+ return err
30
+ }
31
+
32
+ func osGetExclusiveLock(file *os.File, state *LockLevel) error {
33
+ if *state >= LOCK_RESERVED {
34
+ return nil
35
+ }
36
+ return osGetReservedLock(file)
37
+ }
38
+
39
+ func osDowngradeLock(file *os.File, _ LockLevel) error {
40
+ err := osFlock(file, unix.LOCK_SH|unix.LOCK_NB, _IOERR_RDLOCK)
41
+ if err == _BUSY {
42
+ // The documentation states that a lock is downgraded by
43
+ // releasing the previous lock then acquiring the new lock.
44
+ // Going over the source code of various BSDs, though,
45
+ // with LOCK_SH|LOCK_NB this should never happen.
46
+ // Return IOERR_RDLOCK, as BUSY would cause an assert to fail.
47
+ return _IOERR_RDLOCK
48
+ }
49
+ return err
50
+ }
51
+
52
+ func osReleaseLock(file *os.File, _ LockLevel) error {
53
+ for {
54
+ err := unix.Flock(int(file.Fd()), unix.LOCK_UN)
55
+ if err == nil {
56
+ return nil
57
+ }
58
+ if err != unix.EINTR {
59
+ return sysError{err, _IOERR_UNLOCK}
60
+ }
61
+ }
62
+ }
63
+
64
+ func osCheckReservedLock(file *os.File) (bool, error) {
65
+ // Test the RESERVED lock with fcntl(F_GETLK).
66
+ // This only works on systems where fcntl and flock are compatible.
67
+ // However, SQLite only calls this while holding a shared lock,
68
+ // so the difference is immaterial.
69
+ lock, err := osTestLock(file, _RESERVED_BYTE, 1, _IOERR_CHECKRESERVEDLOCK)
70
+ return lock == unix.F_WRLCK, err
71
+ }
72
+
73
+ func osFlock(file *os.File, how int, def _ErrorCode) error {
74
+ err := unix.Flock(int(file.Fd()), how)
75
+ return osLockErrorCode(err, def)
76
+ }
77
+
78
+ func osReadLock(file *os.File, start, len int64) error {
79
+ return osLock(file, unix.F_RDLCK, start, len, _IOERR_RDLOCK)
80
+ }
81
+
82
+ func osWriteLock(file *os.File, start, len int64) error {
83
+ return osLock(file, unix.F_WRLCK, start, len, _IOERR_LOCK)
84
+ }
85
+
86
+ func osLock(file *os.File, typ int16, start, len int64, def _ErrorCode) error {
87
+ err := unix.FcntlFlock(file.Fd(), unix.F_SETLK, &unix.Flock_t{
88
+ Type: typ,
89
+ Start: start,
90
+ Len: len,
91
+ })
92
+ return osLockErrorCode(err, def)
93
+ }
94
+
95
+ func osUnlock(file *os.File, start, len int64) error {
96
+ lock := unix.Flock_t{
97
+ Type: unix.F_UNLCK,
98
+ Start: start,
99
+ Len: len,
100
+ }
101
+ for {
102
+ err := unix.FcntlFlock(file.Fd(), unix.F_SETLK, &lock)
103
+ if err == nil {
104
+ return nil
105
+ }
106
+ if err != unix.EINTR {
107
+ return sysError{err, _IOERR_UNLOCK}
108
+ }
109
+ }
110
+ }
@@ -0,0 +1,131 @@
1
+ //go:build !sqlite3_flock
2
+
3
+ package vfs
4
+
5
+ import (
6
+ "io"
7
+ "os"
8
+ "runtime"
9
+ "time"
10
+
11
+ "golang.org/x/sys/unix"
12
+ )
13
+
14
+ const (
15
+ // https://github.com/apple/darwin-xnu/blob/main/bsd/sys/fcntl.h
16
+ _F_OFD_SETLK = 90
17
+ _F_OFD_SETLKW = 91
18
+ _F_OFD_SETLKWTIMEOUT = 93
19
+ )
20
+
21
+ type flocktimeout_t struct {
22
+ fl unix.Flock_t
23
+ timeout unix.Timespec
24
+ }
25
+
26
+ func osSync(file *os.File, open OpenFlag, sync SyncFlag) error {
27
+ var cmd int
28
+ if sync&SYNC_FULL == SYNC_FULL {
29
+ // For rollback journals all we really need is a barrier.
30
+ if open&OPEN_MAIN_JOURNAL != 0 {
31
+ cmd = unix.F_BARRIERFSYNC
32
+ } else {
33
+ cmd = unix.F_FULLFSYNC
34
+ }
35
+ }
36
+
37
+ fd := file.Fd()
38
+ for {
39
+ err := error(unix.ENOTSUP)
40
+ if cmd != 0 {
41
+ _, err = unix.FcntlInt(fd, cmd, 0)
42
+ }
43
+ if err == unix.ENOTSUP {
44
+ err = unix.Fsync(int(fd))
45
+ }
46
+ if err != unix.EINTR {
47
+ return err
48
+ }
49
+ }
50
+ }
51
+
52
+ func osAllocate(file *os.File, size int64) error {
53
+ if size == 0 {
54
+ return nil
55
+ }
56
+ end, err := file.Seek(0, io.SeekEnd)
57
+ if err != nil {
58
+ return err
59
+ }
60
+ if end >= size {
61
+ return nil
62
+ }
63
+
64
+ store := unix.Fstore_t{
65
+ Flags: unix.F_ALLOCATEALL | unix.F_ALLOCATECONTIG,
66
+ Posmode: unix.F_PEOFPOSMODE,
67
+ Length: size - end,
68
+ Offset: 0,
69
+ }
70
+
71
+ // Try once to get a continuous chunk of disk space.
72
+ if unix.FcntlFstore(file.Fd(), unix.F_PREALLOCATE, &store) != nil {
73
+ // OK, perhaps we are too fragmented, allocate non-continuous.
74
+ store.Flags = unix.F_ALLOCATEALL
75
+ for {
76
+ err := unix.FcntlFstore(file.Fd(), unix.F_PREALLOCATE, &store)
77
+ if err == nil {
78
+ break
79
+ }
80
+ if err != unix.EINTR {
81
+ return err
82
+ }
83
+ }
84
+ }
85
+ return file.Truncate(size)
86
+ }
87
+
88
+ func osReadLock(file *os.File, start, len int64, timeout time.Duration) error {
89
+ return osLock(file, unix.F_RDLCK, start, len, timeout, _IOERR_RDLOCK)
90
+ }
91
+
92
+ func osWriteLock(file *os.File, start, len int64, timeout time.Duration) error {
93
+ return osLock(file, unix.F_WRLCK, start, len, timeout, _IOERR_LOCK)
94
+ }
95
+
96
+ func osLock(file *os.File, typ int16, start, len int64, timeout time.Duration, def _ErrorCode) error {
97
+ lock := &flocktimeout_t{fl: unix.Flock_t{
98
+ Type: typ,
99
+ Start: start,
100
+ Len: len,
101
+ }}
102
+ var err error
103
+ switch {
104
+ case timeout == 0:
105
+ err = unix.FcntlFlock(file.Fd(), _F_OFD_SETLK, &lock.fl)
106
+ case timeout < 0:
107
+ err = unix.FcntlFlock(file.Fd(), _F_OFD_SETLKW, &lock.fl)
108
+ default:
109
+ lock.timeout = unix.NsecToTimespec(int64(timeout / time.Nanosecond))
110
+ err = unix.FcntlFlock(file.Fd(), _F_OFD_SETLKWTIMEOUT, &lock.fl)
111
+ runtime.KeepAlive(lock)
112
+ }
113
+ return osLockErrorCode(err, def)
114
+ }
115
+
116
+ func osUnlock(file *os.File, start, len int64) error {
117
+ lock := unix.Flock_t{
118
+ Type: unix.F_UNLCK,
119
+ Start: start,
120
+ Len: len,
121
+ }
122
+ for {
123
+ err := unix.FcntlFlock(file.Fd(), _F_OFD_SETLK, &lock)
124
+ if err == nil {
125
+ return nil
126
+ }
127
+ if err != unix.EINTR {
128
+ return sysError{err, _IOERR_UNLOCK}
129
+ }
130
+ }
131
+ }
@@ -0,0 +1,140 @@
1
+ //go:build sqlite3_dotlk
2
+
3
+ package vfs
4
+
5
+ import (
6
+ "errors"
7
+ "io/fs"
8
+ "os"
9
+ "sync"
10
+
11
+ "github.com/ncruces/go-sqlite3/internal/dotlk"
12
+ )
13
+
14
+ var (
15
+ // +checklocks:vfsDotLocksMtx
16
+ vfsDotLocks = map[string]*vfsDotLocker{}
17
+ vfsDotLocksMtx sync.Mutex
18
+ )
19
+
20
+ type vfsDotLocker struct {
21
+ shared int // +checklocks:vfsDotLocksMtx
22
+ pending *os.File // +checklocks:vfsDotLocksMtx
23
+ reserved *os.File // +checklocks:vfsDotLocksMtx
24
+ }
25
+
26
+ func osGetSharedLock(file *os.File) error {
27
+ vfsDotLocksMtx.Lock()
28
+ defer vfsDotLocksMtx.Unlock()
29
+
30
+ name := file.Name()
31
+ locker := vfsDotLocks[name]
32
+ if locker == nil {
33
+ if err := dotlk.TryLock(name + ".lock"); err != nil {
34
+ if errors.Is(err, fs.ErrExist) {
35
+ return _BUSY // Another process has the lock.
36
+ }
37
+ return sysError{err, _IOERR_LOCK}
38
+ }
39
+ locker = &vfsDotLocker{}
40
+ vfsDotLocks[name] = locker
41
+ }
42
+
43
+ if locker.pending != nil {
44
+ return _BUSY
45
+ }
46
+ locker.shared++
47
+ return nil
48
+ }
49
+
50
+ func osGetReservedLock(file *os.File) error {
51
+ vfsDotLocksMtx.Lock()
52
+ defer vfsDotLocksMtx.Unlock()
53
+
54
+ name := file.Name()
55
+ locker := vfsDotLocks[name]
56
+ if locker == nil {
57
+ return _IOERR_LOCK
58
+ }
59
+
60
+ if locker.reserved != nil && locker.reserved != file {
61
+ return _BUSY
62
+ }
63
+ locker.reserved = file
64
+ return nil
65
+ }
66
+
67
+ func osGetExclusiveLock(file *os.File, _ *LockLevel) error {
68
+ vfsDotLocksMtx.Lock()
69
+ defer vfsDotLocksMtx.Unlock()
70
+
71
+ name := file.Name()
72
+ locker := vfsDotLocks[name]
73
+ if locker == nil {
74
+ return _IOERR_LOCK
75
+ }
76
+
77
+ if locker.pending != nil && locker.pending != file {
78
+ return _BUSY
79
+ }
80
+ locker.pending = file
81
+ if locker.shared > 1 {
82
+ return _BUSY
83
+ }
84
+ return nil
85
+ }
86
+
87
+ func osDowngradeLock(file *os.File, _ LockLevel) error {
88
+ vfsDotLocksMtx.Lock()
89
+ defer vfsDotLocksMtx.Unlock()
90
+
91
+ name := file.Name()
92
+ locker := vfsDotLocks[name]
93
+ if locker == nil {
94
+ return _IOERR_UNLOCK
95
+ }
96
+
97
+ if locker.reserved == file {
98
+ locker.reserved = nil
99
+ }
100
+ if locker.pending == file {
101
+ locker.pending = nil
102
+ }
103
+ return nil
104
+ }
105
+
106
+ func osReleaseLock(file *os.File, state LockLevel) error {
107
+ vfsDotLocksMtx.Lock()
108
+ defer vfsDotLocksMtx.Unlock()
109
+
110
+ name := file.Name()
111
+ locker := vfsDotLocks[name]
112
+ if locker == nil {
113
+ return _IOERR_UNLOCK
114
+ }
115
+
116
+ if locker.shared == 1 {
117
+ if err := dotlk.Unlock(name + ".lock"); err != nil {
118
+ return sysError{err, _IOERR_UNLOCK}
119
+ }
120
+ delete(vfsDotLocks, name)
121
+ }
122
+
123
+ if locker.reserved == file {
124
+ locker.reserved = nil
125
+ }
126
+ if locker.pending == file {
127
+ locker.pending = nil
128
+ }
129
+ locker.shared--
130
+ return nil
131
+ }
132
+
133
+ func osCheckReservedLock(file *os.File) (bool, error) {
134
+ vfsDotLocksMtx.Lock()
135
+ defer vfsDotLocksMtx.Unlock()
136
+
137
+ name := file.Name()
138
+ locker := vfsDotLocks[name]
139
+ return locker != nil && locker.reserved != nil, nil
140
+ }
@@ -0,0 +1,56 @@
1
+ //go:build amd64 || arm64 || riscv64
2
+
3
+ package vfs
4
+
5
+ import (
6
+ "os"
7
+
8
+ "golang.org/x/sys/unix"
9
+ )
10
+
11
+ const (
12
+ // https://godbolt.org/z/1PcK5vea3
13
+ _F2FS_IOC_START_ATOMIC_WRITE = 62721
14
+ _F2FS_IOC_COMMIT_ATOMIC_WRITE = 62722
15
+ _F2FS_IOC_ABORT_ATOMIC_WRITE = 62725
16
+ _F2FS_IOC_GET_FEATURES = 2147808524 // -2147158772
17
+ _F2FS_FEATURE_ATOMIC_WRITE = 4
18
+ )
19
+
20
+ // notest
21
+
22
+ func osBatchAtomic(file *os.File) bool {
23
+ for {
24
+ flags, err := unix.IoctlGetInt(int(file.Fd()), _F2FS_IOC_GET_FEATURES)
25
+ if err != unix.EINTR {
26
+ return err == nil && flags&_F2FS_FEATURE_ATOMIC_WRITE != 0
27
+ }
28
+ }
29
+ }
30
+
31
+ func (f *vfsFile) BeginAtomicWrite() error {
32
+ for {
33
+ err := unix.IoctlSetInt(int(f.Fd()), _F2FS_IOC_START_ATOMIC_WRITE, 0)
34
+ if err != unix.EINTR {
35
+ return err
36
+ }
37
+ }
38
+ }
39
+
40
+ func (f *vfsFile) CommitAtomicWrite() error {
41
+ for {
42
+ err := unix.IoctlSetInt(int(f.Fd()), _F2FS_IOC_COMMIT_ATOMIC_WRITE, 0)
43
+ if err != unix.EINTR {
44
+ return err
45
+ }
46
+ }
47
+ }
48
+
49
+ func (f *vfsFile) RollbackAtomicWrite() error {
50
+ for {
51
+ err := unix.IoctlSetInt(int(f.Fd()), _F2FS_IOC_ABORT_ATOMIC_WRITE, 0)
52
+ if err != unix.EINTR {
53
+ return err
54
+ }
55
+ }
56
+ }