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,1142 @@
1
+ // node:sqlite — DatabaseSync / StatementSync on github.com/ncruces/go-sqlite3
2
+ // (SQLite compiled to Wasm and translated to Go: no cgo). The driver is
3
+ // vendored in the package's govendor/ and wired into dist/go.mod by
4
+ // src/index.ts when a program imports it.
5
+ //
6
+ // Rows are string-keyed TnMaps held in dynamic values: `row.name`,
7
+ // `row as Row` and `rows as Row[]` read them through TnGet / TnAs, and
8
+ // console.log prints their columns in order. SQL NULL is nil (JS null).
9
+ // A JS throw inside a user-defined function is caught, turned into an SQLite
10
+ // error, and rethrown once the statement returns, as Node does.
11
+ import { defineClass, defineHelper, defineModule, setResults } from './registry.js';
12
+ const sqliteHelper = `// node:sqlite
13
+ type TnSqliteDb struct {
14
+ conn *sqlite3.Conn
15
+ path string
16
+ readOnly bool
17
+ fkeys bool
18
+ dqs bool
19
+ allowExt bool
20
+ timeout float64
21
+ readBigInts bool
22
+ returnArrays bool
23
+ allowBare bool
24
+ allowUnknown bool
25
+ defensive bool
26
+ limitOptions interface{}
27
+ stmts []*TnSqliteStmt
28
+ limits *TnSqliteLimits
29
+ // A JS throw inside a user-defined function, rethrown after the statement
30
+ pending interface{}
31
+ hasPending bool
32
+ }
33
+
34
+ type TnSqliteStmt struct {
35
+ db *TnSqliteDb
36
+ s *sqlite3.Stmt
37
+ sql string
38
+ readBigInts bool
39
+ returnArrays bool
40
+ allowBare bool
41
+ allowUnknown bool
42
+ }
43
+
44
+ type TnSqliteRunResult struct {
45
+ changes interface{}
46
+ lastInsertRowid interface{}
47
+ }
48
+
49
+ type TnSqliteIterator struct {
50
+ stmt *TnSqliteStmt
51
+ done bool
52
+ }
53
+
54
+ type TnSqliteIteratorResult struct {
55
+ done bool
56
+ value interface{}
57
+ }
58
+
59
+ type TnSqliteBackupProgress struct {
60
+ totalPages float64
61
+ remainingPages float64
62
+ }
63
+
64
+ func tnSqliteState(message string) *TnError {
65
+ return TnNodeError("Error", "ERR_INVALID_STATE", message)
66
+ }
67
+
68
+ func tnSqliteArgType(message string) *TnError {
69
+ return TnNodeError("TypeError", "ERR_INVALID_ARG_TYPE", message)
70
+ }
71
+
72
+ // An SQLite failure as Node reports it: SQLite's message, code
73
+ // ERR_SQLITE_ERROR, errcode (the extended result code) and errstr
74
+ func tnSqliteError(err error) *TnError {
75
+ var se *sqlite3.Error
76
+ if !errors.As(err, &se) {
77
+ if code, ok := err.(sqlite3.ErrorCode); ok {
78
+ return tnSqliteCodeError(int(code), "")
79
+ }
80
+ if code, ok := err.(sqlite3.ExtendedErrorCode); ok {
81
+ return tnSqliteCodeError(int(code), "")
82
+ }
83
+ return TnNodeError("Error", "ERR_SQLITE_ERROR", err.Error())
84
+ }
85
+ // "sqlite3: <errstr>: <message>[: <OS error>]" → SQLite's own message
86
+ full := se.Error()
87
+ if sys := errors.Unwrap(se); sys != nil {
88
+ full = strings.TrimSuffix(full, ": "+sys.Error())
89
+ }
90
+ prefix := se.ExtendedCode().Error()
91
+ message := ""
92
+ if strings.HasPrefix(full, prefix+": ") {
93
+ message = full[len(prefix)+2:]
94
+ }
95
+ return tnSqliteCodeError(int(se.ExtendedCode()), message)
96
+ }
97
+
98
+ func tnSqliteCodeError(code int, message string) *TnError {
99
+ errstr := strings.TrimPrefix(sqlite3.ExtendedErrorCode(code).Error(), "sqlite3: ")
100
+ if message == "" {
101
+ message = errstr
102
+ }
103
+ e := TnNodeError("Error", "ERR_SQLITE_ERROR", message)
104
+ e.props["errcode"] = float64(code)
105
+ e.props["errstr"] = errstr
106
+ return e
107
+ }
108
+
109
+ // A boolean option: absent (or not a boolean) keeps the default
110
+ func tnSqliteFlag(options interface{}, key string, def bool) bool {
111
+ if options == nil {
112
+ return def
113
+ }
114
+ switch v := TnGet(options, key).(type) {
115
+ case bool:
116
+ return v
117
+ case *bool:
118
+ if v != nil {
119
+ return *v
120
+ }
121
+ }
122
+ return def
123
+ }
124
+
125
+ func tnSqliteNumber(options interface{}, key string, def float64) float64 {
126
+ if options == nil {
127
+ return def
128
+ }
129
+ switch v := TnGet(options, key).(type) {
130
+ case float64:
131
+ return v
132
+ case *float64:
133
+ if v != nil {
134
+ return *v
135
+ }
136
+ }
137
+ return def
138
+ }
139
+
140
+ func tnSqliteString(options interface{}, key string, def string) string {
141
+ if options == nil {
142
+ return def
143
+ }
144
+ switch v := TnGet(options, key).(type) {
145
+ case string:
146
+ return v
147
+ case *string:
148
+ if v != nil {
149
+ return *v
150
+ }
151
+ }
152
+ return def
153
+ }
154
+
155
+ func tnSqliteIsFunc(v interface{}) bool {
156
+ if v == nil {
157
+ return false
158
+ }
159
+ rv := reflect.ValueOf(v)
160
+ return rv.Kind() == reflect.Func && !rv.IsNil()
161
+ }
162
+
163
+ // fn.length: the declared parameters, without a rest parameter
164
+ func tnSqliteArity(fn interface{}) int {
165
+ t := reflect.TypeOf(fn)
166
+ if t.IsVariadic() {
167
+ return t.NumIn() - 1
168
+ }
169
+ return t.NumIn()
170
+ }
171
+
172
+ // new DatabaseSync(path, options?)
173
+ func TnNewSqliteDb(path interface{}, opts ...interface{}) *TnSqliteDb {
174
+ var options interface{}
175
+ if len(opts) > 0 {
176
+ options = opts[0]
177
+ }
178
+ db := &TnSqliteDb{}
179
+ switch p := path.(type) {
180
+ case string:
181
+ db.path = p
182
+ case []byte:
183
+ db.path = string(p)
184
+ default:
185
+ if href, ok := TnGet(path, "href").(string); ok && path != nil {
186
+ db.path = href
187
+ } else {
188
+ panic(tnSqliteArgType("The \\"path\\" argument must be a string, Uint8Array, or URL without null bytes."))
189
+ }
190
+ }
191
+ if strings.ContainsRune(db.path, 0) {
192
+ panic(tnSqliteArgType("The \\"path\\" argument must be a string, Uint8Array, or URL without null bytes."))
193
+ }
194
+ db.readOnly = tnSqliteFlag(options, "readOnly", false)
195
+ db.fkeys = tnSqliteFlag(options, "enableForeignKeyConstraints", true)
196
+ db.dqs = tnSqliteFlag(options, "enableDoubleQuotedStringLiterals", false)
197
+ db.allowExt = tnSqliteFlag(options, "allowExtension", false)
198
+ db.timeout = tnSqliteNumber(options, "timeout", 0)
199
+ db.readBigInts = tnSqliteFlag(options, "readBigInts", false)
200
+ db.returnArrays = tnSqliteFlag(options, "returnArrays", false)
201
+ db.allowBare = tnSqliteFlag(options, "allowBareNamedParameters", true)
202
+ db.allowUnknown = tnSqliteFlag(options, "allowUnknownNamedParameters", false)
203
+ db.defensive = tnSqliteFlag(options, "defensive", false)
204
+ if options != nil {
205
+ db.limitOptions = TnGet(options, "limits")
206
+ }
207
+ db.limits = &TnSqliteLimits{db: db}
208
+ if tnSqliteFlag(options, "open", true) {
209
+ db.open()
210
+ }
211
+ return db
212
+ }
213
+
214
+ func (db *TnSqliteDb) requireOpen() {
215
+ if db.conn == nil {
216
+ panic(tnSqliteState("database is not open"))
217
+ }
218
+ }
219
+
220
+ // Rethrows a JS error from a user-defined function, then an SQLite error
221
+ func (db *TnSqliteDb) check(err error) {
222
+ if db.hasPending {
223
+ pending := db.pending
224
+ db.pending, db.hasPending = nil, false
225
+ panic(pending)
226
+ }
227
+ if err != nil {
228
+ panic(tnSqliteError(err))
229
+ }
230
+ }
231
+
232
+ func (db *TnSqliteDb) open() {
233
+ if db.conn != nil {
234
+ panic(tnSqliteState("database is already open"))
235
+ }
236
+ flags := sqlite3.OPEN_URI
237
+ if db.readOnly {
238
+ flags |= sqlite3.OPEN_READONLY
239
+ } else {
240
+ flags |= sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE
241
+ }
242
+ conn, err := sqlite3.OpenFlags(db.path, flags)
243
+ if err != nil {
244
+ // Node reports the primary code of a failed open (14, not 782)
245
+ var se *sqlite3.Error
246
+ if errors.As(err, &se) {
247
+ panic(tnSqliteCodeError(int(se.Code()), ""))
248
+ }
249
+ panic(tnSqliteError(err))
250
+ }
251
+ db.conn = conn
252
+ for _, setting := range []struct {
253
+ op sqlite3.DBConfig
254
+ on bool
255
+ }{{sqlite3.DBCONFIG_DQS_DML, db.dqs}, {sqlite3.DBCONFIG_DQS_DDL, db.dqs}, {sqlite3.DBCONFIG_ENABLE_FKEY, db.fkeys}, {sqlite3.DBCONFIG_DEFENSIVE, db.defensive}} {
256
+ if _, err := conn.Config(setting.op, setting.on); err != nil {
257
+ panic(tnSqliteError(err))
258
+ }
259
+ }
260
+ if db.timeout > 0 {
261
+ conn.BusyTimeout(time.Duration(db.timeout) * time.Millisecond)
262
+ }
263
+ if db.limitOptions != nil {
264
+ for i, name := range tnSqliteLimitNames {
265
+ if v, ok := TnGet(db.limitOptions, name).(float64); ok {
266
+ db.limits.set(i, v)
267
+ }
268
+ }
269
+ }
270
+ }
271
+
272
+ func (db *TnSqliteDb) enableDefensive(active bool) {
273
+ db.requireOpen()
274
+ db.defensive = active
275
+ _, err := db.conn.Config(sqlite3.DBCONFIG_DEFENSIVE, active)
276
+ db.check(err)
277
+ }
278
+
279
+ // db.limits: live getters / setters over sqlite3_limit, in Node's order
280
+ var tnSqliteLimitNames = []string{"length", "sqlLength", "column", "exprDepth", "compoundSelect", "vdbeOp", "functionArg", "attach", "likePatternLength", "variableNumber", "triggerDepth"}
281
+
282
+ type TnSqliteLimits struct {
283
+ db *TnSqliteDb
284
+ }
285
+
286
+ func (l *TnSqliteLimits) get(id int) float64 {
287
+ l.db.requireOpen()
288
+ return float64(l.db.conn.Limit(sqlite3.LimitCategory(id), -1))
289
+ }
290
+
291
+ // Infinity restores the compile-time maximum
292
+ func (l *TnSqliteLimits) set(id int, value float64) {
293
+ l.db.requireOpen()
294
+ if math.IsInf(value, 1) {
295
+ value = math.MaxInt32
296
+ }
297
+ if value < 0 || value != math.Trunc(value) {
298
+ panic(TnNodeError("RangeError", "ERR_OUT_OF_RANGE", "The \\"value\\" argument must be a non-negative integer or Infinity."))
299
+ }
300
+ l.db.conn.Limit(sqlite3.LimitCategory(id), int(min(value, math.MaxInt32)))
301
+ }
302
+
303
+ func (l *TnSqliteLimits) Entries() [][]interface{} {
304
+ entries := [][]interface{}{}
305
+ for i, name := range tnSqliteLimitNames {
306
+ entries = append(entries, []interface{}{name, l.get(i)})
307
+ }
308
+ return entries
309
+ }
310
+
311
+ func (l *TnSqliteLimits) Get_length() float64 { return l.get(0) }
312
+ func (l *TnSqliteLimits) Set_length(v float64) { l.set(0, v) }
313
+ func (l *TnSqliteLimits) Get_sqlLength() float64 { return l.get(1) }
314
+ func (l *TnSqliteLimits) Set_sqlLength(v float64) { l.set(1, v) }
315
+ func (l *TnSqliteLimits) Get_column() float64 { return l.get(2) }
316
+ func (l *TnSqliteLimits) Set_column(v float64) { l.set(2, v) }
317
+ func (l *TnSqliteLimits) Get_exprDepth() float64 { return l.get(3) }
318
+ func (l *TnSqliteLimits) Set_exprDepth(v float64) { l.set(3, v) }
319
+ func (l *TnSqliteLimits) Get_compoundSelect() float64 { return l.get(4) }
320
+ func (l *TnSqliteLimits) Set_compoundSelect(v float64) { l.set(4, v) }
321
+ func (l *TnSqliteLimits) Get_vdbeOp() float64 { return l.get(5) }
322
+ func (l *TnSqliteLimits) Set_vdbeOp(v float64) { l.set(5, v) }
323
+ func (l *TnSqliteLimits) Get_functionArg() float64 { return l.get(6) }
324
+ func (l *TnSqliteLimits) Set_functionArg(v float64) { l.set(6, v) }
325
+ func (l *TnSqliteLimits) Get_attach() float64 { return l.get(7) }
326
+ func (l *TnSqliteLimits) Set_attach(v float64) { l.set(7, v) }
327
+ func (l *TnSqliteLimits) Get_likePatternLength() float64 { return l.get(8) }
328
+ func (l *TnSqliteLimits) Set_likePatternLength(v float64) { l.set(8, v) }
329
+ func (l *TnSqliteLimits) Get_variableNumber() float64 { return l.get(9) }
330
+ func (l *TnSqliteLimits) Set_variableNumber(v float64) { l.set(9, v) }
331
+ func (l *TnSqliteLimits) Get_triggerDepth() float64 { return l.get(10) }
332
+ func (l *TnSqliteLimits) Set_triggerDepth(v float64) { l.set(10, v) }
333
+
334
+ func (db *TnSqliteDb) Get_limits() *TnSqliteLimits { return db.limits }
335
+
336
+ // setAuthorizer(callback | null): the callback's SQLITE_OK / DENY / IGNORE
337
+ // decides each action while statements are prepared
338
+ func (db *TnSqliteDb) setAuthorizer(callback interface{}) {
339
+ db.requireOpen()
340
+ if !tnSqliteIsFunc(callback) {
341
+ db.check(db.conn.SetAuthorizer(nil))
342
+ return
343
+ }
344
+ db.check(db.conn.SetAuthorizer(func(action sqlite3.AuthorizerActionCode, name3rd, name4th, schema, inner string) (code sqlite3.AuthorizerReturnCode) {
345
+ defer func() {
346
+ if r := recover(); r != nil {
347
+ if !db.hasPending {
348
+ db.pending, db.hasPending = r, true
349
+ }
350
+ code = sqlite3.AUTH_DENY
351
+ }
352
+ }()
353
+ result := TnInvoke(callback, float64(action), tnSqliteNullable(name3rd), tnSqliteNullable(name4th), tnSqliteNullable(schema), tnSqliteNullable(inner))
354
+ n, ok := result.(float64)
355
+ if !ok || (n != 0 && n != 1 && n != 2) {
356
+ panic(TnNodeError("RangeError", "ERR_INVALID_RETURN_VALUE", "Authorizer callback returned a invalid authorization code"))
357
+ }
358
+ return sqlite3.AuthorizerReturnCode(n)
359
+ }))
360
+ }
361
+
362
+ func (db *TnSqliteDb) close() {
363
+ db.requireOpen()
364
+ for _, st := range db.stmts {
365
+ if st.s != nil {
366
+ st.s.Close()
367
+ st.s = nil
368
+ }
369
+ }
370
+ db.stmts = nil
371
+ err := db.conn.Close()
372
+ db.conn = nil
373
+ if err != nil {
374
+ panic(tnSqliteError(err))
375
+ }
376
+ }
377
+
378
+ func (db *TnSqliteDb) Get_isOpen() bool { return db.conn != nil }
379
+
380
+ func (db *TnSqliteDb) Get_isTransaction() bool {
381
+ db.requireOpen()
382
+ return !db.conn.GetAutocommit()
383
+ }
384
+
385
+ // location(dbName = 'main'): the database file, null in memory
386
+ func (db *TnSqliteDb) location(name ...interface{}) *string {
387
+ db.requireOpen()
388
+ schema := "main"
389
+ if len(name) > 0 {
390
+ if s, ok := name[0].(string); ok {
391
+ schema = s
392
+ }
393
+ }
394
+ file := db.conn.Filename(schema).String()
395
+ if file == "" {
396
+ return nil
397
+ }
398
+ return &file
399
+ }
400
+
401
+ func (db *TnSqliteDb) exec(sql string) {
402
+ db.requireOpen()
403
+ db.check(db.conn.Exec(sql))
404
+ }
405
+
406
+ func (db *TnSqliteDb) prepare(sql string, opts ...interface{}) *TnSqliteStmt {
407
+ db.requireOpen()
408
+ s, _, err := db.conn.Prepare(sql)
409
+ db.check(err)
410
+ if s == nil {
411
+ panic(TnNodeError("TypeError", "ERR_INVALID_ARG_VALUE", "The SQL query contains no statements."))
412
+ }
413
+ st := &TnSqliteStmt{db: db, s: s, sql: sql, readBigInts: db.readBigInts, returnArrays: db.returnArrays, allowBare: db.allowBare, allowUnknown: db.allowUnknown}
414
+ if len(opts) > 0 && opts[0] != nil {
415
+ st.readBigInts = tnSqliteFlag(opts[0], "readBigInts", st.readBigInts)
416
+ st.returnArrays = tnSqliteFlag(opts[0], "returnArrays", st.returnArrays)
417
+ st.allowBare = tnSqliteFlag(opts[0], "allowBareNamedParameters", st.allowBare)
418
+ st.allowUnknown = tnSqliteFlag(opts[0], "allowUnknownNamedParameters", st.allowUnknown)
419
+ }
420
+ db.stmts = append(db.stmts, st)
421
+ return st
422
+ }
423
+
424
+ // Runs a user-defined function's JS code: a throw becomes the statement's error
425
+ func (db *TnSqliteDb) callJS(ctx sqlite3.Context, fn func()) {
426
+ defer func() {
427
+ if r := recover(); r != nil {
428
+ if !db.hasPending {
429
+ db.pending, db.hasPending = r, true
430
+ }
431
+ ctx.ResultError(errors.New(fmt.Sprint(r)))
432
+ }
433
+ }()
434
+ fn()
435
+ }
436
+
437
+ // An SQLite value passed to a user-defined function
438
+ func (db *TnSqliteDb) argValue(v sqlite3.Value, bigInts bool) interface{} {
439
+ switch v.Type() {
440
+ case sqlite3.INTEGER:
441
+ return tnSqliteInteger(v.Int64(), bigInts)
442
+ case sqlite3.FLOAT:
443
+ return v.Float()
444
+ case sqlite3.TEXT:
445
+ return v.Text()
446
+ case sqlite3.BLOB:
447
+ return append([]byte{}, v.RawBlob()...)
448
+ }
449
+ return nil
450
+ }
451
+
452
+ func tnSqliteInteger(n int64, bigInts bool) interface{} {
453
+ if bigInts {
454
+ return new(tnbig.Int).SetInt64(n)
455
+ }
456
+ if n > 9007199254740991 || n < -9007199254740991 {
457
+ panic(TnNodeError("RangeError", "ERR_OUT_OF_RANGE", fmt.Sprintf("Value is too large to be represented as a JavaScript number: %d", n)))
458
+ }
459
+ return float64(n)
460
+ }
461
+
462
+ // A user-defined function's JS result as the SQL result
463
+ func tnSqliteResult(ctx sqlite3.Context, v interface{}) {
464
+ switch x := v.(type) {
465
+ case nil:
466
+ ctx.ResultNull()
467
+ case float64:
468
+ ctx.ResultFloat(x)
469
+ case string:
470
+ ctx.ResultText(x)
471
+ case []byte:
472
+ ctx.ResultBlob(x)
473
+ case *tnbig.Int:
474
+ if x == nil {
475
+ ctx.ResultNull()
476
+ } else if !x.IsInt64() {
477
+ panic(TnNodeError("RangeError", "ERR_OUT_OF_RANGE", "BigInt value is too large for SQLite"))
478
+ } else {
479
+ ctx.ResultInt64(x.Int64())
480
+ }
481
+ default:
482
+ rv := reflect.ValueOf(v)
483
+ switch {
484
+ case rv.Kind() >= reflect.Int && rv.Kind() <= reflect.Float64 && rv.Kind() != reflect.Uintptr:
485
+ ctx.ResultFloat(rv.Convert(reflect.TypeOf(float64(0))).Float())
486
+ case rv.Kind() == reflect.Chan:
487
+ panic(TnNodeError("Error", "ERR_SQLITE_ERROR", "Asynchronous user-defined functions are not supported"))
488
+ case (rv.Kind() == reflect.Pointer || rv.Kind() == reflect.Func || rv.Kind() == reflect.Slice || rv.Kind() == reflect.Map) && rv.IsNil():
489
+ ctx.ResultNull()
490
+ default:
491
+ panic(TnNodeError("Error", "ERR_SQLITE_ERROR", "Returned JavaScript value cannot be converted to a SQLite value"))
492
+ }
493
+ }
494
+ }
495
+
496
+ func tnSqliteFunctionFlags(options interface{}) sqlite3.FunctionFlag {
497
+ var flags sqlite3.FunctionFlag
498
+ if tnSqliteFlag(options, "deterministic", false) {
499
+ flags |= sqlite3.DETERMINISTIC
500
+ }
501
+ if tnSqliteFlag(options, "directOnly", false) {
502
+ flags |= sqlite3.DIRECTONLY
503
+ }
504
+ return flags
505
+ }
506
+
507
+ // function(name, options?, fn)
508
+ func (db *TnSqliteDb) function(name string, rest ...interface{}) {
509
+ db.requireOpen()
510
+ var options, fn interface{}
511
+ if len(rest) > 1 {
512
+ options, fn = rest[0], rest[1]
513
+ } else if len(rest) == 1 {
514
+ fn = rest[0]
515
+ }
516
+ if !tnSqliteIsFunc(fn) {
517
+ panic(tnSqliteArgType("The \\"function\\" argument must be a function."))
518
+ }
519
+ bigInts := tnSqliteFlag(options, "useBigIntArguments", false)
520
+ nArg := tnSqliteArity(fn)
521
+ if tnSqliteFlag(options, "varargs", false) {
522
+ nArg = -1
523
+ }
524
+ err := db.conn.CreateFunction(name, nArg, tnSqliteFunctionFlags(options), func(ctx sqlite3.Context, arg ...sqlite3.Value) {
525
+ db.callJS(ctx, func() {
526
+ args := make([]interface{}, len(arg))
527
+ for i, v := range arg {
528
+ args[i] = db.argValue(v, bigInts)
529
+ }
530
+ tnSqliteResult(ctx, TnInvoke(fn, args...))
531
+ })
532
+ })
533
+ db.check(err)
534
+ }
535
+
536
+ // aggregate(name, { start, step, result?, inverse? }): one accumulator per group
537
+ type tnSqliteAggregate struct {
538
+ db *TnSqliteDb
539
+ options interface{}
540
+ bigInts bool
541
+ acc interface{}
542
+ }
543
+
544
+ type tnSqliteWindow struct{ *tnSqliteAggregate }
545
+
546
+ func (a *tnSqliteAggregate) call(ctx sqlite3.Context, key string, arg []sqlite3.Value) {
547
+ a.db.callJS(ctx, func() {
548
+ args := []interface{}{a.acc}
549
+ for _, v := range arg {
550
+ args = append(args, a.db.argValue(v, a.bigInts))
551
+ }
552
+ a.acc = TnInvoke(TnGet(a.options, key), args...)
553
+ })
554
+ }
555
+
556
+ func (a *tnSqliteAggregate) Step(ctx sqlite3.Context, arg ...sqlite3.Value) { a.call(ctx, "step", arg) }
557
+
558
+ func (a *tnSqliteAggregate) Value(ctx sqlite3.Context) {
559
+ a.db.callJS(ctx, func() {
560
+ value := a.acc
561
+ if result := TnGet(a.options, "result"); tnSqliteIsFunc(result) {
562
+ value = TnInvoke(result, a.acc)
563
+ }
564
+ tnSqliteResult(ctx, value)
565
+ })
566
+ }
567
+
568
+ func (w tnSqliteWindow) Inverse(ctx sqlite3.Context, arg ...sqlite3.Value) { w.call(ctx, "inverse", arg) }
569
+
570
+ func (db *TnSqliteDb) aggregate(name string, options interface{}) {
571
+ db.requireOpen()
572
+ step := TnGet(options, "step")
573
+ if !tnSqliteIsFunc(step) {
574
+ panic(tnSqliteArgType("The \\"options.step\\" argument must be a function."))
575
+ }
576
+ inverse := TnGet(options, "inverse")
577
+ bigInts := tnSqliteFlag(options, "useBigIntArguments", false)
578
+ nArg := tnSqliteArity(step) - 1
579
+ if tnSqliteIsFunc(inverse) {
580
+ nArg = max(nArg, tnSqliteArity(inverse)-1)
581
+ }
582
+ if tnSqliteFlag(options, "varargs", false) {
583
+ nArg = -1
584
+ }
585
+ err := db.conn.CreateWindowFunction(name, nArg, tnSqliteFunctionFlags(options), func() sqlite3.AggregateFunction {
586
+ a := &tnSqliteAggregate{db: db, options: options, bigInts: bigInts}
587
+ start := TnGet(options, "start")
588
+ if tnSqliteIsFunc(start) {
589
+ start = TnInvoke(start)
590
+ }
591
+ a.acc = start
592
+ if tnSqliteIsFunc(inverse) {
593
+ return tnSqliteWindow{a}
594
+ }
595
+ return a
596
+ })
597
+ db.check(err)
598
+ }
599
+
600
+ func (db *TnSqliteDb) enableLoadExtension(allow bool) {
601
+ db.requireOpen()
602
+ if !db.allowExt {
603
+ panic(tnSqliteState("Cannot enable extension loading because it was disabled at database creation."))
604
+ }
605
+ if allow {
606
+ panic(tnSqliteState("Loading SQLite extensions is not supported: SQLite runs as Wasm inside the program"))
607
+ }
608
+ }
609
+
610
+ func (db *TnSqliteDb) loadExtension(path string, entry ...interface{}) {
611
+ db.requireOpen()
612
+ panic(tnSqliteState("Loading SQLite extensions is not supported: SQLite runs as Wasm inside the program"))
613
+ }
614
+
615
+ func (db *TnSqliteDb) createSession(options ...interface{}) interface{} {
616
+ db.requireOpen()
617
+ panic(TnNodeError("Error", "ERR_SQLITE_ERROR", "Sessions are not supported: the bundled SQLite has no session extension"))
618
+ }
619
+
620
+ func (db *TnSqliteDb) applyChangeset(changeset []byte, options ...interface{}) bool {
621
+ db.requireOpen()
622
+ panic(TnNodeError("Error", "ERR_SQLITE_ERROR", "Changesets are not supported: the bundled SQLite has no session extension"))
623
+ }
624
+
625
+ func (db *TnSqliteDb) serialize(name ...interface{}) []byte {
626
+ db.requireOpen()
627
+ panic(TnNodeError("Error", "ERR_SQLITE_ERROR", "serialize() is not supported: the bundled SQLite driver has no sqlite3_serialize binding"))
628
+ }
629
+
630
+ func (db *TnSqliteDb) deserialize(data []byte, options ...interface{}) {
631
+ db.requireOpen()
632
+ panic(TnNodeError("Error", "ERR_SQLITE_ERROR", "deserialize() is not supported: the bundled SQLite driver has no sqlite3_deserialize binding"))
633
+ }
634
+
635
+ func (st *TnSqliteStmt) requireLive() {
636
+ if st.s == nil {
637
+ panic(tnSqliteState("statement has been finalized"))
638
+ }
639
+ st.db.requireOpen()
640
+ }
641
+
642
+ // A JS value bound to a statement parameter
643
+ func (st *TnSqliteStmt) bindValue(index int, v interface{}) {
644
+ var err error
645
+ switch x := v.(type) {
646
+ case nil:
647
+ err = st.s.BindNull(index)
648
+ case float64:
649
+ err = st.s.BindFloat(index, x)
650
+ case bool:
651
+ err = st.s.BindBool(index, x)
652
+ case string:
653
+ err = st.s.BindText(index, x)
654
+ case []byte:
655
+ err = st.s.BindBlob(index, x)
656
+ case *tnbig.Int:
657
+ if x == nil {
658
+ err = st.s.BindNull(index)
659
+ } else if !x.IsInt64() {
660
+ panic(TnNodeError("TypeError", "ERR_INVALID_ARG_VALUE", "BigInt value is too large to bind."))
661
+ } else {
662
+ err = st.s.BindInt64(index, x.Int64())
663
+ }
664
+ default:
665
+ rv := reflect.ValueOf(v)
666
+ switch {
667
+ case rv.Kind() >= reflect.Int && rv.Kind() <= reflect.Float64 && rv.Kind() != reflect.Uintptr:
668
+ err = st.s.BindFloat(index, rv.Convert(reflect.TypeOf(float64(0))).Float())
669
+ case (rv.Kind() == reflect.Pointer || rv.Kind() == reflect.Slice || rv.Kind() == reflect.Map) && rv.IsNil():
670
+ err = st.s.BindNull(index)
671
+ case rv.Kind() == reflect.Pointer && rv.Elem().Kind() != reflect.Struct:
672
+ st.bindValue(index, rv.Elem().Interface())
673
+ return
674
+ default:
675
+ panic(tnSqliteArgType(fmt.Sprintf("Provided value cannot be bound to SQLite parameter %d.", index)))
676
+ }
677
+ }
678
+ st.db.check(err)
679
+ }
680
+
681
+ // Whether the first argument holds named parameters (a plain object)
682
+ func tnSqliteIsNamed(v interface{}) bool {
683
+ switch v.(type) {
684
+ case nil, string, float64, bool, []byte, *tnbig.Int:
685
+ return false
686
+ case map[string]interface{}, []interface{}:
687
+ return true
688
+ }
689
+ if _, ok := v.(interface{ Entries() [][]interface{} }); ok {
690
+ return true
691
+ }
692
+ rv := reflect.ValueOf(v)
693
+ return rv.Kind() == reflect.Pointer && !rv.IsNil() && rv.Elem().Kind() == reflect.Struct
694
+ }
695
+
696
+ // The keys and values of a named-parameters object, in order
697
+ func tnSqliteEntries(v interface{}) ([]string, []interface{}) {
698
+ keys := []string{}
699
+ values := []interface{}{}
700
+ // An array binds its indices as names ('0', '1', …), as in Node
701
+ if a, ok := v.([]interface{}); ok {
702
+ for i, value := range a {
703
+ keys = append(keys, strconv.Itoa(i))
704
+ values = append(values, value)
705
+ }
706
+ return keys, values
707
+ }
708
+ if m, ok := v.(map[string]interface{}); ok {
709
+ for k := range m {
710
+ keys = append(keys, k)
711
+ }
712
+ sort.Strings(keys)
713
+ for _, k := range keys {
714
+ values = append(values, m[k])
715
+ }
716
+ return keys, values
717
+ }
718
+ if e, ok := v.(interface{ Entries() [][]interface{} }); ok {
719
+ for _, entry := range e.Entries() {
720
+ if k, isString := entry[0].(string); isString {
721
+ keys = append(keys, k)
722
+ values = append(values, entry[1])
723
+ }
724
+ }
725
+ return keys, values
726
+ }
727
+ rv := reflect.ValueOf(v).Elem()
728
+ for i := 0; i < rv.NumField(); i++ {
729
+ f := rv.Field(i)
730
+ keys = append(keys, strings.TrimSuffix(rv.Type().Field(i).Name, "_"))
731
+ values = append(values, reflect.NewAt(f.Type(), unsafe.Pointer(f.UnsafeAddr())).Elem().Interface())
732
+ }
733
+ return keys, values
734
+ }
735
+
736
+ // Binds run / get / all / iterate arguments: an optional named-parameters
737
+ // object, then anonymous parameters into the unnamed slots, as Node does
738
+ func (st *TnSqliteStmt) bind(args []interface{}) {
739
+ st.s.Reset()
740
+ st.s.ClearBindings()
741
+ anon := args
742
+ if len(args) > 0 && tnSqliteIsNamed(args[0]) {
743
+ anon = args[1:]
744
+ // Bare names (\`{ id }\` for :id / $id / @id), built on first use
745
+ var bare map[string]string
746
+ bareNames := func() map[string]string {
747
+ if bare == nil {
748
+ bare = map[string]string{}
749
+ for i := 1; i <= st.s.BindCount(); i++ {
750
+ full := st.s.BindName(i)
751
+ if len(full) < 2 {
752
+ continue
753
+ }
754
+ name := full[1:]
755
+ if prev, seen := bare[name]; seen && prev != full {
756
+ panic(tnSqliteState(fmt.Sprintf("Cannot create bare named parameter '%s' because of conflicting names '%s' and '%s'.", name, prev, full)))
757
+ }
758
+ bare[name] = full
759
+ }
760
+ }
761
+ return bare
762
+ }
763
+ keys, values := tnSqliteEntries(args[0])
764
+ for i, key := range keys {
765
+ index := st.s.BindIndex(key)
766
+ if index == 0 && st.allowBare {
767
+ bare := bareNames()
768
+ if full, ok := bare[key]; ok {
769
+ index = st.s.BindIndex(full)
770
+ }
771
+ }
772
+ if index == 0 {
773
+ if st.allowUnknown {
774
+ continue
775
+ }
776
+ panic(tnSqliteState(fmt.Sprintf("Unknown named parameter '%s'", key)))
777
+ }
778
+ st.bindValue(index, values[i])
779
+ }
780
+ }
781
+ index := 1
782
+ for _, v := range anon {
783
+ for st.s.BindName(index) != "" {
784
+ index++
785
+ }
786
+ st.bindValue(index, v)
787
+ index++
788
+ }
789
+ }
790
+
791
+ func (st *TnSqliteStmt) column(i int) interface{} {
792
+ switch st.s.ColumnType(i) {
793
+ case sqlite3.INTEGER:
794
+ return tnSqliteInteger(st.s.ColumnInt64(i), st.readBigInts)
795
+ case sqlite3.FLOAT:
796
+ return st.s.ColumnFloat(i)
797
+ case sqlite3.TEXT:
798
+ return st.s.ColumnText(i)
799
+ case sqlite3.BLOB:
800
+ return append([]byte{}, st.s.ColumnRawBlob(i)...)
801
+ }
802
+ return nil
803
+ }
804
+
805
+ // The current row: an object keyed by column name, or an array (returnArrays)
806
+ func (st *TnSqliteStmt) row() interface{} {
807
+ n := st.s.ColumnCount()
808
+ if st.returnArrays {
809
+ values := make([]interface{}, n)
810
+ for i := 0; i < n; i++ {
811
+ values[i] = st.column(i)
812
+ }
813
+ return values
814
+ }
815
+ row := TnNewMap[string, interface{}]()
816
+ for i := 0; i < n; i++ {
817
+ row.Set(st.s.ColumnName(i), st.column(i))
818
+ }
819
+ return row
820
+ }
821
+
822
+ func (st *TnSqliteStmt) run(args ...interface{}) *TnSqliteRunResult {
823
+ st.requireLive()
824
+ st.bind(args)
825
+ defer st.s.Reset()
826
+ for st.s.Step() {
827
+ }
828
+ st.db.check(st.s.Err())
829
+ conn := st.db.conn
830
+ return &TnSqliteRunResult{
831
+ changes: tnSqliteInteger(conn.Changes(), st.readBigInts),
832
+ lastInsertRowid: tnSqliteInteger(conn.LastInsertRowID(), st.readBigInts),
833
+ }
834
+ }
835
+
836
+ func (st *TnSqliteStmt) get(args ...interface{}) interface{} {
837
+ st.requireLive()
838
+ st.bind(args)
839
+ defer st.s.Reset()
840
+ if st.s.Step() {
841
+ return st.row()
842
+ }
843
+ st.db.check(st.s.Err())
844
+ return nil
845
+ }
846
+
847
+ func (st *TnSqliteStmt) all(args ...interface{}) []interface{} {
848
+ st.requireLive()
849
+ st.bind(args)
850
+ defer st.s.Reset()
851
+ rows := []interface{}{}
852
+ for st.s.Step() {
853
+ rows = append(rows, st.row())
854
+ }
855
+ st.db.check(st.s.Err())
856
+ return rows
857
+ }
858
+
859
+ func (st *TnSqliteStmt) iterate(args ...interface{}) *TnSqliteIterator {
860
+ st.requireLive()
861
+ st.bind(args)
862
+ return &TnSqliteIterator{stmt: st}
863
+ }
864
+
865
+ func (it *TnSqliteIterator) next() *TnSqliteIteratorResult {
866
+ if it.done {
867
+ return &TnSqliteIteratorResult{done: true}
868
+ }
869
+ st := it.stmt
870
+ st.requireLive()
871
+ if st.s.Step() {
872
+ return &TnSqliteIteratorResult{value: st.row()}
873
+ }
874
+ it.done = true
875
+ err := st.s.Err()
876
+ st.s.Reset()
877
+ st.db.check(err)
878
+ return &TnSqliteIteratorResult{done: true}
879
+ }
880
+
881
+ // for...of over iterate(): the remaining rows
882
+ func (it *TnSqliteIterator) TnRows() []interface{} {
883
+ rows := []interface{}{}
884
+ for {
885
+ r := it.next()
886
+ if r.done {
887
+ return rows
888
+ }
889
+ rows = append(rows, r.value)
890
+ }
891
+ }
892
+
893
+ func tnSqliteNullable(s string) interface{} {
894
+ if s == "" {
895
+ return nil
896
+ }
897
+ return s
898
+ }
899
+
900
+ func (st *TnSqliteStmt) columns() []interface{} {
901
+ st.requireLive()
902
+ out := []interface{}{}
903
+ for i := 0; i < st.s.ColumnCount(); i++ {
904
+ out = append(out, TnNewMap[string, interface{}]().
905
+ Set("column", tnSqliteNullable(st.s.ColumnOriginName(i))).
906
+ Set("database", tnSqliteNullable(st.s.ColumnDatabaseName(i))).
907
+ Set("name", st.s.ColumnName(i)).
908
+ Set("table", tnSqliteNullable(st.s.ColumnTableName(i))).
909
+ Set("type", tnSqliteNullable(st.s.ColumnDeclType(i))))
910
+ }
911
+ return out
912
+ }
913
+
914
+ func (st *TnSqliteStmt) Get_sourceSQL() string {
915
+ st.requireLive()
916
+ return st.sql
917
+ }
918
+
919
+ func (st *TnSqliteStmt) Get_expandedSQL() string {
920
+ st.requireLive()
921
+ return st.s.ExpandedSQL()
922
+ }
923
+
924
+ func (st *TnSqliteStmt) setReadBigInts(on bool) {
925
+ st.requireLive()
926
+ st.readBigInts = on
927
+ }
928
+
929
+ func (st *TnSqliteStmt) setReturnArrays(on bool) {
930
+ st.requireLive()
931
+ st.returnArrays = on
932
+ }
933
+
934
+ func (st *TnSqliteStmt) setAllowBareNamedParameters(on bool) {
935
+ st.requireLive()
936
+ st.allowBare = on
937
+ }
938
+
939
+ func (st *TnSqliteStmt) setAllowUnknownNamedParameters(on bool) {
940
+ st.requireLive()
941
+ st.allowUnknown = on
942
+ }
943
+
944
+ // createTagStore(maxSize = 1000): sql\`SELECT … \${x}\` prepares (and caches,
945
+ // least recently used first out) one statement per template
946
+ type TnSqliteTagStore struct {
947
+ db *TnSqliteDb
948
+ capacity int
949
+ order []string
950
+ cache map[string]*TnSqliteStmt
951
+ }
952
+
953
+ func (db *TnSqliteDb) createTagStore(maxSize ...interface{}) *TnSqliteTagStore {
954
+ db.requireOpen()
955
+ capacity := 1000
956
+ if len(maxSize) > 0 {
957
+ if n, ok := maxSize[0].(float64); ok {
958
+ capacity = int(n)
959
+ }
960
+ }
961
+ return &TnSqliteTagStore{db: db, capacity: capacity, cache: map[string]*TnSqliteStmt{}}
962
+ }
963
+
964
+ func (ts *TnSqliteTagStore) stmt(parts []string) *TnSqliteStmt {
965
+ sql := strings.Join(parts, "?")
966
+ for i, key := range ts.order {
967
+ if key == sql {
968
+ ts.order = append(append(ts.order[:i:i], ts.order[i+1:]...), sql)
969
+ break
970
+ }
971
+ }
972
+ if st, ok := ts.cache[sql]; ok && st.s != nil {
973
+ return st
974
+ }
975
+ st := ts.db.prepare(sql)
976
+ if _, cached := ts.cache[sql]; !cached {
977
+ ts.order = append(ts.order, sql)
978
+ }
979
+ ts.cache[sql] = st
980
+ for len(ts.order) > ts.capacity {
981
+ delete(ts.cache, ts.order[0])
982
+ ts.order = ts.order[1:]
983
+ }
984
+ return st
985
+ }
986
+
987
+ func (ts *TnSqliteTagStore) get(parts []string, args ...interface{}) interface{} {
988
+ return ts.stmt(parts).get(args...)
989
+ }
990
+
991
+ func (ts *TnSqliteTagStore) all(parts []string, args ...interface{}) []interface{} {
992
+ return ts.stmt(parts).all(args...)
993
+ }
994
+
995
+ func (ts *TnSqliteTagStore) iterate(parts []string, args ...interface{}) *TnSqliteIterator {
996
+ return ts.stmt(parts).iterate(args...)
997
+ }
998
+
999
+ func (ts *TnSqliteTagStore) run(parts []string, args ...interface{}) *TnSqliteRunResult {
1000
+ return ts.stmt(parts).run(args...)
1001
+ }
1002
+
1003
+ func (ts *TnSqliteTagStore) clear() {
1004
+ ts.order = nil
1005
+ ts.cache = map[string]*TnSqliteStmt{}
1006
+ }
1007
+
1008
+ func (ts *TnSqliteTagStore) Get_size() float64 { return float64(len(ts.cache)) }
1009
+ func (ts *TnSqliteTagStore) Get_capacity() float64 { return float64(ts.capacity) }
1010
+ func (ts *TnSqliteTagStore) Get_db() *TnSqliteDb { return ts.db }
1011
+
1012
+ // backup(db, path, { source, target, rate, progress }): copies rate pages per
1013
+ // event-loop turn (the connection stays on the loop's goroutine); resolves
1014
+ // with the number of pages copied
1015
+ func TnSqliteBackup(db *TnSqliteDb, path string, opts ...interface{}) chan float64 {
1016
+ ch := make(chan float64, 1)
1017
+ var options interface{}
1018
+ if len(opts) > 0 {
1019
+ options = opts[0]
1020
+ }
1021
+ if db.conn == nil {
1022
+ TnReject(ch, tnSqliteState("database is not open"))
1023
+ return ch
1024
+ }
1025
+ rate := int(tnSqliteNumber(options, "rate", 100))
1026
+ if rate == 0 {
1027
+ rate = -1
1028
+ }
1029
+ progress := TnGet(options, "progress")
1030
+ b, err := db.conn.BackupInit(tnSqliteString(options, "source", "main"), path)
1031
+ if err != nil {
1032
+ TnReject(ch, tnSqliteError(err))
1033
+ return ch
1034
+ }
1035
+ TnLoopRef()
1036
+ var step func()
1037
+ step = func() {
1038
+ done, err := b.Step(rate)
1039
+ if err != nil {
1040
+ b.Close()
1041
+ TnLoopUnref()
1042
+ TnReject(ch, tnSqliteError(err))
1043
+ return
1044
+ }
1045
+ if !done {
1046
+ if options != nil && tnSqliteIsFunc(progress) {
1047
+ TnInvoke(progress, &TnSqliteBackupProgress{totalPages: float64(b.PageCount()), remainingPages: float64(b.Remaining())})
1048
+ }
1049
+ TnLoopPost(step)
1050
+ return
1051
+ }
1052
+ total := b.PageCount()
1053
+ err = b.Close()
1054
+ TnLoopUnref()
1055
+ if err != nil {
1056
+ TnReject(ch, tnSqliteError(err))
1057
+ return
1058
+ }
1059
+ ch <- float64(total)
1060
+ }
1061
+ TnLoopPost(step)
1062
+ return ch
1063
+ }`;
1064
+ export function registerSqlite(r) {
1065
+ defineModule(r, 'sqlite');
1066
+ defineHelper(r, 'nodeSqlite', ['github.com/ncruces/go-sqlite3', 'errors', 'fmt', 'math', 'math/big', 'reflect', 'sort', 'strconv', 'strings', 'time', 'unsafe'], ['dynamic', 'orderedMap', 'nodeInvoke', 'eventLoop', 'promise'], sqliteHelper);
1067
+ const use = () => r.helper('nodeSqlite');
1068
+ defineClass(r, 'sqlite.DatabaseSync', '*TnSqliteDb', 'class', 'open=; close=; exec=; prepare=*TnSqliteStmt; location=*string; function=; aggregate=; enableLoadExtension=; enableDefensive=; loadExtension=; setAuthorizer=; createTagStore=*TnSqliteTagStore; createSession=interface{}; applyChangeset=bool; serialize=[]byte; deserialize=', '', 'isOpen=bool; isTransaction=bool; limits=*TnSqliteLimits', '');
1069
+ defineClass(r, 'sqlite.StatementSync', '*TnSqliteStmt', 'class', 'run=*TnSqliteRunResult; get=interface{}; all=[]interface{}; iterate=*TnSqliteIterator; columns=[]interface{}; setReadBigInts=; setReturnArrays=; setAllowBareNamedParameters=; setAllowUnknownNamedParameters=', '', 'sourceSQL=string; expandedSQL=string', '');
1070
+ defineClass(r, 'sqlite.StatementResultingChanges', '*TnSqliteRunResult', 'class', '', 'changes=interface{}; lastInsertRowid=interface{}', '', '');
1071
+ defineClass(r, 'sqlite.SQLTagStore', '*TnSqliteTagStore', 'class', 'get=interface{}; all=[]interface{}; iterate=*TnSqliteIterator; run=*TnSqliteRunResult; clear=', '', 'size=float64; capacity=float64; db=*TnSqliteDb', '');
1072
+ const limitNames = ['length', 'sqlLength', 'column', 'exprDepth', 'compoundSelect', 'vdbeOp', 'functionArg', 'attach', 'likePatternLength', 'variableNumber', 'triggerDepth'];
1073
+ defineClass(r, 'sqlite.DatabaseLimits', '*TnSqliteLimits', 'class', '', '', limitNames.map((n) => `${n}=float64`).join('; '), limitNames.join('; '));
1074
+ defineClass(r, 'sqlite.StatementIterator', '*TnSqliteIterator', 'class', 'next=*TnSqliteIteratorResult; TnRows=[]interface{}', '', '', '');
1075
+ defineClass(r, 'sqlite.StatementIteratorResult', '*TnSqliteIteratorResult', 'class', '', 'done=bool; value=interface{}', '', '');
1076
+ defineClass(r, 'sqlite.BackupProgressInfo', '*TnSqliteBackupProgress', 'class', '', 'totalPages=float64; remainingPages=float64', '', '');
1077
+ r.iterators['*TnSqliteIterator'] = 'TnRows';
1078
+ r.constructors['sqlite.DatabaseSync'] = (c) => {
1079
+ use();
1080
+ return `TnNewSqliteDb(${c.args.join(', ')})`;
1081
+ };
1082
+ r.functions['sqlite.backup'] = (c) => {
1083
+ use();
1084
+ return `TnSqliteBackup(${c.args.join(', ')})`;
1085
+ };
1086
+ r.paramTypers['sqlite.backup'] = (_n) => ['*TnSqliteBackupProgress'];
1087
+ setResults(r, 'sqlite', 'backup=chan float64');
1088
+ // sqlite.constants: applyChangeset conflict values and setAuthorizer codes
1089
+ const constants = {
1090
+ SQLITE_CHANGESET_OMIT: 0,
1091
+ SQLITE_CHANGESET_REPLACE: 1,
1092
+ SQLITE_CHANGESET_ABORT: 2,
1093
+ SQLITE_CHANGESET_DATA: 1,
1094
+ SQLITE_CHANGESET_NOTFOUND: 2,
1095
+ SQLITE_CHANGESET_CONFLICT: 3,
1096
+ SQLITE_CHANGESET_CONSTRAINT: 4,
1097
+ SQLITE_CHANGESET_FOREIGN_KEY: 5,
1098
+ // setAuthorizer results and action codes
1099
+ SQLITE_OK: 0,
1100
+ SQLITE_DENY: 1,
1101
+ SQLITE_IGNORE: 2,
1102
+ SQLITE_COPY: 0,
1103
+ SQLITE_CREATE_INDEX: 1,
1104
+ SQLITE_CREATE_TABLE: 2,
1105
+ SQLITE_CREATE_TEMP_INDEX: 3,
1106
+ SQLITE_CREATE_TEMP_TABLE: 4,
1107
+ SQLITE_CREATE_TEMP_TRIGGER: 5,
1108
+ SQLITE_CREATE_TEMP_VIEW: 6,
1109
+ SQLITE_CREATE_TRIGGER: 7,
1110
+ SQLITE_CREATE_VIEW: 8,
1111
+ SQLITE_DELETE: 9,
1112
+ SQLITE_DROP_INDEX: 10,
1113
+ SQLITE_DROP_TABLE: 11,
1114
+ SQLITE_DROP_TEMP_INDEX: 12,
1115
+ SQLITE_DROP_TEMP_TABLE: 13,
1116
+ SQLITE_DROP_TEMP_TRIGGER: 14,
1117
+ SQLITE_DROP_TEMP_VIEW: 15,
1118
+ SQLITE_DROP_TRIGGER: 16,
1119
+ SQLITE_DROP_VIEW: 17,
1120
+ SQLITE_INSERT: 18,
1121
+ SQLITE_PRAGMA: 19,
1122
+ SQLITE_READ: 20,
1123
+ SQLITE_SELECT: 21,
1124
+ SQLITE_TRANSACTION: 22,
1125
+ SQLITE_UPDATE: 23,
1126
+ SQLITE_ATTACH: 24,
1127
+ SQLITE_DETACH: 25,
1128
+ SQLITE_ALTER_TABLE: 26,
1129
+ SQLITE_REINDEX: 27,
1130
+ SQLITE_ANALYZE: 28,
1131
+ SQLITE_CREATE_VTABLE: 29,
1132
+ SQLITE_DROP_VTABLE: 30,
1133
+ SQLITE_FUNCTION: 31,
1134
+ SQLITE_SAVEPOINT: 32,
1135
+ SQLITE_RECURSIVE: 33
1136
+ };
1137
+ r.objects['sqlite.constants'] = true;
1138
+ for (const name of Object.keys(constants)) {
1139
+ r.values[`sqlite.constants.${name}`] = (_c) => `float64(${constants[name]})`;
1140
+ r.valueTypes[`sqlite.constants.${name}`] = 'float64';
1141
+ }
1142
+ }